package mircoders.localizer.basic;
-import java.util.Arrays;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-
+import mir.bundle.Bundle;
+import mir.config.MirPropertiesConfiguration;
import mir.entity.Entity;
import mir.entity.adapter.EntityAdapter;
+import mir.entity.adapter.EntityAdapterFailure;
+import mir.generator.Generator;
+import mir.generator.GeneratorExc;
import mir.log.LoggerWrapper;
import mir.misc.StringUtil;
+import mir.module.ModuleExc;
import mir.storage.StorageObjectFailure;
import mir.util.DateTimeFunctions;
import mir.util.EntityUtility;
+import mir.util.StringRoutines;
+import mir.util.generator.BundleGeneratorFunction;
import mircoders.entity.EntityComment;
import mircoders.entity.EntityContent;
import mircoders.global.MirGlobal;
import mircoders.localizer.MirAdminInterfaceLocalizer;
import mircoders.localizer.MirLocalizerExc;
import mircoders.localizer.MirLocalizerFailure;
+import mircoders.module.ModuleLanguage;
import mircoders.storage.DatabaseContent;
+import java.util.*;
+
public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocalizer {
- private Vector simpleCommentOperations;
- private Vector simpleArticleOperations;
+ /** preview page name (String) -> generator name (String) */
+ private Map previewPages;
+ private List previewPageNames;
+
+ private List simpleCommentOperations;
+ private List simpleArticleOperations;
private Map simpleCommentOperationsMap;
private Map simpleArticleOperationsMap;
+
protected static LoggerWrapper logger = new LoggerWrapper("Localizer.AdminInterface");;
+ protected MirPropertiesConfiguration configuration = MirPropertiesConfiguration.instance();
- public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
+ public MirBasicAdminInterfaceLocalizer() throws MirLocalizerFailure {
- simpleCommentOperations = new Vector();
- simpleArticleOperations = new Vector();
+ simpleCommentOperations = new ArrayList();
+ simpleArticleOperations = new ArrayList();
simpleCommentOperationsMap = new HashMap();
simpleArticleOperationsMap = new HashMap();
+ previewPages = new HashMap();
+ previewPageNames = new ArrayList();
+
+ String[] previewConfiguration = configuration.getStringArray("Mir.Localizer.Admin.ArticlePreview");
+
+ for (int i = 0; i<previewConfiguration.length; i++) {
+ try {
+ List parts = StringRoutines.separateString(previewConfiguration[i], "=");
+ if (parts.size() == 2) {
+ String key = ((String) parts.get(0)).trim();
+ previewPages.put(key,((String) parts.get(1)).trim());
+ previewPageNames.add(key);
+ }
+ else {
+ throw new Exception("'=' expected");
+ }
+ }
+ catch (Exception e) {
+ logger.error("Error while processing preview configuration '" + previewConfiguration[i] + "': " + e.toString());
+ }
+ }
+
addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false));
addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false));
addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false));
addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0"));
}
- public String getAdminPageGenerator(String aPage, Map aTemplateData, EntityAdapter aUser, String aDefault) {
+ /** {@inheritDoc} */
+ public String getAdminPageGenerator(String aPage, Map aTemplateData, EntityAdapter aUser, String aDefault) throws MirLocalizerExc {
return aDefault;
}
+ /** {@inheritDoc} */
+ public Generator prepareArticlePreview(String aPreviewPage, EntityAdapter anArticle, Map aContext) throws MirLocalizerExc {
+ MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(aContext);
+ aContext.put("article", anArticle);
+
+ try {
+ aContext.put(
+ "language",
+ MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("language",
+ new ModuleLanguage().languageForCode(configuration.getString("Mir.Localizer.Admin.ArticlePreviewLanguage"))));
+ }
+ catch (EntityAdapterFailure e) {
+ throw new MirLocalizerFailure("Can't create entity adapter", e);
+ }
+ catch (ModuleExc e) {
+ throw new MirLocalizerFailure("Can't find language", e);
+ }
+ aContext.put("pathprefix", configuration.getString("Mir.Localizer.Admin.ArticlePreviewLanguage"));
+
+ aContext.put("lang",
+ new BundleGeneratorFunction(
+ new Bundle[] {
+ MirGlobal.getBundleFactory().getBundle(
+ "etc/bundles/producer",
+ new String[] {
+ configuration.getString("Mir.Localizer.Admin.ArticlePreviewLanguage") }) }));
+
+
+ if (previewPages.containsKey(aPreviewPage)) {
+ try {
+ return MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator((String) previewPages.get(aPreviewPage));
+ }
+ catch (GeneratorExc e) {
+ throw new MirLocalizerFailure(e);
+ }
+ }
+ else {
+ throw new MirLocalizerExc("Unknown preview: " + aPreviewPage);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public List getPreviewPages(EntityAdapter anArticle) throws MirLocalizerExc{
+ return Collections.unmodifiableList(previewPageNames);
+ }
+
+ /** {@inheritDoc} */
public String makePasswordDigest(String aPassword) {
return aPassword;
}
};
public List simpleCommentOperations() {
- return simpleCommentOperations;
+ return Collections.unmodifiableList(simpleCommentOperations);
};
public List simpleArticleOperations() {
- return simpleArticleOperations;
+ return Collections.unmodifiableList(simpleArticleOperations);
};
public MirSimpleEntityOperation simpleArticleOperationForName(String aName) {
protected static class SetCommentFieldsOperation extends CommentModifyingOperation {
private Map values;
- public SetCommentFieldsOperation(String aName, String aFields[], String aValues[]) throws MirLocalizerExc {
+ public SetCommentFieldsOperation(String aName, String aFields[], String aValues[]) {
super(aName);
values = new HashMap();