d7abc87985f36b9b73d30fe90871d3163c8af337
[mir.git] / source / mircoders / localizer / basic / MirBasicAdminInterfaceLocalizer.java
1 /*\r
2  * Copyright (C) 2001, 2002  The Mir-coders group\r
3  *\r
4  * This file is part of Mir.\r
5  *\r
6  * Mir is free software; you can redistribute it and/or modify\r
7  * it under the terms of the GNU General Public License as published by\r
8  * the Free Software Foundation; either version 2 of the License, or\r
9  * (at your option) any later version.\r
10  *\r
11  * Mir is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  * GNU General Public License for more details.\r
15  *\r
16  * You should have received a copy of the GNU General Public License\r
17  * along with Mir; if not, write to the Free Software\r
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
19  *\r
20  * In addition, as a special exception, The Mir-coders gives permission to link\r
21  * the code of this program with the com.oreilly.servlet library, any library\r
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced\r
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of\r
24  * the above that use the same license as the above), and distribute linked\r
25  * combinations including the two.  You must obey the GNU General Public\r
26  * License in all respects for all of the code used other than the above\r
27  * mentioned libraries.  If you modify this file, you may extend this exception\r
28  * to your version of the file, but you are not obligated to do so.  If you do\r
29  * not wish to do so, delete this exception statement from your version.\r
30  */\r
31 \r
32 package mircoders.localizer.basic;\r
33 \r
34 import java.util.*;\r
35 import java.text.*;\r
36 \r
37 import mir.entity.adapter.*;\r
38 import mir.storage.*;\r
39 import mir.entity.*;\r
40 import mir.util.*;\r
41 \r
42 import mircoders.localizer.*;\r
43 import mircoders.entity.*;\r
44 import mircoders.storage.*;\r
45 \r
46 \r
47 public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {\r
48   private Vector simpleCommentOperations;\r
49   private Vector simpleArticleOperations;\r
50   private Map simpleCommentOperationsMap;\r
51   private Map simpleArticleOperationsMap;\r
52   private static SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");\r
53 \r
54   public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {\r
55     simpleCommentOperations = new Vector();\r
56     simpleArticleOperations = new Vector();\r
57     simpleCommentOperationsMap = new HashMap();\r
58     simpleArticleOperationsMap = new HashMap();\r
59 \r
60     addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));\r
61     addSimpleArticleOperation(new SetArticleFieldOperation("unhide", "is_published", "1", false));\r
62     addSimpleArticleOperation(new SetArticleFieldOperation("hide", "is_published", "0", false));\r
63 \r
64     addSimpleCommentOperation(new SetCommentFieldOperation("unhide", "is_published", "1"));\r
65     addSimpleCommentOperation(new SetCommentFieldOperation("hide", "is_published", "0"));\r
66   }\r
67 \r
68   public List simpleCommentOperations() {\r
69     return simpleCommentOperations;\r
70   };\r
71 \r
72   public List simpleArticleOperations() {\r
73     return simpleArticleOperations;\r
74   };\r
75 \r
76   public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {\r
77     return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName);\r
78   };\r
79 \r
80   public MirSimpleEntityOperation simpleCommentOperationForName(String aName) {\r
81     return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName);\r
82   };\r
83 \r
84   public void removeSimpleArticleOperation(String aName) {\r
85     simpleArticleOperations.remove(simpleArticleOperationsMap.get(aName));\r
86     simpleArticleOperationsMap.remove(aName);\r
87   }\r
88 \r
89   public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) {\r
90     removeSimpleArticleOperation(anOperation.getName());\r
91     simpleArticleOperationsMap.put(anOperation.getName(), anOperation);\r
92     simpleArticleOperations.add(anOperation);\r
93   }\r
94 \r
95   public void removeSimpleCommentOperation(String aName) {\r
96     simpleCommentOperations.remove(simpleCommentOperationsMap.get(aName));\r
97     simpleCommentOperationsMap.remove(aName);\r
98   }\r
99 \r
100   public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) {\r
101     removeSimpleCommentOperation(anOperation.getName());\r
102     simpleCommentOperationsMap.put(anOperation.getName(), anOperation);\r
103     simpleCommentOperations.add(anOperation);\r
104   }\r
105 \r
106   protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation {\r
107     private String name;\r
108 \r
109     protected EntityModifyingOperation(String aName) {\r
110       name = aName;\r
111     }\r
112 \r
113     public String getName() {\r
114       return name;\r
115     };\r
116 \r
117     public boolean isAvailable(EntityAdapter anEntity) {\r
118       try {\r
119         Entity entity = anEntity.getEntity();\r
120         return isAvailable(entity);\r
121       }\r
122       catch (Throwable t) {\r
123         return false;\r
124       }\r
125     };\r
126 \r
127     public void perform(EntityAdapter aUser, EntityAdapter anEntity) {\r
128       Entity entity = anEntity.getEntity();\r
129       try {\r
130         performModification(aUser, entity);\r
131         entity.update();\r
132       }\r
133       catch (Throwable t) {\r
134       }\r
135     };\r
136 \r
137     protected abstract boolean isAvailable(Entity anEntity) throws StorageObjectException ;\r
138     protected abstract void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectException ;\r
139   }\r
140 \r
141   public static abstract class CommentModifyingOperation extends EntityModifyingOperation {\r
142     public CommentModifyingOperation(String aName) {\r
143       super(aName);\r
144     }\r
145 \r
146     protected boolean isAvailable(Entity anEntity) throws StorageObjectException {\r
147       return anEntity instanceof EntityComment && isAvailable((EntityComment) anEntity);\r
148     }\r
149 \r
150     protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectException {\r
151       performModification(aUser, (EntityComment) anEntity);\r
152       DatabaseContent.getInstance().setUnproduced("id="+anEntity.getValue("to_media"));\r
153     };\r
154 \r
155     protected abstract boolean isAvailable(EntityComment aComment) throws StorageObjectException ;\r
156     protected abstract void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectException ;\r
157   }\r
158 \r
159   public static abstract class ArticleModifyingOperation extends EntityModifyingOperation {\r
160     private boolean logOperation;\r
161 \r
162     public ArticleModifyingOperation(String aName, boolean aLogOperation) {\r
163       super(aName);\r
164 \r
165       logOperation = aLogOperation;\r
166     }\r
167 \r
168     protected boolean isAvailable(Entity anEntity) throws StorageObjectException {\r
169       return anEntity instanceof EntityContent && isAvailable((EntityContent) anEntity);\r
170     }\r
171 \r
172     protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectException {\r
173       performModification(aUser, (EntityContent) anEntity);\r
174       anEntity.setValueForProperty("is_produced", "0");\r
175 \r
176       if (logOperation) {\r
177         StringBuffer comment = new StringBuffer(anEntity.getValue("comment"));\r
178         if (comment.length()>0 && comment.charAt(comment.length()-1)!='\n') {\r
179           comment.append('\n');\r
180         }\r
181         comment.append(dateFormatter.format((new GregorianCalendar()).getTime()));\r
182         comment.append(" ");\r
183         try {\r
184           comment.append(StringRoutines.interpretAsString(aUser.get("login")));\r
185         }\r
186         catch (Throwable t) {\r
187         }\r
188         comment.append(" ");\r
189         comment.append(getName());\r
190         anEntity.setValueForProperty("comment", comment.toString());\r
191       }\r
192     };\r
193 \r
194     protected abstract boolean isAvailable(EntityContent anArticle) throws StorageObjectException ;\r
195     protected abstract void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectException ;\r
196   }\r
197 \r
198   protected static class SetCommentFieldOperation extends CommentModifyingOperation {\r
199     private String field;\r
200     private String value;\r
201 \r
202     public SetCommentFieldOperation(String aName, String aField, String aValue) {\r
203       super(aName);\r
204 \r
205       field = aField;\r
206       value = aValue;\r
207     }\r
208 \r
209     protected boolean isAvailable(EntityComment aComment) {\r
210       return aComment.getValue(field) == null || !aComment.getValue(field).equals(value);\r
211     }\r
212 \r
213     protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectException {\r
214       aComment.setValueForProperty(field, value);\r
215     }\r
216   }\r
217 \r
218   protected static class SetArticleFieldOperation extends ArticleModifyingOperation {\r
219     private String field;\r
220     private String value;\r
221 \r
222     public SetArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {\r
223       super(aName, aLogOperation);\r
224 \r
225       field = aField;\r
226       value = aValue;\r
227     }\r
228 \r
229     protected boolean isAvailable(EntityContent anArticle) {\r
230       return anArticle.getValue(field) == null || !anArticle.getValue(field).equals(value);\r
231     }\r
232 \r
233     protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectException {\r
234       anArticle.setValueForProperty(field, value);\r
235     }\r
236   }\r
237 \r
238   protected static class ChangeArticleFieldOperation extends ArticleModifyingOperation {\r
239     private String field;\r
240     private String oldValue;\r
241     private String newValue;\r
242 \r
243     public ChangeArticleFieldOperation(String aName, String aField, String anOldValue, String aNewValue, boolean aLogOperation) {\r
244       super(aName, aLogOperation);\r
245 \r
246       field = aField;\r
247       newValue = aNewValue;\r
248       oldValue = anOldValue;\r
249     }\r
250 \r
251     protected boolean isAvailable(EntityContent anArticle) {\r
252       return anArticle.getValue(field) != null && anArticle.getValue(field).equals(oldValue);\r
253     }\r
254 \r
255     protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectException {\r
256       anArticle.setValueForProperty(field, newValue);\r
257     }\r
258   }\r
259 }