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.text.SimpleDateFormat;
34 import java.util.GregorianCalendar;
35 import java.util.HashMap;
36 import java.util.List;
38 import java.util.Vector;
40 import mir.entity.Entity;
41 import mir.entity.adapter.EntityAdapter;
42 import mir.misc.StringUtil;
43 import mir.storage.StorageObjectFailure;
44 import mir.util.StringRoutines;
45 import mircoders.entity.EntityComment;
46 import mircoders.entity.EntityContent;
47 import mircoders.localizer.MirAdminInterfaceLocalizer;
48 import mircoders.localizer.MirLocalizerExc;
49 import mircoders.localizer.MirLocalizerFailure;
50 import mircoders.storage.DatabaseContent;
53 public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {
54 private Vector simpleCommentOperations;
55 private Vector simpleArticleOperations;
56 private Map simpleCommentOperationsMap;
57 private Map simpleArticleOperationsMap;
58 private static SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");
60 public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
61 simpleCommentOperations = new Vector();
62 simpleArticleOperations = new Vector();
63 simpleCommentOperationsMap = new HashMap();
64 simpleArticleOperationsMap = new HashMap();
66 addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));
67 addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false));
68 addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false));
70 addSimpleCommentOperation(new ModifyCommentFieldOperation("unhide", "is_published", "1"));
71 addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0"));
74 public String makePasswordDigest(String aPassword) {
78 public void initializeArticle(Map anArticle) {
79 anArticle.put("is_published", "0");
80 anArticle.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
83 public List simpleCommentOperations() {
84 return simpleCommentOperations;
87 public List simpleArticleOperations() {
88 return simpleArticleOperations;
91 public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {
92 return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName);
95 public MirSimpleEntityOperation simpleCommentOperationForName(String aName) {
96 return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName);
99 public void removeSimpleArticleOperation(String aName) {
100 simpleArticleOperations.remove(simpleArticleOperationsMap.get(aName));
101 simpleArticleOperationsMap.remove(aName);
104 public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) {
105 removeSimpleArticleOperation(anOperation.getName());
106 simpleArticleOperationsMap.put(anOperation.getName(), anOperation);
107 simpleArticleOperations.add(anOperation);
110 public void removeSimpleCommentOperation(String aName) {
111 simpleCommentOperations.remove(simpleCommentOperationsMap.get(aName));
112 simpleCommentOperationsMap.remove(aName);
115 public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) {
116 removeSimpleCommentOperation(anOperation.getName());
117 simpleCommentOperationsMap.put(anOperation.getName(), anOperation);
118 simpleCommentOperations.add(anOperation);
121 protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation {
124 protected EntityModifyingOperation(String aName) {
128 public String getName() {
132 public boolean isAvailable(EntityAdapter anEntity) {
134 Entity entity = anEntity.getEntity();
135 return isAvailable(entity);
137 catch (Throwable t) {
142 public void perform(EntityAdapter aUser, EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure {
143 Entity entity = anEntity.getEntity();
145 performModification(aUser, entity);
148 catch (Throwable t) {
149 throw new MirLocalizerFailure(t);
153 protected abstract boolean isAvailable(Entity anEntity) throws StorageObjectFailure ;
154 protected abstract void performModification(EntityAdapter aUser, Entity anEntity) throws MirLocalizerExc, MirLocalizerFailure ;
157 public static abstract class CommentModifyingOperation extends EntityModifyingOperation {
158 public CommentModifyingOperation(String aName) {
162 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
163 return anEntity instanceof EntityComment && isAvailable((EntityComment) anEntity);
166 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
167 performModification(aUser, (EntityComment) anEntity);
168 DatabaseContent.getInstance().setUnproduced("id="+anEntity.getValue("to_media"));
171 protected abstract boolean isAvailable(EntityComment aComment) throws StorageObjectFailure ;
172 protected abstract void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure ;
175 public static abstract class ArticleModifyingOperation extends EntityModifyingOperation {
176 private boolean logOperation;
178 public ArticleModifyingOperation(String aName, boolean aLogOperation) {
181 logOperation = aLogOperation;
184 protected boolean isAvailable(Entity anEntity) throws StorageObjectFailure {
185 return anEntity instanceof EntityContent && isAvailable((EntityContent) anEntity);
188 protected void performModification(EntityAdapter aUser, Entity anEntity) throws StorageObjectFailure {
189 performModification(aUser, (EntityContent) anEntity);
190 anEntity.setValueForProperty("is_produced", "0");
193 StringBuffer comment = new StringBuffer();
195 comment.append(StringRoutines.interpretAsString(anEntity.getValue("comment")));
197 catch (Throwable t) {
199 if (comment.length()>0 && comment.charAt(comment.length()-1)!='\n') {
200 comment.append('\n');
202 comment.append(dateFormatter.format((new GregorianCalendar()).getTime()));
205 comment.append(StringRoutines.interpretAsString(aUser.get("login")));
207 catch (Throwable t) {
210 comment.append(getName());
211 anEntity.setValueForProperty("comment", comment.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 ModifyCommentFieldOperation extends CommentModifyingOperation {
240 private String field;
241 private String value;
243 public ModifyCommentFieldOperation(String aName, String aField, String aValue) {
250 protected boolean isAvailable(EntityComment aComment) {
251 return aComment.getValue(field) == null || !aComment.getValue(field).equals(value);
254 protected void performModification(EntityAdapter aUser, EntityComment aComment) throws StorageObjectFailure {
255 aComment.setValueForProperty(field, value);
259 protected static class SetArticleFieldOperation extends ArticleModifyingOperation {
260 private String field;
261 private String value;
263 public SetArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
264 super(aName, aLogOperation);
270 protected boolean isAvailable(EntityContent anArticle) {
274 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
275 anArticle.setValueForProperty(field, value);
279 protected static class ModifyArticleFieldOperation extends ArticleModifyingOperation {
280 private String field;
281 private String value;
283 public ModifyArticleFieldOperation(String aName, String aField, String aValue, boolean aLogOperation) {
284 super(aName, aLogOperation);
290 protected boolean isAvailable(EntityContent anArticle) {
291 return anArticle.getValue(field) == null || !anArticle.getValue(field).equals(value);
294 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
295 anArticle.setValueForProperty(field, value);
299 protected static class ChangeArticleFieldOperation extends ArticleModifyingOperation {
300 private String field;
301 private Set oldValues;
302 private String newValue;
304 public ChangeArticleFieldOperation(String aName, String aField, String anOldValues[], String aNewValue, boolean aLogOperation) {
305 super(aName, aLogOperation);
308 newValue = aNewValue;
309 oldValues = new HashSet(Arrays.asList(anOldValues));
311 public ChangeArticleFieldOperation(String aName, String aField, String anOldValue, String aNewValue, boolean aLogOperation) {
312 this(aName, aField, new String[] {anOldValue}, aNewValue, aLogOperation);
315 protected boolean isAvailable(EntityContent anArticle) {
316 return anArticle.getValue(field) != null && oldValues.contains(anArticle.getValue(field));
319 protected void performModification(EntityAdapter aUser, EntityContent anArticle) throws StorageObjectFailure {
320 anArticle.setValueForProperty(field, newValue);