2 * Copyright (C) 2001, 2002 The Mir-coders group
\r
4 * This file is part of Mir.
\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
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
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
20 * In addition, as a special exception, The Mir-coders gives permission to link
\r
21 * the code of this program with any library licensed under the Apache Software License,
\r
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
\r
23 * (or with modified versions of the above that use the same license as the above),
\r
24 * and distribute linked combinations including the two. You must obey the
\r
25 * GNU General Public License in all respects for all of the code used other than
\r
26 * the above mentioned libraries. If you modify this file, you may extend this
\r
27 * exception to your version of the file, but you are not obligated to do so.
\r
28 * If you do not wish to do so, delete this exception statement from your version.
\r
31 package mircoders.localizer.basic;
\r
33 import java.util.Arrays;
\r
34 import java.util.GregorianCalendar;
\r
35 import java.util.HashMap;
\r
36 import java.util.HashSet;
\r
37 import java.util.Iterator;
\r
38 import java.util.List;
\r
39 import java.util.Map;
\r
40 import java.util.Set;
\r
41 import java.util.Vector;
\r
43 import mir.entity.Entity;
\r
45 import mir.entity.adapter.EntityAdapter;
\r
46 import mir.misc.StringUtil;
\r
47 import mir.storage.StorageObjectFailure;
\r
48 import mir.util.DateTimeFunctions;
\r
49 import mircoders.entity.EntityComment;
\r
50 import mircoders.entity.EntityContent;
\r
51 import mircoders.global.MirGlobal;
\r
52 import mircoders.localizer.MirAdminInterfaceLocalizer;
\r
53 import mircoders.localizer.MirAdminInterfaceLocalizer.MirSimpleEntityOperation;
\r
54 import mircoders.localizer.MirLocalizerExc;
\r
55 import mircoders.localizer.MirLocalizerFailure;
\r
56 import mircoders.storage.DatabaseContent;
\r
59 public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {
\r
60 private Vector simpleCommentOperations;
\r
61 private Vector simpleArticleOperations;
\r
62 private Map simpleCommentOperationsMap;
\r
63 private Map simpleArticleOperationsMap;
\r
64 protected static LoggerWrapper logger = new LoggerWrapper("Localizer.AdminInterface");;
\r
66 public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
\r
68 simpleCommentOperations = new Vector();
\r
69 simpleArticleOperations = new Vector();
\r
70 simpleCommentOperationsMap = new HashMap();
\r
71 simpleArticleOperationsMap = new HashMap();
\r
73 addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));
\r
74 addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false));
\r
75 addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false));
\r
77 addSimpleCommentOperation(new ModifyCommentFieldOperation("unhide", "is_published", "1"));
\r
78 addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0"));
\r
81 public String makePasswordDigest(String aPassword) {
\r
85 public void initializeArticle(Map anArticle) {
\r
86 anArticle.put("is_published", "0");
\r
87 anArticle.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
\r
90 public List simpleCommentOperations() {
\r
91 return simpleCommentOperations;
\r
94 public List simpleArticleOperations() {
\r
95 return simpleArticleOperations;
\r
98 public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {
\r
99 return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName);
\r
102 public MirSimpleEntityOperation simpleCommentOperationForName(String aName) {
\r
103 return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName);
\r
106 public void removeSimpleArticleOperation(String aName) {
\r
107 simpleArticleOperations.remove(simpleArticleOperationsMap.get(aName));
\r
108 simpleArticleOperationsMap.remove(aName);
\r
111 public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) {
\r
112 removeSimpleArticleOperation(anOperation.getName());
\r
113 simpleArticleOperationsMap.put(anOperation.getName(), anOperation);
\r
114 simpleArticleOperations.add(anOperation);
\r
117 public void removeSimpleCommentOperation(String aName) {
\r
118 simpleCommentOperations.remove(simpleCommentOperationsMap.get(aName));
\r
119 simpleCommentOperationsMap.remove(aName);
\r
122 public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) {
\r
123 removeSimpleCommentOperation(anOperation.getName());
\r
124 simpleCommentOperationsMap.put(anOperation.getName(), anOperation);
\r
125 simpleCommentOperations.add(anOperation);
\r
128 protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation {
\r
129 private String name;
\r
131 protected EntityModifyingOperation(String aName) {
\r
135 public String getName() {
\r
139 public boolean isAvailable(EntityAdapter anEntity) {
\r
141 Entity entity = anEntity.getEntity();
\r
142 return isAvailable(entity);
\r
144 catch (Throwable t) {
\r
149 public void perform(EntityAdapter aUser, EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure {
\r
150 Entity entity = anEntity.getEntity();
\r
152 performModification(aUser, entity);
\r
155 catch (Throwable t) {
\r
156 throw new MirLocalizerFailure(t);
\r
160 protected abstract boolean isAvailable(Entity anEntity) throws StorageObjectFailure ;
\r
161 protected abstract void performModification(EntityAdapter aUser, Entity anEntity) throws MirLocalizerExc, MirLocalizerFailure ;
\r
164 public static abstract class CommentModifyingOperation extends EntityModifyingOperation {
\r
165 public CommentModifyingOperation(String aName) {
\r
169 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
\r
170 return anEntity instanceof EntityComment && isAvailable((EntityComment) anEntity);
\r
173 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
\r
174 performModification(aUser, (EntityComment) anEntity);
\r
175 DatabaseContent.getInstance().setUnproduced("id="+anEntity.getValue("to_media"));
\r
178 protected abstract boolean isAvailable(EntityComment aComment) throws StorageObjectFailure ;
\r
179 protected abstract void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure ;
\r
182 public static abstract class ArticleModifyingOperation extends EntityModifyingOperation {
\r
183 private boolean logOperation;
\r
185 public ArticleModifyingOperation(String aName, boolean aLogOperation) {
\r
188 logOperation = aLogOperation;
\r
191 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
\r
192 return anEntity instanceof EntityContent && isAvailable((EntityContent) anEntity);
\r
195 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
\r
196 performModification(aUser, (EntityContent) anEntity);
\r
197 anEntity.setValueForProperty("is_produced", "0");
\r
199 if (logOperation) {
\r
201 StringBuffer line = new StringBuffer();
\r
203 line.append(DateTimeFunctions.advancedDateFormat(
\r
204 MirGlobal.config().getString("Mir.DefaultDateTimeFormat"),
\r
205 (new GregorianCalendar()).getTime(),
\r
206 MirGlobal.config().getString("Mir.DefaultTimezone")));
\r
209 line.append(aUser.get("login"));
\r
211 line.append("unknown");
\r
214 line.append(getName());
\r
215 ( (EntityContent) anEntity).appendToComments(line.toString());
\r
217 catch (Throwable t) {
\r
218 logger.error("Error while trying to log an article operation: " + t.toString());
\r
223 protected abstract boolean isAvailable(EntityContent anArticle) throws StorageObjectFailure ;
\r
224 protected abstract void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure ;
\r
227 protected static class SetCommentFieldOperation extends CommentModifyingOperation {
\r
228 private String field;
\r
229 private String value;
\r
231 public SetCommentFieldOperation(String aName, String aField, String aValue) {
\r
238 protected boolean isAvailable(EntityComment aComment) {
\r
242 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
\r
243 aComment.setValueForProperty(field, value);
\r
247 protected static class SetCommentFieldsOperation extends CommentModifyingOperation {
\r
248 private Map values;
\r
250 public SetCommentFieldsOperation(String aName, String aFields[], String aValues[]) throws MirLocalizerExc {
\r
253 values = new HashMap();
\r
255 for (int i=0; i<aFields.length; i++)
\r
256 values.put(aFields[i], aValues[i]);
\r
259 protected boolean isAvailable(EntityComment aComment) {
\r
263 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
\r
264 Iterator i = values.entrySet().iterator();
\r
266 while (i.hasNext()) {
\r
267 Map.Entry entry = (Map.Entry) i.next();
\r
268 aComment.setValueForProperty((String) entry.getKey(), (String) entry.getValue());
\r
274 protected static class ModifyCommentFieldOperation extends CommentModifyingOperation {
\r
275 private String field;
\r
276 private String value;
\r
278 public ModifyCommentFieldOperation(String aName, String aField, String aValue) {
\r
285 protected boolean isAvailable(EntityComment aComment) {
\r
286 return aComment.getValue(field) == null || !aComment.getValue(field).equals(value);
\r
289 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
\r
290 aComment.setValueForProperty(field, value);
\r
294 protected static class SetArticleFieldOperation extends ArticleModifyingOperation {
\r
295 private String field;
\r
296 private String value;
\r
298 public SetArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
\r
299 super(aName, aLogOperation);
\r
305 protected boolean isAvailable(EntityContent anArticle) {
\r
309 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
\r
310 anArticle.setValueForProperty(field, value);
\r
314 protected static class ModifyArticleFieldOperation extends ArticleModifyingOperation {
\r
315 private String field;
\r
316 private String value;
\r
318 public ModifyArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
\r
319 super(aName, aLogOperation);
\r
325 protected boolean isAvailable(EntityContent anArticle) {
\r
326 return anArticle.getValue(field) == null || !anArticle.getValue(field).equals(value);
\r
329 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
\r
330 anArticle.setValueForProperty(field, value);
\r
334 protected static class ChangeArticleFieldOperation extends ArticleModifyingOperation {
\r
335 private String field;
\r
336 private Set oldValues;
\r
337 private String newValue;
\r
339 public ChangeArticleFieldOperation(String aName, String aField, String anOldValues[], String aNewValue, boolean aLogOperation) {
\r
340 super(aName, aLogOperation);
\r
343 newValue = aNewValue;
\r
344 oldValues = new HashSet(Arrays.asList(anOldValues));
\r
346 public ChangeArticleFieldOperation(String aName, String aField, String anOldValue, String aNewValue, boolean aLogOperation) {
\r
347 this(aName, aField, new String[] {anOldValue}, aNewValue, aLogOperation);
\r
350 protected boolean isAvailable(EntityContent anArticle) {
\r
351 return anArticle.getValue(field) != null && oldValues.contains(anArticle.getValue(field));
\r
354 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
\r
355 anArticle.setValueForProperty(field, newValue);
\r