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