2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with any library licensed under the Apache Software License,
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23 * (or with modified versions of the above that use the same license as the above),
24 * and distribute linked combinations including the two. You must obey the
25 * GNU General Public License in all respects for all of the code used other than
26 * the above mentioned libraries. If you modify this file, you may extend this
27 * exception to your version of the file, but you are not obligated to do so.
28 * If you do not wish to do so, delete this exception statement from your version.
31 package mircoders.localizer.basic;
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
44 import mir.entity.adapter.EntityAdapter;
\r
45 import mir.misc.StringUtil;
\r
46 import mir.storage.StorageObjectFailure;
\r
47 import mir.util.DateTimeFunctions;
\r
48 import mircoders.entity.EntityComment;
\r
49 import mircoders.entity.EntityContent;
\r
50 import mircoders.global.MirGlobal;
\r
51 import mircoders.localizer.MirAdminInterfaceLocalizer;
\r
52 import mircoders.localizer.MirAdminInterfaceLocalizer.MirSimpleEntityOperation;
\r
53 import mircoders.localizer.MirLocalizerExc;
\r
54 import mircoders.localizer.MirLocalizerFailure;
\r
55 import mircoders.storage.DatabaseContent;
58 public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {
59 private Vector simpleCommentOperations;
60 private Vector simpleArticleOperations;
61 private Map simpleCommentOperationsMap;
62 private Map simpleArticleOperationsMap;
64 public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
65 simpleCommentOperations = new Vector();
66 simpleArticleOperations = new Vector();
67 simpleCommentOperationsMap = new HashMap();
68 simpleArticleOperationsMap = new HashMap();
70 addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));
71 addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false));
72 addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false));
74 addSimpleCommentOperation(new ModifyCommentFieldOperation("unhide", "is_published", "1"));
75 addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0"));
78 public String makePasswordDigest(String aPassword) {
82 public void initializeArticle(Map anArticle) {
83 anArticle.put("is_published", "0");
84 anArticle.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
87 public List simpleCommentOperations() {
88 return simpleCommentOperations;
91 public List simpleArticleOperations() {
92 return simpleArticleOperations;
95 public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {
96 return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName);
99 public MirSimpleEntityOperation simpleCommentOperationForName(String aName) {
100 return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName);
103 public void removeSimpleArticleOperation(String aName) {
104 simpleArticleOperations.remove(simpleArticleOperationsMap.get(aName));
105 simpleArticleOperationsMap.remove(aName);
108 public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) {
109 removeSimpleArticleOperation(anOperation.getName());
110 simpleArticleOperationsMap.put(anOperation.getName(), anOperation);
111 simpleArticleOperations.add(anOperation);
114 public void removeSimpleCommentOperation(String aName) {
115 simpleCommentOperations.remove(simpleCommentOperationsMap.get(aName));
116 simpleCommentOperationsMap.remove(aName);
119 public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) {
120 removeSimpleCommentOperation(anOperation.getName());
121 simpleCommentOperationsMap.put(anOperation.getName(), anOperation);
122 simpleCommentOperations.add(anOperation);
125 protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation {
128 protected EntityModifyingOperation(String aName) {
132 public String getName() {
136 public boolean isAvailable(EntityAdapter anEntity) {
138 Entity entity = anEntity.getEntity();
139 return isAvailable(entity);
141 catch (Throwable t) {
146 public void perform(EntityAdapter aUser, EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure {
147 Entity entity = anEntity.getEntity();
149 performModification(aUser, entity);
152 catch (Throwable t) {
153 throw new MirLocalizerFailure(t);
157 protected abstract boolean isAvailable(Entity anEntity) throws StorageObjectFailure ;
158 protected abstract void performModification(EntityAdapter aUser, Entity anEntity) throws MirLocalizerExc, MirLocalizerFailure ;
161 public static abstract class CommentModifyingOperation extends EntityModifyingOperation {
162 public CommentModifyingOperation(String aName) {
166 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
167 return anEntity instanceof EntityComment && isAvailable((EntityComment) anEntity);
170 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
171 performModification(aUser, (EntityComment) anEntity);
172 DatabaseContent.getInstance().setUnproduced("id="+anEntity.getValue("to_media"));
175 protected abstract boolean isAvailable(EntityComment aComment) throws StorageObjectFailure ;
176 protected abstract void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure ;
179 public static abstract class ArticleModifyingOperation extends EntityModifyingOperation {
180 private boolean logOperation;
182 public ArticleModifyingOperation(String aName, boolean aLogOperation) {
185 logOperation = aLogOperation;
188 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
189 return anEntity instanceof EntityContent && isAvailable((EntityContent) anEntity);
192 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
193 performModification(aUser, (EntityContent) anEntity);
194 anEntity.setValueForProperty("is_produced", "0");
197 StringBuffer line = new StringBuffer();
199 line.append(DateTimeFunctions.advancedDateFormat(
200 MirGlobal.config().getString("Mir.DefaultDateTimeFormat"),
201 (new GregorianCalendar()).getTime(),
202 MirGlobal.config().getString("Mir.DefaultTimezone")));
205 line.append(aUser.get("login"));
207 line.append("unknown");
210 line.append(getName());
211 ((EntityContent) anEntity).appendToComments(line.toString());
215 protected abstract boolean isAvailable(EntityContent anArticle) throws StorageObjectFailure ;
216 protected abstract void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure ;
219 protected static class SetCommentFieldOperation extends CommentModifyingOperation {
220 private String field;
221 private String value;
223 public SetCommentFieldOperation(String aName, String aField, String aValue) {
230 protected boolean isAvailable(EntityComment aComment) {
234 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
235 aComment.setValueForProperty(field, value);
239 protected static class SetCommentFieldsOperation extends CommentModifyingOperation {
242 public SetCommentFieldsOperation(String aName, String aFields[], String aValues[]) throws MirLocalizerExc {
245 values = new HashMap();
247 for (int i=0; i<aFields.length; i++)
248 values.put(aFields[i], aValues[i]);
251 protected boolean isAvailable(EntityComment aComment) {
255 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
256 Iterator i = values.entrySet().iterator();
258 while (i.hasNext()) {
259 Map.Entry entry = (Map.Entry) i.next();
260 aComment.setValueForProperty((String) entry.getKey(), (String) entry.getValue());
266 protected static class ModifyCommentFieldOperation extends CommentModifyingOperation {
267 private String field;
268 private String value;
270 public ModifyCommentFieldOperation(String aName, String aField, String aValue) {
277 protected boolean isAvailable(EntityComment aComment) {
278 return aComment.getValue(field) == null || !aComment.getValue(field).equals(value);
281 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
282 aComment.setValueForProperty(field, value);
286 protected static class SetArticleFieldOperation extends ArticleModifyingOperation {
287 private String field;
288 private String value;
290 public SetArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
291 super(aName, aLogOperation);
297 protected boolean isAvailable(EntityContent anArticle) {
301 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
302 anArticle.setValueForProperty(field, value);
306 protected static class ModifyArticleFieldOperation extends ArticleModifyingOperation {
307 private String field;
308 private String value;
310 public ModifyArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
311 super(aName, aLogOperation);
317 protected boolean isAvailable(EntityContent anArticle) {
318 return anArticle.getValue(field) == null || !anArticle.getValue(field).equals(value);
321 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
322 anArticle.setValueForProperty(field, value);
326 protected static class ChangeArticleFieldOperation extends ArticleModifyingOperation {
327 private String field;
328 private Set oldValues;
329 private String newValue;
331 public ChangeArticleFieldOperation(String aName, String aField, String anOldValues[], String aNewValue, boolean aLogOperation) {
332 super(aName, aLogOperation);
335 newValue = aNewValue;
336 oldValues = new HashSet(Arrays.asList(anOldValues));
338 public ChangeArticleFieldOperation(String aName, String aField, String anOldValue, String aNewValue, boolean aLogOperation) {
339 this(aName, aField, new String[] {anOldValue}, aNewValue, aLogOperation);
342 protected boolean isAvailable(EntityContent anArticle) {
343 return anArticle.getValue(field) != null && oldValues.contains(anArticle.getValue(field));
346 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
347 anArticle.setValueForProperty(field, newValue);