code cleaning, new config
[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.text.SimpleDateFormat;\r
35 import java.util.GregorianCalendar;\r
36 import java.util.HashMap;\r
37 import java.util.List;\r
38 import java.util.Map;\r
39 import java.util.Vector;\r
40 \r
41 import mir.entity.Entity;\r
42 import mir.entity.adapter.EntityAdapter;\r
43 import mir.storage.StorageObjectFailure;\r
44 import mir.util.StringRoutines;\r
45 import mircoders.entity.EntityComment;\r
46 import mircoders.entity.EntityContent;\r
47 import mircoders.localizer.MirAdminInterfaceLocalizer;\r
48 import mircoders.localizer.MirLocalizerExc;\r
49 import mircoders.localizer.MirLocalizerFailure;\r
50 import mircoders.storage.DatabaseContent;\r
51 \r
52 \r
53 public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {\r
54   private Vector simpleCommentOperations;\r
55   private Vector simpleArticleOperations;\r
56   private Map simpleCommentOperationsMap;\r
57   private Map simpleArticleOperationsMap;\r
58   private static SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");\r
59 \r
60   public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {\r
61     simpleCommentOperations = new Vector();\r
62     simpleArticleOperations = new Vector();\r
63     simpleCommentOperationsMap = new HashMap();\r
64     simpleArticleOperationsMap = new HashMap();\r
65 \r
66     addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));\r
67     addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false));\r
68     addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false));\r
69 \r
70     addSimpleCommentOperation(new ModifyCommentFieldOperation("unhide", "is_published", "1"));\r
71     addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0"));\r
72   }\r
73 \r
74   public List simpleCommentOperations() {\r
75     return simpleCommentOperations;\r
76   };\r
77 \r
78   public List simpleArticleOperations() {\r
79     return simpleArticleOperations;\r
80   };\r
81 \r
82   public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {\r
83     return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName);\r
84   };\r
85 \r
86   public MirSimpleEntityOperation simpleCommentOperationForName(String aName) {\r
87     return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName);\r
88   };\r
89 \r
90   public void removeSimpleArticleOperation(String aName) {\r
91     simpleArticleOperations.remove(simpleArticleOperationsMap.get(aName));\r
92     simpleArticleOperationsMap.remove(aName);\r
93   }\r
94 \r
95   public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) {\r
96     removeSimpleArticleOperation(anOperation.getName());\r
97     simpleArticleOperationsMap.put(anOperation.getName(), anOperation);\r
98     simpleArticleOperations.add(anOperation);\r
99   }\r
100 \r
101   public void removeSimpleCommentOperation(String aName) {\r
102     simpleCommentOperations.remove(simpleCommentOperationsMap.get(aName));\r
103     simpleCommentOperationsMap.remove(aName);\r
104   }\r
105 \r
106   public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) {\r
107     removeSimpleCommentOperation(anOperation.getName());\r
108     simpleCommentOperationsMap.put(anOperation.getName(), anOperation);\r
109     simpleCommentOperations.add(anOperation);\r
110   }\r
111 \r
112   protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation {\r
113     private String name;\r
114 \r
115     protected EntityModifyingOperation(String aName) {\r
116       name = aName;\r
117     }\r
118 \r
119     public String getName() {\r
120       return name;\r
121     };\r
122 \r
123     public boolean isAvailable(EntityAdapter anEntity) {\r
124       try {\r
125         Entity entity = anEntity.getEntity();\r
126         return isAvailable(entity);\r
127       }\r
128       catch (Throwable t) {\r
129         return false;\r
130       }\r
131     };\r
132 \r
133     public void perform(EntityAdapter aUser, EntityAdapter anEntity) {\r
134       Entity entity = anEntity.getEntity();\r
135       try {\r
136         performModification(aUser, entity);\r
137         entity.update();\r
138       }\r
139       catch (Throwable t) {\r
140       }\r
141     };\r
142 \r
143     protected abstract boolean isAvailable(Entity anEntity) throws StorageObjectFailure ;\r
144     protected abstract void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure ;\r
145   }\r
146 \r
147   public static abstract class CommentModifyingOperation extends EntityModifyingOperation {\r
148     public CommentModifyingOperation(String aName) {\r
149       super(aName);\r
150     }\r
151 \r
152     protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {\r
153       return anEntity instanceof EntityComment && isAvailable((EntityComment) anEntity);\r
154     }\r
155 \r
156     protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {\r
157       performModification(aUser, (EntityComment) anEntity);\r
158       DatabaseContent.getInstance().setUnproduced("id="+anEntity.getValue("to_media"));\r
159     };\r
160 \r
161     protected abstract boolean isAvailable(EntityComment aComment) throws StorageObjectFailure ;\r
162     protected abstract void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure ;\r
163   }\r
164 \r
165   public static abstract class ArticleModifyingOperation extends EntityModifyingOperation {\r
166     private boolean logOperation;\r
167 \r
168     public ArticleModifyingOperation(String aName, boolean aLogOperation) {\r
169       super(aName);\r
170 \r
171       logOperation = aLogOperation;\r
172     }\r
173 \r
174     protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {\r
175       return anEntity instanceof EntityContent && isAvailable((EntityContent) anEntity);\r
176     }\r
177 \r
178     protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {\r
179       performModification(aUser, (EntityContent) anEntity);\r
180       anEntity.setValueForProperty("is_produced", "0");\r
181 \r
182       if (logOperation) {\r
183         StringBuffer comment = new StringBuffer();\r
184         try {\r
185           comment.append(StringRoutines.interpretAsString(anEntity.getValue("comment")));\r
186         }\r
187         catch (Throwable t) {\r
188         }\r
189         if (comment.length()>0 && comment.charAt(comment.length()-1)!='\n') {\r
190           comment.append('\n');\r
191         }\r
192         comment.append(dateFormatter.format((new GregorianCalendar()).getTime()));\r
193         comment.append(" ");\r
194         try {\r
195           comment.append(StringRoutines.interpretAsString(aUser.get("login")));\r
196         }\r
197         catch (Throwable t) {\r
198         }\r
199         comment.append(" ");\r
200         comment.append(getName());\r
201         anEntity.setValueForProperty("comment", comment.toString());\r
202       }\r
203     };\r
204 \r
205     protected abstract boolean isAvailable(EntityContent anArticle) throws StorageObjectFailure ;\r
206     protected abstract void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure ;\r
207   }\r
208 \r
209   protected static class SetCommentFieldOperation extends CommentModifyingOperation {\r
210     private String field;\r
211     private String value;\r
212 \r
213     public SetCommentFieldOperation(String aName, String aField, String aValue) {\r
214       super(aName);\r
215 \r
216       field = aField;\r
217       value = aValue;\r
218     }\r
219 \r
220     protected boolean isAvailable(EntityComment aComment) {\r
221       return true;\r
222     }\r
223 \r
224     protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {\r
225       aComment.setValueForProperty(field, value);\r
226     }\r
227   }\r
228 \r
229   protected static class ModifyCommentFieldOperation extends CommentModifyingOperation {\r
230     private String field;\r
231     private String value;\r
232 \r
233     public ModifyCommentFieldOperation(String aName, String aField, String aValue) {\r
234       super(aName);\r
235 \r
236       field = aField;\r
237       value = aValue;\r
238     }\r
239 \r
240     protected boolean isAvailable(EntityComment aComment) {\r
241       return aComment.getValue(field) == null || !aComment.getValue(field).equals(value);\r
242     }\r
243 \r
244     protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {\r
245       aComment.setValueForProperty(field, value);\r
246     }\r
247   }\r
248 \r
249   protected static class SetArticleFieldOperation extends ArticleModifyingOperation {\r
250     private String field;\r
251     private String value;\r
252 \r
253     public SetArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {\r
254       super(aName, aLogOperation);\r
255 \r
256       field = aField;\r
257       value = aValue;\r
258     }\r
259 \r
260     protected boolean isAvailable(EntityContent anArticle) {\r
261       return true;\r
262     }\r
263 \r
264     protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {\r
265       anArticle.setValueForProperty(field, value);\r
266     }\r
267   }\r
268 \r
269   protected static class ModifyArticleFieldOperation extends ArticleModifyingOperation {\r
270     private String field;\r
271     private String value;\r
272 \r
273     public ModifyArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {\r
274       super(aName, aLogOperation);\r
275 \r
276       field = aField;\r
277       value = aValue;\r
278     }\r
279 \r
280     protected boolean isAvailable(EntityContent anArticle) {\r
281       return anArticle.getValue(field) == null || !anArticle.getValue(field).equals(value);\r
282     }\r
283 \r
284     protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {\r
285       anArticle.setValueForProperty(field, value);\r
286     }\r
287   }\r
288 \r
289   protected static class ChangeArticleFieldOperation extends ArticleModifyingOperation {\r
290     private String field;\r
291     private String oldValue;\r
292     private String newValue;\r
293 \r
294     public ChangeArticleFieldOperation(String aName, String aField, String anOldValue, String aNewValue, boolean aLogOperation) {\r
295       super(aName, aLogOperation);\r
296 \r
297       field = aField;\r
298       newValue = aNewValue;\r
299       oldValue = anOldValue;\r
300     }\r
301 \r
302     protected boolean isAvailable(EntityContent anArticle) {\r
303       return anArticle.getValue(field) != null && anArticle.getValue(field).equals(oldValue);\r
304     }\r
305 \r
306     protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {\r
307       anArticle.setValueForProperty(field, newValue);\r
308     }\r
309   }\r
310 }\r