introduced AdapterEntityModel
authorzapata <zapata>
Tue, 18 Jun 2002 20:08:50 +0000 (20:08 +0000)
committerzapata <zapata>
Tue, 18 Jun 2002 20:08:50 +0000 (20:08 +0000)
46 files changed:
source/mir/entity/adapter/EntityAdapter.java
source/mir/entity/adapter/EntityAdapterDefinition.java
source/mir/entity/adapter/EntityAdapterModel.java [new file with mode: 0755]
source/mir/entity/adapter/EntityIteratorAdapter.java
source/mir/generator/FreemarkerGenerator.java
source/mir/producer/EntityBatchingProducerNode.java
source/mir/producer/EntityEnumeratingProducerNode.java
source/mir/producer/EntityListProducerNode.java
source/mircoders/entity/adapter/AudioAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/BreakingAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/CommentAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/ContentAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/FeatureAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/ImagesAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/LanguageAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/MediaAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/OtherAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/TopicsAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/UsersAdapterDefinition.java [deleted file]
source/mircoders/entity/adapter/VideoAdapterDefinition.java [deleted file]
source/mircoders/global/ProducerEngine.java
source/mircoders/localizer/MirCachingLocalizerDecorator.java
source/mircoders/localizer/MirDataModelLocalizer.java [new file with mode: 0755]
source/mircoders/localizer/MirGeneratorLocalizer.java
source/mircoders/localizer/MirLocalizer.java
source/mircoders/localizer/MirProducerAssistantLocalizer.java [new file with mode: 0755]
source/mircoders/localizer/MirProducerLocalizer.java
source/mircoders/localizer/MirProducerToolLocalizer.java [deleted file]
source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java [new file with mode: 0755]
source/mircoders/localizer/basic/MirBasicLocalizer.java
source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java [new file with mode: 0755]
source/mircoders/localizer/basic/MirBasicProducerLocalizer.java
source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java [deleted file]
source/mircoders/producer/GeneratingProducerNode.java
source/mircoders/producer/NodedProducerFactory.java
source/mirlocal/bolivia.indymedia.org/BoliviaLocalizer.java
source/mirlocal/bolivia.indymedia.org/BoliviaProducerAssistantLocalizer.java [new file with mode: 0755]
source/mirlocal/bolivia.indymedia.org/BoliviaProducerLocalizer.java
source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java [deleted file]
source/mirlocal/euskalherria.indymedia.org/EHLocalizer.java
source/mirlocal/euskalherria.indymedia.org/EHProducerLocalizer.java
source/mirlocal/indymedia.nl/IndyNLLocalizer.java
source/mirlocal/indymedia.nl/IndyNLProducerAssistantLocalizer.java
source/mirlocal/indymedia.nl/IndyNLProducerLocalizer.java

index 9e3aa87..4abc774 100755 (executable)
@@ -2,16 +2,19 @@ package mir.entity.adapter;
 
 import java.util.*;
 import mir.entity.*;
+import mir.util.*;
 
 public class EntityAdapter implements Map {
   private Entity entity;
   private EntityAdapterDefinition definition;
   private Map calculatedFieldsCache;
+  private EntityAdapterModel model;
 
-  public EntityAdapter(Entity anEntity, EntityAdapterDefinition aDefinition) {
+  public EntityAdapter(Entity anEntity, EntityAdapterDefinition aDefinition, EntityAdapterModel aModel) {
     entity = anEntity;
     definition = aDefinition;
     calculatedFieldsCache = new HashMap();
+    model = aModel;
   }
 
   public boolean containsKey(Object aKey) {
@@ -40,6 +43,10 @@ public class EntityAdapter implements Map {
     return entity;
   }
 
+  public EntityAdapterModel getModel() {
+    return model;
+  }
+
   public Object get(Object aKey) {
     Object result;
 
@@ -99,4 +106,17 @@ public class EntityAdapter implements Map {
   public Set entrySet() {
     throw new UnsupportedOperationException("EntityAdapter.entrySet()");
   }
+
+  public Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) {
+    try {
+      return
+          new CachingRewindableIterator(
+            new EntityIteratorAdapter(
+                aWhereClause, anOrderByClause, -1, getModel(), aDefinition));
+    }
+    catch (Throwable t) {
+      throw new RuntimeException(t.getMessage());
+    }
+  }
+
 }
\ No newline at end of file
index 87fd448..0405a40 100755 (executable)
@@ -12,8 +12,8 @@ public class EntityAdapterDefinition {
     calculatedFields = new HashMap();
   }
 
-  public EntityAdapter makeEntityAdapter(Entity anEntity) {
-    return new EntityAdapter(anEntity, this);
+  public EntityAdapter makeEntityAdapter(Entity anEntity, EntityAdapterModel aModel) {
+    return new EntityAdapter(anEntity, this, aModel);
   }
 
   public CalculatedField getCalculatedField(String aFieldName) {
@@ -122,16 +122,4 @@ public class EntityAdapterDefinition {
       return result;
     }
   }
-
-  static protected Object getRelation(StorageObject aStorageObject, String aWhereClause, String anOrderByClause, EntityAdapterDefinition aDefinition) {
-    try {
-      return
-          new CachingRewindableIterator( new EntityIteratorAdapter(
-              new EntityBrowser( aStorageObject, aWhereClause, anOrderByClause, -1),
-              aDefinition));
-    }
-    catch (Throwable t) {
-      throw new RuntimeException(t.getMessage());
-    }
-  }
 }
diff --git a/source/mir/entity/adapter/EntityAdapterModel.java b/source/mir/entity/adapter/EntityAdapterModel.java
new file mode 100755 (executable)
index 0000000..e552799
--- /dev/null
@@ -0,0 +1,52 @@
+package mir.entity.adapter;\r
+\r
+import java.util.*;\r
+import mir.entity.*;\r
+import mir.storage.*;\r
+import mir.util.*;\r
+\r
+public class EntityAdapterModel {\r
+  private Map entityAdapterMappings;\r
+\r
+  public EntityAdapterModel() {\r
+    entityAdapterMappings = new HashMap();\r
+  }\r
+\r
+  public EntityAdapter makeEntityAdapter( String aName, Entity anEntity ) {\r
+    Mapping mapping = getMappingForName( aName );\r
+\r
+    if (mapping == null )\r
+      throw new RuntimeException( "Adapter definition with name '" + aName + "' not present in model" );\r
+\r
+    return mapping.getDefinition().makeEntityAdapter( anEntity, this );\r
+  }\r
+\r
+  public void addMapping( String aName, StorageObject aStorage, EntityAdapterDefinition aDefinition ) {\r
+    entityAdapterMappings.put( aName, new Mapping( aStorage, aDefinition ) );\r
+    }\r
+\r
+  public Mapping getMappingForName( String aName ) {\r
+    return (Mapping) entityAdapterMappings.get( aName );\r
+  }\r
+\r
+  public class Mapping {\r
+    private StorageObject storage;\r
+    private EntityAdapterDefinition definition;\r
+\r
+    public Mapping( StorageObject aStorage, EntityAdapterDefinition aDefinition ) {\r
+      storage = aStorage;\r
+      definition = aDefinition;\r
+    }\r
+\r
+    public StorageObject getStorage() {\r
+      return storage;\r
+    }\r
+\r
+    public EntityAdapterDefinition getDefinition() {\r
+      return definition;\r
+    }\r
+  }\r
+}\r
+\r
+\r
+                                                                                                   
\ No newline at end of file
index 202314d..6fbff1a 100755 (executable)
@@ -6,20 +6,22 @@ import mir.util.*;
 import mir.entity.*;
 
 public class EntityIteratorAdapter implements RewindableIterator {
-  private EntityAdapterDefinition definition;
+  private String definitionName;
   private RewindableIterator iterator;
+  private EntityAdapterModel model;
 
-  public EntityIteratorAdapter(RewindableIterator anIterator, EntityAdapterDefinition aDefinition) {
+  public EntityIteratorAdapter(RewindableIterator anIterator, EntityAdapterModel aModel, String aDefinitionName) {
+    model = aModel;
     iterator = anIterator;
-    definition = aDefinition;
+    definitionName = aDefinitionName;
   }
 
-  public EntityIteratorAdapter(StorageObject aStorage, String aWhereClause, String anOrderByClause, int aBatchSize, EntityAdapterDefinition aDefinition) throws StorageObjectException {
-    this(new EntityBrowser(aStorage, aWhereClause, anOrderByClause, aBatchSize), aDefinition);
+  public EntityIteratorAdapter(String aWhereClause, String anOrderByClause, int aBatchSize, EntityAdapterModel aModel, String aDefinitionName ) throws StorageObjectException {
+    this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aWhereClause, anOrderByClause, aBatchSize), aModel, aDefinitionName);
   }
 
-  public EntityIteratorAdapter(StorageObject aStorage, String aWhereClause, String anOrderByClause, int aBatchSize, EntityAdapterDefinition aDefinition, int aLimit, int aSkip) throws StorageObjectException {
-    this(new EntityBrowser(aStorage, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aDefinition);
+  public EntityIteratorAdapter(String aWhereClause, String anOrderByClause, int aBatchSize, EntityAdapterModel aModel, String aDefinitionName, int aLimit, int aSkip) throws StorageObjectException {
+    this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aModel, aDefinitionName);
   }
 
   public boolean hasNext() {
@@ -27,7 +29,7 @@ public class EntityIteratorAdapter implements RewindableIterator {
   }
 
   public Object next() {
-    return definition.makeEntityAdapter((Entity) iterator.next());
+    return model.makeEntityAdapter(definitionName, (Entity) iterator.next());
   }
 
   public void remove() {
index fdf66cc..4ef040f 100755 (executable)
@@ -216,21 +216,4 @@ public class FreemarkerGenerator implements Generator {
       position=0;
     }
        }
-
-/*     private static class DateAdapter implements TemplateHashModel {
-         Date date;
-
-         private DateAdapter(Date aDate) {
-           date = aDate;
-         }
-
-         public boolean isEmpty() {
-           return false;
-         }
-
-         public TemplateModel get(String aKey) throws TemplateModelException {
-           return makeAdapter(new SimpleDateFormat(aKey).format(date));
-         }
-       }
-*/
 }
index 19df0f1..5f3b2bf 100755 (executable)
@@ -12,8 +12,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
 
   private String batchInfoKey;
   private String batchDataKey;
-  private StorageObject storage;
-  private EntityAdapterDefinition definition;
+  private EntityAdapterModel model;
+  private String definition;
   private String whereClause;
   private String orderByClause;
   private int nrEntitiesToSkip;
@@ -25,15 +25,15 @@ public class EntityBatchingProducerNode implements ProducerNode {
   public EntityBatchingProducerNode(
         String aBatchDataKey,
         String aBatchInfoKey,
-        StorageObject aStorage,
-        EntityAdapterDefinition aDefinition,
+        EntityAdapterModel aModel,
+        String aDefinition,
         String aWhereClause,
         String anOrderByClause,
         int aNrEntitiesPerBatch,
         int aMinNrEntitiesInFirstBatch,
         int aNrEntitiesToSkip,
         ProducerNode aBatchSubNode) {
-    this(aBatchDataKey, aBatchInfoKey, aStorage, aDefinition, aWhereClause,
+    this(aBatchDataKey, aBatchInfoKey, aModel, aDefinition, aWhereClause,
         anOrderByClause, aNrEntitiesPerBatch, aMinNrEntitiesInFirstBatch, aNrEntitiesToSkip,
         aBatchSubNode, null);
   }
@@ -42,8 +42,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
   public EntityBatchingProducerNode(
         String aBatchDataKey,
         String aBatchInfoKey,
-        StorageObject aStorage,
-        EntityAdapterDefinition aDefinition,
+        EntityAdapterModel aModel,
+        String aDefinition,
         String aWhereClause,
         String anOrderByClause,
         int aNrEntitiesPerBatch,
@@ -59,7 +59,7 @@ public class EntityBatchingProducerNode implements ProducerNode {
 
     batchDataKey = aBatchDataKey;
     batchInfoKey = aBatchInfoKey;
-    storage = aStorage;
+    model = aModel;
     definition = aDefinition;
     whereClause = aWhereClause;
     orderByClause = anOrderByClause;
@@ -99,7 +99,7 @@ public class EntityBatchingProducerNode implements ProducerNode {
       batchesData = new Vector();
       batchLocations = new Vector();
 
-      nrEntities = storage.getSize(expandedWhereClause)-nrEntitiesToSkip;
+      nrEntities = model.getMappingForName(definition).getStorage().getSize(expandedWhereClause)-nrEntitiesToSkip;
       nrEntitiesInFirstBatch = nrEntities % nrEntitiesPerBatch;
       while (nrEntitiesInFirstBatch<minNrEntitiesInFirstBatch && nrEntities-nrEntitiesInFirstBatch>=nrEntitiesPerBatch)
         nrEntitiesInFirstBatch = nrEntitiesInFirstBatch + nrEntitiesPerBatch;
@@ -152,8 +152,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
           else
             batchData.put("next", null);
 
-          Iterator j = new EntityIteratorAdapter(storage, expandedWhereClause, expandedOrderByClause,
-                    location.nrEntities, definition, location.nrEntities, location.firstEntity);
+          Iterator j = new EntityIteratorAdapter(expandedWhereClause, expandedOrderByClause,
+                    location.nrEntities, model, definition, location.nrEntities, location.firstEntity);
           List entities = new Vector();
 
           while (j.hasNext())
index e40a58c..f3902e3 100755 (executable)
@@ -11,22 +11,29 @@ public class EntityEnumeratingProducerNode extends ProducerNodeDecorator {
   private Map verbs;
   private EntityEnumeratingProducerNodeVerb defaultVerb;
   private String key;
-  private EntityAdapterDefinition definition;
-  private StorageObject storage;
+  private EntityAdapterModel model;
+  private String definition;
+
+  public EntityEnumeratingProducerNode(
+                String aKey,
+                EntityAdapterModel aModel, String aDefinition,
+                ProducerNode aSubNode) {
 
-  public EntityEnumeratingProducerNode(String aKey, StorageObject aStorage, EntityAdapterDefinition aDefinition, ProducerNode aSubNode) {
     super(aSubNode);
 
     defaultVerb = null;
     verbs = new HashMap();
-    storage = aStorage;
+    model = aModel;
     definition = aDefinition;
     key = aKey;
   }
 
-  public EntityEnumeratingProducerNode(String aKey, StorageObject aStorage, EntityAdapterDefinition aDefinition,
-          String aDefaultWhereClause, String aDefaultOrderByClause, ProducerNode aSubNode) {
-    this(aKey, aStorage, aDefinition, aSubNode);
+  public EntityEnumeratingProducerNode(
+              String aKey,
+              EntityAdapterModel aModel, String aDefinition,
+              String aDefaultWhereClause, String aDefaultOrderByClause,
+              ProducerNode aSubNode) {
+    this(aKey, aModel, aDefinition, aSubNode);
 
     defaultVerb = new EntityEnumeratingProducerNodeVerb(aDefaultWhereClause, aDefaultOrderByClause);
   }
@@ -43,10 +50,10 @@ public class EntityEnumeratingProducerNode extends ProducerNodeDecorator {
 
     try {
       browser = new EntityIteratorAdapter(
-          storage,
           ParameterExpander.expandExpression( aValueMap, verb.whereClause ),
           ParameterExpander.expandExpression( aValueMap, verb.orderByClause ),
           -1,
+          model,
           definition );
 
       while (browser.hasNext()) {
index 39e3c1a..ed7fe37 100755 (executable)
@@ -12,17 +12,18 @@ public class EntityListProducerNode extends ProducerNodeDecorator {
   private String whereClause;
   private String orderByClause;
   private int batchSize;
-  private EntityAdapterDefinition definition;
-  private StorageObject storage;
+  private EntityAdapterModel model;
+  private String definition;
   private int limit;
   private int skip;
 
-  public EntityListProducerNode(String aKey, StorageObject aStorage,
-      EntityAdapterDefinition aDefinition, String aWhereClause, String anOrderByClause,
+  public EntityListProducerNode(String aKey,
+      EntityAdapterModel aModel, String aDefinition,
+      String aWhereClause, String anOrderByClause,
       int aLimit, int aSkip, ProducerNode aSubNode) {
     super(aSubNode);
 
-    storage = aStorage;
+    model = aModel;
     definition = aDefinition;
     key = aKey;
     whereClause = aWhereClause;
@@ -36,10 +37,10 @@ public class EntityListProducerNode extends ProducerNodeDecorator {
       aValueMap.put(key,
         new CachingRewindableIterator(
           new EntityIteratorAdapter(
-            storage,
             ParameterExpander.expandExpression( aValueMap, whereClause ),
             ParameterExpander.expandExpression( aValueMap, orderByClause ),
             20,
+            model,
             definition,
             limit,
             skip )
diff --git a/source/mircoders/entity/adapter/AudioAdapterDefinition.java b/source/mircoders/entity/adapter/AudioAdapterDefinition.java
deleted file mode 100755 (executable)
index f2cb7f9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class AudioAdapterDefinition extends EntityAdapterDefinition {
-  private static AudioAdapterDefinition instance;
-
-  public static AudioAdapterDefinition getInstance() {
-    synchronized (AudioAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new AudioAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public AudioAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/BreakingAdapterDefinition.java b/source/mircoders/entity/adapter/BreakingAdapterDefinition.java
deleted file mode 100755 (executable)
index 8a843b2..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class BreakingAdapterDefinition extends EntityAdapterDefinition {
-  private static BreakingAdapterDefinition instance;
-
-  public static BreakingAdapterDefinition getInstance() {
-    synchronized (BreakingAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new BreakingAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public BreakingAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/CommentAdapterDefinition.java b/source/mircoders/entity/adapter/CommentAdapterDefinition.java
deleted file mode 100755 (executable)
index 8720176..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class CommentAdapterDefinition extends EntityAdapterDefinition {
-  private static CommentAdapterDefinition instance;
-
-  public static CommentAdapterDefinition getInstance() {
-    synchronized (CommentAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new CommentAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public CommentAdapterDefinition() {
-    super();
-
-    addDBDateField("creationdate", "webdb_create");
-    addCalculatedField("to_content", new CommentToContentField());
-  }
-
-  public EntityAdapter makeEntityAdapter(Entity anEntity) {
-    return new EntityAdapter(anEntity, this);
-  }
-
-  private class CommentToContentField implements CalculatedField {
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      try {
-        return getRelation(
-                    DatabaseContent.getInstance(),
-                    "id="+anEntityAdapter.get("to_media"),
-                    "id",
-                    ContentAdapterDefinition.getInstance());
-      }
-      catch (Throwable t) {
-        throw new RuntimeException(t.getMessage());
-      }
-    }
-  }
-
-}
-
-
-//  String mirconf_extLinkName  = MirConfig.getProp("Producer.ExtLinkName");
-//  String mirconf_intLinkName  = MirConfig.getProp("Producer.IntLinkName");
-//  String mirconf_mailLinkName = MirConfig.getProp("Producer.MailLinkName");
-//  String mirconf_imageRoot    = MirConfig.getProp("Producer.ImageRoot");
-
-
-//      if (field.equals("date_formatted"))
-//      {
-//               if (hasValueForField("date"))
-//             returnField = StringUtil.webdbDate2readableDate(getValue("date"));
-//             }
-//      else if (field.equals("description_parsed"))
-//        returnField = getDescriptionParsed();
-//      else if (field.equals("description_sentence"))
-//        returnField = getDescriptionSentence();
-//      else if (field.equals("content_data_parsed"))
-//        returnField = getContentDataParsed();
-
-
-//      if (key.equals("to_comments")) {
-//        try {
-//          _entCache.put(key, getComments());
-//          return (TemplateModel)_entCache.get(key);
-//        } catch (Exception ex) {
-//          theLog.printWarning("-- getComments: could not fetch data " + ex.toString());
-//          throw new TemplateModelException(ex.toString());
-//        }
-//      }
-//      if (key.equals("to_media_images")) {
-//        try {
-//          _entCache.put(key, getImagesForContent());
-//          return (TemplateModel)_entCache.get(key);
-//        }
-//        catch (Exception ex) {
-//          theLog.printWarning("-- getImagesForContent: could not fetch data " + ex.toString());
-//          throw new TemplateModelException(ex.toString());
-//        }
-//      }
-//      if (key.equals("to_media_audio")) {
-//        try {
-////          _entCache.put(key, getAudioForContent());
-//          return (TemplateModel)_entCache.get(key);
-//        }
-//        catch (Exception ex) {
-//          theLog.printWarning("-- getAudioForContent: could not fetch data " + ex.toString());
-//          throw new TemplateModelException(ex.toString());
-//        }
-//      }
-//      if (key.equals("to_media_video")) {
-//        try {
-//          _entCache.put(key, getVideoForContent());
-/*          return (TemplateModel)_entCache.get(key);
-        }
-        catch (Exception ex) {
-          theLog.printWarning("-- getVideoForContent: could not fetch data " + ex.toString());
-          throw new TemplateModelException(ex.toString());
-        }
-      }
-      if (key.equals("to_media_other")) {
-        try {
-          _entCache.put(key, getOtherMediaForContent());
-          return (TemplateModel)_entCache.get(key);
-        }
-        catch (Exception ex) {
-          theLog.printWarning("-- getOtherMediaForContent: could not fetch data " + ex.toString());
-          throw new TemplateModelException(ex.toString());
-        }
-      }
-      else if (key.equals("to_media_icon")) {
-        try {
-          _entCache.put(key, getUploadedMediaForNewswire());
-          return (TemplateModel)_entCache.get(key);
-        }
-        catch (Exception ex) {
-          theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
-          throw new TemplateModelException(ex.toString());
-        }
-      }
-      else if (key.equals("to_topics")) {
-        try {
-          _entCache.put(key,
-                        DatabaseContentToTopics.getInstance().getTopics(this));
-          return (TemplateModel)_entCache.get(key);
-        }
-        catch (Exception ex) {
-          theLog.printWarning("-- getTopics: could not fetch data " + ex.toString());
-          throw new TemplateModelException(ex.toString());
-        }
-      }
-*/
-
-
-
-
-/*
-  private String getContentDataParsed() {
-    String returnField = getValue("content_data");
-    if (returnField!=null & returnField.length()>0 ) {
-      returnField=StringUtil.deleteForbiddenTags(returnField);
-      //create http-links and email-links
-      if (getValue("is_html").equals("0")) {
-        returnField = StringUtil.createHTML(returnField,mirconf_imageRoot,
-                                            mirconf_mailLinkName,mirconf_extLinkName,
-                                            mirconf_intLinkName);
-      }
-      returnField = StringUtil.decodeHTMLinTags(returnField);
-    }
-    return returnField;
-  }
-
-  private String getDescriptionSentence() {
-    String returnField = getValue("description");
-    if (returnField != null && returnField.length()>0) {
-       returnField = StringUtil.removeHTMLTags(returnField);
-       int endOfFirstSentence=StringUtil.findEndOfSentence(returnField,0);
-       if (endOfFirstSentence > 0){
-        returnField = returnField.substring(0,endOfFirstSentence);
-       }
-    }
-    return returnField;
-  }
-
-  private String getDescriptionParsed() {
-    String returnField = getValue("description");
-    if (returnField != null && returnField.length()>0) {
-      returnField = StringUtil.deleteForbiddenTags(returnField);
-      if (getValue("is_html").equals("0")) {
-        returnField = StringUtil.createHTML(returnField,mirconf_imageRoot,
-                                            mirconf_mailLinkName,mirconf_extLinkName,
-                                            mirconf_intLinkName);
-      }
-      returnField = StringUtil.decodeHTMLinTags(returnField);
-    }
-    return returnField;
-  }
-
-
-       private EntityList getComments() throws StorageObjectException {
-               return ((DatabaseContent)theStorageObject).getComments(this);
-       }
-
-  // @todo this needs to optimized. expensive SQL
-  private SimpleHash getUploadedMediaForNewswire()
-    throws StorageObjectException, TemplateModelException
-  {
-    // fetching/setting the images
-    // return to_media_icons
-    String        tinyIcon = null, iconAlt = null;
-    MirMedia      mediaHandler = null;
-    EntityUploadedMedia uploadedMedia;
-    Entity        mediaType;
-    SimpleHash    returnHash = new SimpleHash();
-
-    EntityList upMediaEntityList =
-                    DatabaseContentToMedia.getInstance().getUploadedMedia(this);
-    if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
-
-      for (int n=0; n < upMediaEntityList.size();n++) {
-        uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
-        mediaType = uploadedMedia.getMediaType();
-        try {
-          mediaHandler = MediaHelper.getHandler( mediaType );
-        } catch (MirMediaException ex) {
-          throw new TemplateModelException(ex.toString());
-        }
-        //the "best" media type to show
-        if (mediaHandler.isVideo()) {
-          tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
-          iconAlt = "Video";
-          break;
-        } else if (mediaHandler.isAudio()) {
-          tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
-          iconAlt = "Audio";
-        } else if (tinyIcon == null && !mediaHandler.isImage()) {
-          tinyIcon = mediaHandler.getTinyIcon();
-          iconAlt = mediaHandler.getIconAlt();
-        }
-
-      }
-      //it only has image(s)
-      if (tinyIcon == null) {
-        tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
-        iconAlt = "Image";
-      }
-    // uploadedMedia Entity list is empty.
-    // we only have text
-    } else {
-      tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
-      iconAlt = "Text";
-    }
-    returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon);
-    returnHash.put("icon_alt", iconAlt);
-    return returnHash;
-  }
-
-  private boolean hasMedia() throws StorageObjectException
-  {
-    if (_hasMedia == null) {
-      _hasMedia =
-        new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this));
-    }
-    return _hasMedia.booleanValue();
-  }
-
-  //######## @todo all of the following getBlahForContent should have
-  // and optimized version where LIMIT=1 sql for list view.
-  private EntityList getImagesForContent()
-    throws StorageObjectException, TemplateModelException
-  {
-    if (hasMedia())
-      return DatabaseContentToMedia.getInstance().getImages(this);
-    else
-      return null;
-  }
-
-  private EntityList getAudioForContent()
-    throws StorageObjectException, TemplateModelException
-  {
-    if (hasMedia())
-      return DatabaseContentToMedia.getInstance().getAudio(this) ;
-    else
-      return null;
-  }
-
-  private EntityList getVideoForContent()
-    throws StorageObjectException, TemplateModelException
-  {
-    if (hasMedia())
-      return DatabaseContentToMedia.getInstance().getVideo(this) ;
-    else
-      return null;
-  }
-
-  private EntityList getOtherMediaForContent()
-    throws StorageObjectException, TemplateModelException
-  {
-    if (hasMedia())
-      return DatabaseContentToMedia.getInstance().getOther(this);
-    else
-      return null;
-  }
-
-}
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-//      if (field.equals("date_formatted"))
-//      {
-//               if (hasValueForField("webdb_create"))
-//               returnField = StringUtil.dateToReadableDate(getValue("webdb_create"));
-
-
-//      else if (field.equals("description_parsed")) {
-//        /** @todo the config stuff should be moved to StringUtil */
-//        String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
-//        String intLinkName = MirConfig.getProp("Producer.IntLinkName");
-//        String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
-//        String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-//        returnField = StringUtil.createHTML(getValue("description"),imageRoot,mailLinkName,extLinkName,intLinkName);
diff --git a/source/mircoders/entity/adapter/ContentAdapterDefinition.java b/source/mircoders/entity/adapter/ContentAdapterDefinition.java
deleted file mode 100755 (executable)
index 7460aed..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-package mircoders.entity.adapter;
-
-import java.util.*;
-import mir.storage.*;
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mir.media.*;
-import mir.util.*;
-import mircoders.storage.*;
-import mircoders.global.*;
-import mircoders.entity.*;
-import mircoders.localizer.*;
-
-public class ContentAdapterDefinition extends EntityAdapterDefinition {
-  private static ContentAdapterDefinition instance;
-
-  public static ContentAdapterDefinition getInstance() {
-    synchronized (ContentAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new ContentAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public ContentAdapterDefinition() {
-    super();
-
-    addDBDateField("creationdate", "webdb_create");
-    addDBDateField("changedate", "webdb_lastchange");
-    addMirDateField("date", "date");
-    addCalculatedField("to_topics", new ContentToTopicsField());
-    addCalculatedField("to_comments", new ContentToCommentsField());
-    try {
-      addCalculatedField("to_media_images", new ContentToMediaField(
-          DatabaseImages.getInstance(), ImagesAdapterDefinition.getInstance()));
-      addCalculatedField("to_uploaded_media", new ContentToMediaField(
-          DatabaseUploadedMedia.getInstance(), UploadedMediaAdapterDefinition.getInstance()));
-      addCalculatedField("to_media_audio", new ContentToMediaField(
-          DatabaseAudio.getInstance(), AudioAdapterDefinition.getInstance()));
-      addCalculatedField("to_media_video", new ContentToMediaField(
-          DatabaseVideo.getInstance(), VideoAdapterDefinition.getInstance()));
-      addCalculatedField("to_media_other", new ContentToMediaField(
-          DatabaseOther.getInstance(), OtherAdapterDefinition.getInstance()));
-      addCalculatedField("to_media_icon", new ContentToIconField());
-    }
-    catch (Throwable t) {
-      System.out.println(t.getMessage());
-      t.printStackTrace(System.out);
-    }
-
-    addCalculatedField("description_parsed", new FilteredField("description"));
-    addCalculatedField("content_data_parsed", new FilteredField("content_data"));
-  }
-
-  private class FilteredField implements CalculatedField {
-    String fieldName;
-
-    public FilteredField(String aFieldName) {
-      fieldName = aFieldName;
-    }
-
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      if (anEntityAdapter.get("is_html").equals("0")) {
-        return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
-      }
-      else {
-        return anEntityAdapter.get(fieldName);
-      }
-    }
-  }
-
-  private class ContentToCommentsField implements CalculatedField {
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      try {
-        return getRelation(
-                    DatabaseComment.getInstance(),
-                    "to_media="+anEntityAdapter.get("id"),
-                    "webdb_create",
-                    CommentAdapterDefinition.getInstance());
-      }
-      catch (Throwable t) {
-        throw new RuntimeException(t.getMessage());
-      }
-    }
-  }
-
-  private class ContentToTopicsField implements CalculatedField {
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      try {
-        return getRelation(
-                    DatabaseTopics.getInstance(),
-                    "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
-                    "title",
-                    TopicsAdapterDefinition.getInstance());
-      }
-      catch (Throwable t) {
-        throw new RuntimeException(t.getMessage());
-      }
-    }
-  }
-
-  private class ContentToMediaField implements CalculatedField {
-    StorageObject storage;
-    EntityAdapterDefinition definition;
-
-    public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
-      definition = aDefinition;
-      storage = aStorage;
-    }
-
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      try {
-        return getRelation(
-                    storage,
-                    "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
-                    "title",
-                    definition);
-      }
-      catch (Throwable t) {
-        throw new RuntimeException(t.getMessage());
-      }
-    }
-  }
-
-  private class ContentToIconField implements CalculatedField {
-    public Object getValue(EntityAdapter anEntityAdapter) {
-      EntityAdapter media;
-      Entity mediaType;
-      RewindableIterator iterator;
-      Map result;
-      MirMedia mediaHandler;
-      String tinyIcon;
-      String iconAlt;
-
-      try {
-        iterator = (RewindableIterator) (anEntityAdapter.get("to_uploaded_media"));
-        iterator.rewind();
-
-        tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
-        iconAlt = "Text";
-
-        if (iterator.hasNext()) {
-          media = (EntityAdapter) iterator.next();
-
-          mediaType = ((EntityUploadedMedia) (media.getEntity())).getMediaType();
-          mediaHandler = MediaHelper.getHandler( mediaType );
-
-          if (mediaHandler.isVideo()) {
-            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyVideo");
-            iconAlt = "Video";
-          }
-          else if (mediaHandler.isAudio()) {
-            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyAudio");
-            iconAlt = "Audio";
-          }
-          else if (mediaHandler.isImage()) {
-            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyImage");
-            iconAlt = "Image";
-          }
-          else {
-            tinyIcon = mediaHandler.getTinyIcon();
-            iconAlt = mediaHandler.getIconAlt();
-          }
-
-        }
-      }
-      catch (Throwable t) {
-        System.out.println("ContentToIconField: exception: " +t.getMessage());
-        t.printStackTrace(System.out);
-        throw new RuntimeException(t.getMessage());
-      }
-
-      result = new HashMap();
-      result.put("tiny_icon", tinyIcon);
-      result.put("icon_alt", iconAlt);
-
-      return result;
-    }
-  }
-}
-
-
diff --git a/source/mircoders/entity/adapter/FeatureAdapterDefinition.java b/source/mircoders/entity/adapter/FeatureAdapterDefinition.java
deleted file mode 100755 (executable)
index 0e98f58..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class FeatureAdapterDefinition extends EntityAdapterDefinition {
-  private static FeatureAdapterDefinition instance;
-
-  public static FeatureAdapterDefinition getInstance() {
-    synchronized (FeatureAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new FeatureAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public FeatureAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/ImagesAdapterDefinition.java b/source/mircoders/entity/adapter/ImagesAdapterDefinition.java
deleted file mode 100755 (executable)
index c8a4c9c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class ImagesAdapterDefinition extends EntityAdapterDefinition {
-  private static ImagesAdapterDefinition instance;
-
-  public static ImagesAdapterDefinition getInstance() {
-    synchronized (ImagesAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new ImagesAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public ImagesAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/LanguageAdapterDefinition.java b/source/mircoders/entity/adapter/LanguageAdapterDefinition.java
deleted file mode 100755 (executable)
index 7a49217..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class LanguageAdapterDefinition extends EntityAdapterDefinition {
-  private static LanguageAdapterDefinition instance;
-
-  public static LanguageAdapterDefinition getInstance() {
-    synchronized (LanguageAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new LanguageAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public LanguageAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java b/source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java
deleted file mode 100755 (executable)
index 9c66c62..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class LinksImcsAdapterDefinition extends EntityAdapterDefinition {
-  private static LinksImcsAdapterDefinition instance;
-
-  public static LinksImcsAdapterDefinition getInstance() {
-    synchronized (LinksImcsAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new LinksImcsAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public LinksImcsAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/MediaAdapterDefinition.java b/source/mircoders/entity/adapter/MediaAdapterDefinition.java
deleted file mode 100755 (executable)
index 70d078e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class MediaAdapterDefinition extends EntityAdapterDefinition {
-  private static MediaAdapterDefinition instance;
-
-  public static MediaAdapterDefinition getInstance() {
-    synchronized (MediaAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new MediaAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public MediaAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/OtherAdapterDefinition.java b/source/mircoders/entity/adapter/OtherAdapterDefinition.java
deleted file mode 100755 (executable)
index 33ab0ec..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class OtherAdapterDefinition extends EntityAdapterDefinition {
-  private static OtherAdapterDefinition instance;
-
-  public static OtherAdapterDefinition getInstance() {
-    synchronized (OtherAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new OtherAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public OtherAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/TopicsAdapterDefinition.java b/source/mircoders/entity/adapter/TopicsAdapterDefinition.java
deleted file mode 100755 (executable)
index 7114700..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class TopicsAdapterDefinition extends EntityAdapterDefinition {
-  private static TopicsAdapterDefinition instance;
-
-  public static TopicsAdapterDefinition getInstance() {
-    synchronized (TopicsAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new TopicsAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public TopicsAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java b/source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java
deleted file mode 100755 (executable)
index 4a2d3a1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class UploadedMediaAdapterDefinition extends EntityAdapterDefinition {
-  private static UploadedMediaAdapterDefinition instance;
-
-  public static UploadedMediaAdapterDefinition getInstance() {
-    synchronized (UploadedMediaAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new UploadedMediaAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public UploadedMediaAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/UsersAdapterDefinition.java b/source/mircoders/entity/adapter/UsersAdapterDefinition.java
deleted file mode 100755 (executable)
index b54ca73..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class UsersAdapterDefinition extends EntityAdapterDefinition {
-  private static UsersAdapterDefinition instance;
-
-  public static UsersAdapterDefinition getInstance() {
-    synchronized (UsersAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new UsersAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public UsersAdapterDefinition() {
-    super();
-  }
-}
diff --git a/source/mircoders/entity/adapter/VideoAdapterDefinition.java b/source/mircoders/entity/adapter/VideoAdapterDefinition.java
deleted file mode 100755 (executable)
index 1435b38..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package mircoders.entity.adapter;
-
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mircoders.storage.*;
-
-public class VideoAdapterDefinition extends EntityAdapterDefinition {
-  private static VideoAdapterDefinition instance;
-
-  public static VideoAdapterDefinition getInstance() {
-    synchronized (VideoAdapterDefinition.class) {
-      if (instance == null) {
-        instance = new VideoAdapterDefinition();
-      }
-      return instance;
-    }
-  }
-
-  public VideoAdapterDefinition() {
-    super();
-  }
-}
index 52e9a2f..19f9496 100755 (executable)
@@ -8,13 +8,13 @@ import multex.Exc;
 import multex.Failure;
 
 public class ProducerEngine {
-  private Map producers;
+//  private Map producers;
   private JobQueue producerJobQueue;
   private Thread queueThread;
   private PrintWriter log;
 
   protected ProducerEngine() {
-    producers = MirGlobal.localizer().producers().factories();
+//    producers = MirGlobal.localizer().producers().factories();
     producerJobQueue = new JobQueue();
     try {
       RandomAccessFile raFile = (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw"));
@@ -66,12 +66,9 @@ public class ProducerEngine {
 
                  startTime = System.currentTimeMillis();
 
-      aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")<br>");
+      aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")");
 
-      if (producers == null)
-        aLogger.println("??<br>");
-
-      ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
+      ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(aProducerFactory);
 
       if (factory == null )
         throw new Exception("No producer factory '"+aProducerFactory+"' present.");
@@ -114,7 +111,7 @@ public class ProducerEngine {
       log.println("Producing job: "+factoryName+"."+verb);
 
       try {
-        factory = (ProducerFactory) producers.get(factoryName);
+        factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get( factoryName );
 
         if (factory!=null) {
           synchronized(factory) {
index 8b16b05..ca7542d 100755 (executable)
@@ -5,7 +5,8 @@ public class MirCachingLocalizerDecorator implements MirLocalizer {
   private MirProducerLocalizer producerLocalizer;
   private MirGeneratorLocalizer generatorLocalizer;
   private MirOpenPostingLocalizer openPostingsLocalizer;
-  private MirProducerToolLocalizer producerToolLocalizer;
+  private MirProducerAssistantLocalizer producerAssistantLocalizer;
+  private MirDataModelLocalizer dataModelLocalizer;
 
   public MirCachingLocalizerDecorator(MirLocalizer aLocalizer) {
     localizer = aLocalizer;
@@ -35,12 +36,20 @@ public class MirCachingLocalizerDecorator implements MirLocalizer {
     return openPostingsLocalizer;
   }
 
-  public MirProducerToolLocalizer producerTool() {
-    if (producerToolLocalizer==null) {
-      producerToolLocalizer = localizer.producerTool();
+  public MirProducerAssistantLocalizer producerAssistant() {
+    if (producerAssistantLocalizer==null) {
+      producerAssistantLocalizer = localizer.producerAssistant();
     }
 
-    return producerToolLocalizer;
+    return producerAssistantLocalizer;
+  }
+
+  public MirDataModelLocalizer dataModel() {
+    if (dataModelLocalizer==null) {
+      dataModelLocalizer = localizer.dataModel();
+    }
+
+    return dataModelLocalizer;
   }
 
 }
\ No newline at end of file
diff --git a/source/mircoders/localizer/MirDataModelLocalizer.java b/source/mircoders/localizer/MirDataModelLocalizer.java
new file mode 100755 (executable)
index 0000000..4b8c8a1
--- /dev/null
@@ -0,0 +1,7 @@
+package mircoders.localizer;\r
+\r
+import mir.entity.adapter.*;\r
+\r
+public interface MirDataModelLocalizer {\r
+  public EntityAdapterModel adapterModel() throws MirLocalizerException, MirLocalizerFailure;\r
+}
\ No newline at end of file
index b6852bb..ea2a7ca 100755 (executable)
@@ -3,5 +3,5 @@ package mircoders.localizer;
 import mir.generator.*;
 
 public interface MirGeneratorLocalizer {
-  public Generator makeGenerator(String anIdentifier) throws MirLocalizerException;
+  public Generator makeGenerator(String anIdentifier) throws MirLocalizerException, MirLocalizerFailure;
 }
\ No newline at end of file
index 8e935b4..014d7f2 100755 (executable)
@@ -3,6 +3,7 @@ package mircoders.localizer;
 public interface MirLocalizer {
   public MirProducerLocalizer producers();
   public MirOpenPostingLocalizer openPostings();
-  public MirProducerToolLocalizer producerTool();
+  public MirProducerAssistantLocalizer producerAssistant();
   public MirGeneratorLocalizer generators();
+  public MirDataModelLocalizer dataModel();
 }
\ No newline at end of file
diff --git a/source/mircoders/localizer/MirProducerAssistantLocalizer.java b/source/mircoders/localizer/MirProducerAssistantLocalizer.java
new file mode 100755 (executable)
index 0000000..d7af9e0
--- /dev/null
@@ -0,0 +1,11 @@
+package mircoders.localizer;
+
+import java.util.*;
+import java.io.*;
+
+public interface MirProducerAssistantLocalizer {
+  public void initializeGenerationValueSet(Map aValueSet) throws MirLocalizerException, MirLocalizerFailure;
+  public PrintWriter openWriter(String anIdentifier) throws MirLocalizerException, MirLocalizerFailure;
+  public void closeWriter(PrintWriter aWriter) throws MirLocalizerException, MirLocalizerFailure;
+  public String filterText(String aText) throws MirLocalizerException, MirLocalizerFailure;
+}
index f6d5422..44abd88 100755 (executable)
@@ -3,5 +3,5 @@ package mircoders.localizer;
 import java.util.*;
 
 public interface MirProducerLocalizer {
-  public Map factories();
+  public Map factories() throws MirLocalizerException, MirLocalizerFailure;
 }
diff --git a/source/mircoders/localizer/MirProducerToolLocalizer.java b/source/mircoders/localizer/MirProducerToolLocalizer.java
deleted file mode 100755 (executable)
index 6b2af6c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package mircoders.localizer;
-
-import java.util.*;
-import java.io.*;
-
-public interface MirProducerToolLocalizer {
-  public void initializeGenerationValueSet(Map aValueSet);
-  public PrintWriter openWriter(String anIdentifier) throws MirLocalizerFailure;
-  public void closeWriter(PrintWriter aWriter);
-  public String filterText(String aText);
-}
diff --git a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java
new file mode 100755 (executable)
index 0000000..0e6d60e
--- /dev/null
@@ -0,0 +1,236 @@
+package mircoders.localizer.basic;\r
+\r
+import java.util.*;\r
+import mir.entity.*;\r
+import mir.entity.adapter.*;\r
+import mir.media.*;\r
+import mir.misc.*;\r
+import mir.util.*;\r
+import mircoders.storage.*;\r
+import mircoders.global.*;\r
+import mircoders.entity.*;\r
+import mircoders.localizer.*;\r
+\r
+public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {\r
+  private EntityAdapterModel model;\r
+\r
+  public MirBasicDataModelLocalizer() {\r
+  }\r
+\r
+  public EntityAdapterModel adapterModel() throws MirLocalizerFailure {\r
+    if (model==null)\r
+      model = buildModel();\r
+\r
+    return model;\r
+  };\r
+\r
+  protected void constructContentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {\r
+    try {\r
+      anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");\r
+      anEntityAdapterDefinition.addDBDateField("changedate", "webdb_lastchange");\r
+      anEntityAdapterDefinition.addMirDateField("date", "date");\r
+      anEntityAdapterDefinition.addCalculatedField("to_topics", new ContentToTopicsField());\r
+      anEntityAdapterDefinition.addCalculatedField("to_comments", new ContentToCommentsField());\r
+\r
+      anEntityAdapterDefinition.addCalculatedField("to_media_images",  new ContentToMediaField( "image" ));\r
+      anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new ContentToMediaField( "uploadedMedia" ));\r
+      anEntityAdapterDefinition.addCalculatedField("to_media_audio", new ContentToMediaField( "audio" ));\r
+      anEntityAdapterDefinition.addCalculatedField("to_media_video", new ContentToMediaField( "video" ));\r
+      anEntityAdapterDefinition.addCalculatedField("to_media_other", new ContentToMediaField( "otherMedia" ));\r
+      anEntityAdapterDefinition.addCalculatedField("to_media_icon", new ContentToIconField());\r
+\r
+      anEntityAdapterDefinition.addCalculatedField("description_parsed", new FilteredField("description"));\r
+      anEntityAdapterDefinition.addCalculatedField("content_data_parsed", new FilteredField("content_data"));\r
+    }\r
+    catch (Throwable t) {\r
+      throw new MirLocalizerFailure(t.getMessage(), t);\r
+    }\r
+  }\r
+\r
+  protected void constructCommentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {\r
+    try {\r
+      anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");\r
+      anEntityAdapterDefinition.addCalculatedField("to_content", new CommentToContentField());\r
+    }\r
+    catch (Throwable t) {\r
+      throw new MirLocalizerFailure(t.getMessage(), t);\r
+    }\r
+  }\r
+\r
+  protected EntityAdapterModel buildModel() throws MirLocalizerFailure {\r
+    EntityAdapterModel result = new EntityAdapterModel();\r
+\r
+    try {\r
+      EntityAdapterDefinition definition;\r
+\r
+      definition = new EntityAdapterDefinition();\r
+      constructContentAdapterDefinition( definition );\r
+      result.addMapping( "content", DatabaseContent.getInstance(), definition);\r
+\r
+      definition = new EntityAdapterDefinition();\r
+      constructCommentAdapterDefinition( definition );\r
+      result.addMapping( "comment", DatabaseComment.getInstance(), definition);\r
+\r
+      result.addMapping( "articleType", DatabaseArticleType.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "breakingNews", DatabaseBreaking.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "feature", DatabaseFeature.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "imageType", DatabaseImageType.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "language", DatabaseLanguage.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "mediaFolder", DatabaseMediafolder.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "mediaType", DatabaseMediaType.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "internalMessage", DatabaseMessages.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "topic", DatabaseTopics.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "user", DatabaseUsers.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "media", DatabaseMedia.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "uploadedMedia", DatabaseUploadedMedia.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "image", DatabaseImages.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "audio", DatabaseAudio.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "video", DatabaseVideo.getInstance(), new EntityAdapterDefinition());\r
+      result.addMapping( "otherMedia", DatabaseOther.getInstance(), new EntityAdapterDefinition());\r
+    }\r
+    catch (Throwable t) {\r
+      throw new MirLocalizerFailure(t.getMessage(), t);\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  protected class CommentToContentField implements EntityAdapterDefinition.CalculatedField {\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return anEntityAdapter.getRelation(\r
+                    "id="+anEntityAdapter.get("to_media"),\r
+                    "id",\r
+                    "content" );\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
+  }\r
+  protected class FilteredField implements EntityAdapterDefinition.CalculatedField {\r
+    String fieldName;\r
+\r
+    public FilteredField(String aFieldName) {\r
+      fieldName = aFieldName;\r
+    }\r
+\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        if (anEntityAdapter.get("is_html").equals("0")) {\r
+          return MirGlobal.localizer().producerAssistant().filterText((String) anEntityAdapter.get(fieldName));\r
+        }\r
+        else {\r
+          return anEntityAdapter.get(fieldName);\r
+        }\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
+  }\r
+\r
+  protected class ContentToCommentsField implements EntityAdapterDefinition.CalculatedField {\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return anEntityAdapter.getRelation(\r
+                    "to_media="+anEntityAdapter.get("id"),\r
+                    "webdb_create",\r
+                    "comment" );\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
+  }\r
+\r
+  protected class ContentToTopicsField implements EntityAdapterDefinition.CalculatedField {\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return anEntityAdapter.getRelation(\r
+                    "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",\r
+                    "title",\r
+                    "topic" );\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
+  }\r
+\r
+  protected class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {\r
+    String definition;\r
+\r
+    public ContentToMediaField(String aDefinition) {\r
+      definition = aDefinition;\r
+    }\r
+\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return anEntityAdapter.getRelation(\r
+          "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",\r
+          "title",\r
+          definition);\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
+  }\r
+\r
+  protected class ContentToIconField implements EntityAdapterDefinition.CalculatedField {\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      EntityAdapter media;\r
+      Entity mediaType;\r
+      RewindableIterator iterator;\r
+      Map result;\r
+      MirMedia mediaHandler;\r
+      String tinyIcon;\r
+      String iconAlt;\r
+\r
+      try {\r
+        iterator = (RewindableIterator) (anEntityAdapter.get("to_uploaded_media"));\r
+        iterator.rewind();\r
+\r
+        tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");\r
+        iconAlt = "Text";\r
+\r
+        if (iterator.hasNext()) {\r
+          media = (EntityAdapter) iterator.next();\r
+\r
+          mediaType = ((EntityUploadedMedia) (media.getEntity())).getMediaType();\r
+          mediaHandler = MediaHelper.getHandler( mediaType );\r
+\r
+          if (mediaHandler.isVideo()) {\r
+            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyVideo");\r
+            iconAlt = "Video";\r
+          }\r
+          else if (mediaHandler.isAudio()) {\r
+            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyAudio");\r
+            iconAlt = "Audio";\r
+          }\r
+          else if (mediaHandler.isImage()) {\r
+            tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyImage");\r
+            iconAlt = "Image";\r
+          }\r
+          else {\r
+            tinyIcon = mediaHandler.getTinyIcon();\r
+            iconAlt = mediaHandler.getIconAlt();\r
+          }\r
+\r
+        }\r
+      }\r
+      catch (Throwable t) {\r
+        System.out.println("ContentToIconField: exception: " +t.getMessage());\r
+        t.printStackTrace(System.out);\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+\r
+      result = new HashMap();\r
+      result.put("tiny_icon", tinyIcon);\r
+      result.put("icon_alt", iconAlt);\r
+\r
+      return result;\r
+    }\r
+  }\r
+}
\ No newline at end of file
index a0a15f4..729e8ef 100755 (executable)
@@ -19,8 +19,12 @@ public class MirBasicLocalizer implements MirLocalizer {
     return new MirBasicOpenPostingLocalizer();
   }
 
-  public MirProducerToolLocalizer producerTool() {
-    return new MirBasicProducerToolLocalizer();
+  public MirProducerAssistantLocalizer producerAssistant() {
+    return new MirBasicProducerAssistantLocalizer();
   }
 
+  public MirDataModelLocalizer dataModel() {
+    return new MirBasicDataModelLocalizer();
+  };
+
 }
\ No newline at end of file
diff --git a/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java
new file mode 100755 (executable)
index 0000000..7c8e8f7
--- /dev/null
@@ -0,0 +1,107 @@
+package mircoders.localizer.basic;
+
+import java.util.*;
+import java.io.*;
+import freemarker.template.utility.*;
+import mir.misc.*;
+import mir.entity.*;
+import mircoders.module.*;
+import mircoders.storage.*;
+import mircoders.localizer.*;
+import mircoders.global.*;
+
+public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantLocalizer {
+  protected static Logfile logger = Logfile.getInstance( MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.Logfile"));
+
+  public void initializeGenerationValueSet(Map aValueSet) {
+    // ML: these config settings will be included more beautifully as soon as the new config system is in place
+
+    Map configMap = new HashMap();
+    Map utilityMap = new HashMap();
+
+               configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));
+               configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));
+    configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));
+               configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));
+               configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));
+               configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));
+               configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));
+               configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));
+               configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));
+               configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));
+               configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));
+               configMap.put("defEncoding", MirGlobal.getConfigProperty("Mir.DefaultEncoding"));
+
+               utilityMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
+
+    aValueSet.put("config", configMap);
+    aValueSet.put("utility", utilityMap);
+
+    EntityList topicList=null;
+    EntityList entityList=null;
+    EntityList parentList=null;
+    EntityList languageList=null;
+
+    try {
+      ModuleLinksImcs linksImcsModule = new ModuleLinksImcs(DatabaseLinksImcs.getInstance());
+      ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance());
+      ModuleLanguage languageModule = new ModuleLanguage(DatabaseLanguage.getInstance());
+
+      topicList = topicsModule.getTopicsList();
+      entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1);
+      parentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1);
+      languageList = languageModule.getByWhereClause("", "id", -1);
+    }
+    catch (Throwable t) {
+      logger.printError("initializeGenerationValueSet: Exception "+t.getMessage());
+    }
+
+    aValueSet.put("topics", topicList);
+    aValueSet.put("imclist", entityList);
+    aValueSet.put("parentlist", parentList);
+
+    Map articleTypeMap = new HashMap();
+    articleTypeMap.put("openposting", "0");
+    articleTypeMap.put("newswire", "1");
+    articleTypeMap.put("feature", "2");
+    articleTypeMap.put("topicspecial", "3");
+    articleTypeMap.put("startspecial", "4");
+    aValueSet.put("articletype", articleTypeMap);
+  };
+
+  public PrintWriter openWriter(String anIdentifier) throws MirLocalizerFailure {
+    File file;
+    File dir;
+
+    try {
+      file = new File( anIdentifier );
+      dir = new File(file.getParent());
+        if (dir!=null && !dir.exists()){
+          dir.mkdirs();
+      }
+
+      return new PrintWriter(
+        new OutputStreamWriter(
+          new FileOutputStream(file), MirGlobal.getConfigProperty("Mir.DefaultEncoding")
+        )
+      );
+    }
+    catch (Throwable t) {
+      throw new MirLocalizerFailure("Failure while opening a PrintWriter",t);
+    }
+  };
+
+  public void closeWriter(PrintWriter aWriter) {
+    aWriter.close();
+  };
+
+  public String filterText(String aText) {
+    return StringUtil.createHTML(
+        StringUtil.deleteForbiddenTags(aText),
+        MirGlobal.getConfigProperty("Producer.ImageRoot"),
+        MirGlobal.getConfigProperty("Producer.MailLinkName"),
+        MirGlobal.getConfigProperty("Producer.ExtLinkName"),
+        MirGlobal.getConfigProperty("Producer.IntLinkName")
+    );
+  }
+}
index f35ede5..d9a4178 100755 (executable)
@@ -3,17 +3,28 @@ package mircoders.localizer.basic;
 import java.util.*;
 import mir.producer.*;
 import mir.misc.*;
+import mir.entity.adapter.*;
+import mircoders.global.*;
 import mircoders.global.*;
 import mircoders.localizer.*;
 import mircoders.producer.*;
 
 public class MirBasicProducerLocalizer implements MirProducerLocalizer {
   private Map producerFactories;
+  protected EntityAdapterModel model;
   protected static Logfile logger = Logfile.getInstance( MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.Logfile"));
 
   public MirBasicProducerLocalizer() {
     producerFactories = new HashMap();
 
+    try {
+      model = MirGlobal.localizer().dataModel().adapterModel();
+    }
+    catch (Throwable t) {
+      logger.printError("MirBasicProducerLocalizer(): Exception "+t.getMessage());
+      model = new EntityAdapterModel();
+    }
+
     setupFactories(producerFactories);
   }
 
diff --git a/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java
deleted file mode 100755 (executable)
index 9d99449..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-package mircoders.localizer.basic;
-
-import java.util.*;
-import java.io.*;
-import freemarker.template.utility.*;
-import mir.misc.*;
-import mir.entity.*;
-import mircoders.module.*;
-import mircoders.storage.*;
-import mircoders.localizer.*;
-import mircoders.global.*;
-
-public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer {
-  protected static Logfile logger = Logfile.getInstance( MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.Logfile"));
-
-  public void initializeGenerationValueSet(Map aValueSet) {
-    // ML: these config settings will be included more beautifully as soon as the new config system is in place
-
-    Map configMap = new HashMap();
-    Map utilityMap = new HashMap();
-
-               configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));
-               configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));
-    configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));
-               configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));
-               configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));
-               configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));
-               configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));
-               configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));
-               configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));
-               configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));
-               configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));
-               configMap.put("defEncoding", MirGlobal.getConfigProperty("Mir.DefaultEncoding"));
-
-               utilityMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
-
-    aValueSet.put("config", configMap);
-    aValueSet.put("utility", utilityMap);
-
-    EntityList topicList=null;
-    EntityList entityList=null;
-    EntityList parentList=null;
-    EntityList languageList=null;
-
-    try {
-      ModuleLinksImcs linksImcsModule = new ModuleLinksImcs(DatabaseLinksImcs.getInstance());
-      ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance());
-      ModuleLanguage languageModule = new ModuleLanguage(DatabaseLanguage.getInstance());
-
-      topicList = topicsModule.getTopicsList();
-      entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1);
-      parentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1);
-      languageList = languageModule.getByWhereClause("", "id", -1);
-    }
-    catch (Throwable t) {
-      logger.printError("initializeGenerationValueSet: Exception "+t.getMessage());
-    }
-
-    aValueSet.put("topics", topicList);
-    aValueSet.put("imclist", entityList);
-    aValueSet.put("parentlist", parentList);
-
-    Map articleTypeMap = new HashMap();
-    articleTypeMap.put("openposting", "0");
-    articleTypeMap.put("newswire", "1");
-    articleTypeMap.put("feature", "2");
-    articleTypeMap.put("topicspecial", "3");
-    articleTypeMap.put("startspecial", "4");
-    aValueSet.put("articletype", articleTypeMap);
-  };
-
-  public PrintWriter openWriter(String anIdentifier) throws MirLocalizerFailure {
-    File file;
-    File dir;
-
-    try {
-      file = new File( anIdentifier );
-      dir = new File(file.getParent());
-        if (dir!=null && !dir.exists()){
-          dir.mkdirs();
-      }
-
-      return new PrintWriter(
-        new OutputStreamWriter(
-          new FileOutputStream(file), MirGlobal.getConfigProperty("Mir.DefaultEncoding")
-        )
-      );
-    }
-    catch (Throwable t) {
-      throw new MirLocalizerFailure("Failure while opening a PrintWriter",t);
-    }
-  };
-
-  public void closeWriter(PrintWriter aWriter) {
-    aWriter.close();
-  };
-
-  public String filterText(String aText) {
-    return StringUtil.createHTML(
-        StringUtil.deleteForbiddenTags(aText),
-        MirGlobal.getConfigProperty("Producer.ImageRoot"),
-        MirGlobal.getConfigProperty("Producer.MailLinkName"),
-        MirGlobal.getConfigProperty("Producer.ExtLinkName"),
-        MirGlobal.getConfigProperty("Producer.IntLinkName")
-    );
-  }
-}
index fa8595a..53be087 100755 (executable)
@@ -34,10 +34,10 @@ public class GeneratingProducerNode implements ProducerNode {
 
       aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier);
       aLogger.flush();
-      printWriter = MirGlobal.localizer().producerTool().openWriter( destinationIdentifier );
+      printWriter = MirGlobal.localizer().producerAssistant().openWriter( destinationIdentifier );
       generator = MirGlobal.localizer().generators().makeGenerator( generatorIdentifier );
       generator.generate(printWriter, aValueMap, aLogger);
-      MirGlobal.localizer().producerTool().closeWriter( printWriter );
+      MirGlobal.localizer().producerAssistant().closeWriter( printWriter );
        }
        catch (Throwable t) {
          aLogger.println("  error while generating: " + t.getMessage());
index ca547de..220eaa1 100755 (executable)
@@ -14,11 +14,16 @@ public class NodedProducerFactory implements ProducerFactory {
   public mir.producer.Producer makeProducer(String aVerb) throws ProducerFailure {
     Map baseValues;
 
-    baseValues = new HashMap();
+    try {
+      baseValues = new HashMap();
 
-    MirGlobal.localizer().producerTool().initializeGenerationValueSet(baseValues);
+      MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(baseValues);
 
-    return new NodedProducer(rootNode, aVerb, baseValues);
+      return new NodedProducer(rootNode, aVerb, baseValues);
+    }
+    catch (Throwable t) {
+      throw new ProducerFailure(t.getMessage(), t);
+    }
   };
 
   public Iterator verbs() {
index 68663f5..aeca249 100755 (executable)
@@ -14,8 +14,8 @@ public class BoliviaLocalizer extends MirBasicLocalizer {
     return new BoliviaOpenPostingLocalizer();
   }
 
-  public MirProducerToolLocalizer producerTool() {
-    return new BoliviaProducerToolLocalizer();
+  public MirProducerAssistantLocalizer producerAssistant() {
+    return new BoliviaProducerAssistantLocalizer();
   }
 
 }
\ No newline at end of file
diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaProducerAssistantLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerAssistantLocalizer.java
new file mode 100755 (executable)
index 0000000..ab84ad5
--- /dev/null
@@ -0,0 +1,21 @@
+package mirlocal.bolivia.indymedia.org;
+
+import java.util.*;
+import java.io.*;
+import freemarker.template.utility.*;
+import mir.misc.*;
+import mir.entity.*;
+import mircoders.module.*;
+import mircoders.storage.*;
+import mircoders.localizer.*;
+import mircoders.localizer.basic.*;
+import mircoders.global.*;
+
+public class BoliviaProducerAssistantLocalizer extends MirBasicProducerAssistantLocalizer {
+  public void initializeGenerationValueSet(Map aValueSet) {
+    super.initializeGenerationValueSet(aValueSet);
+
+    ((Map) aValueSet.get("config")).put("adminUrl", MirGlobal.getConfigProperty("Producer.AdminUrl"));
+  }
+}
+
index 0297455..de93e38 100755 (executable)
@@ -7,7 +7,6 @@ import mircoders.localizer.*;
 import mircoders.localizer.basic.*;
 import mircoders.producer.*;
 import mircoders.storage.*;
-import mircoders.entity.adapter.*;
 
 public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
@@ -17,9 +16,9 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       contentNode =
-          new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "content", model, "content",
             new CompositeProducerNode( new ProducerNode[] {
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                     new CompositeProducerNode( new ProducerNode[] {
                       new GeneratingProducerNode(
@@ -56,17 +55,17 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
     aProducerNode.clear();
     try {
       aProducerNode.addSubNode(
-            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+            new EntityListProducerNode("newswire", model, "content",
                     "is_published='1' and to_article_type = ${articletype.newswire}", "date desc, webdb_create desc", 40, 0,
-              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+              new EntityListProducerNode("languages", model, "language",
                             "", "code", 10, 0,
-                new EntityListProducerNode("startspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                new EntityListProducerNode("startspecial", model, "content",
                           "is_published='1' and to_article_type = ${articletype.startspecial}", "date desc, webdb_create desc", 1, 0,
-                  new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                  new EntityListProducerNode("features", model, "content",
                           "is_published='1' and to_article_type = ${articletype.feature}", "date desc, webdb_create desc", 10, 0,
-                    new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+                    new EntityListProducerNode("breaking", model, "breakingNews",
                               "", "webdb_create desc", 5, 0,
-                      new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                      new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                         new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                           new GeneratingProducerNode(
                               "/producer/bolivia.indymedia.org/startpage.template",
@@ -91,9 +90,9 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       aProducerNode.addSubNode(
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/navigation.template",
@@ -118,11 +117,11 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
     try {
 // topic pages:
       topicArchiveNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityBatchingProducerNode( "articles", "batch", model, "content",
               "is_published='1' and to_article_type = ${articletype.newswire} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date asc, webdb_create asc", 20, 10, 0,
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/topic.template",
@@ -131,9 +130,9 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
               )
             )
           ),
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/topicnavigation.template",
@@ -147,8 +146,8 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
       topicArchiveNode.addVerb("all", -1);
 
       aProducerNode.addSubNode(
-          new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "", "",
-            new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "topic", model, "topic","", "",
+            new EntityListProducerNode("topicspecial", model, "content",
                   "is_published='1' and to_article_type = ${articletype.topicspecial} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date, webdb_create", 1, 0,
               topicArchiveNode
             )
@@ -156,16 +155,16 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
       );
 
       aProducerNode.addSubNode(
-        new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "", "",
-          new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityEnumeratingProducerNode( "topic", model, "topic","", "",
+          new EntityListProducerNode("topicspecial", model, "content",
                 "is_published='1' and to_article_type = ${articletype.topicspecial} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date, webdb_create", 1, 0,
-            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+            new EntityListProducerNode("newswire", model, "content",
                     "is_published='1' and to_article_type = ${articletype.newswire} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date desc, webdb_create desc", 40, 0,
-              new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+              new EntityListProducerNode("features", model, "content",
                       "is_published='1' and to_article_type = ${articletype.feature} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date desc, webdb_create desc", 10, 0,
-                  new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                  new EntityListProducerNode("languages", model, "language",
                                 "", "code", 10, 0,
-                      new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                      new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                         new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                           new GeneratingProducerNode(
                               "/producer/bolivia.indymedia.org/topicstartpage.template",
@@ -195,11 +194,11 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
 // newswire archive:
       archiveNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityBatchingProducerNode( "articles", "batch", model, "content",
               "is_published='1' and to_article_type = ${articletype.newswire}", "date asc, webdb_create asc", 20, 10, 0,
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/newswire.template",
@@ -208,9 +207,9 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
               )
             )
           ),
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/newswirenavigation.template",
@@ -227,11 +226,11 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
 // feature archive:
       archiveNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityBatchingProducerNode( "articles", "batch", model, "content",
               "is_published='1' and to_article_type in (${articletype.feature}, ${articletype.startspecial})", "date asc, webdb_create asc", 20, 10, 0,
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/feature.template",
@@ -240,9 +239,9 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
               )
             )
           ),
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/bolivia.indymedia.org/featurenavigation.template",
diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java
deleted file mode 100755 (executable)
index f4513c4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-package mirlocal.bolivia.indymedia.org;
-
-import java.util.*;
-import java.io.*;
-import freemarker.template.utility.*;
-import mir.misc.*;
-import mir.entity.*;
-import mircoders.module.*;
-import mircoders.storage.*;
-import mircoders.localizer.*;
-import mircoders.localizer.basic.*;
-import mircoders.global.*;
-
-public class BoliviaProducerToolLocalizer extends MirBasicProducerToolLocalizer {
-  public void initializeGenerationValueSet(Map aValueSet) {
-    super.initializeGenerationValueSet(aValueSet);
-
-    ((Map) aValueSet.get("config")).put("adminUrl", MirGlobal.getConfigProperty("Producer.AdminUrl"));
-  }
-}
-
index c8de531..e19d8c1 100755 (executable)
@@ -14,8 +14,8 @@ public class EHLocalizer extends MirBasicLocalizer {
     return new EHOpenPostingLocalizer();
   }
 
-  public MirProducerToolLocalizer producerTool() {
-    return new MirBasicProducerToolLocalizer();
+  public MirProducerAssistantLocalizer producerAssistant() {
+    return new MirBasicProducerAssistantLocalizer();
   }
 
 }
\ No newline at end of file
index 7839fdf..f4e53e8 100755 (executable)
@@ -8,7 +8,6 @@ import mircoders.localizer.*;
 import mircoders.localizer.basic.*;
 import mircoders.producer.*;
 import mircoders.storage.*;
-import mircoders.entity.adapter.*;
 
 public class EHProducerLocalizer extends MirBasicProducerLocalizer {
 
@@ -18,9 +17,9 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       contentNode =
-          new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "content", model, "content",
             new CompositeProducerNode( new ProducerNode[] {
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                     new CompositeProducerNode( new ProducerNode[] {
                       new GeneratingProducerNode(
@@ -53,17 +52,17 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
     aProducerNode.clear();
     try {
       aProducerNode.addSubNode(
-            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+            new EntityListProducerNode("newswire", model, "content",
                     "is_published='1' and to_article_type = ${articletype.newswire}", "date desc, webdb_create desc", 40, 0,
-              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+              new EntityListProducerNode("languages", model, "language",
                             "", "code", 10, 0,
-                new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                   new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
-                    new EntityListProducerNode("startspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                    new EntityListProducerNode("startspecial", model, "content",
                               "is_published='1' and to_article_type = ${articletype.startspecial}", "date desc, webdb_create desc", 1, 0,
-                      new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                      new EntityListProducerNode("features", model, "content",
                               "is_published='1' and to_article_type = ${articletype.feature}", "date desc, webdb_create desc", 10, 0,
-                        new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+                        new EntityListProducerNode("breaking", model, "breakingNews",
                                   "", "webdb_create desc", 5, 0,
                           new GeneratingProducerNode(
                               "/producer/euskalherria.indymedia.org/startpage.template",
@@ -88,9 +87,9 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       aProducerNode.addSubNode(
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/euskalherria.indymedia.org/navigation.template",
@@ -113,11 +112,11 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       topicPageNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityBatchingProducerNode( "articles", "batch", model, "content",
               "is_published='1' and to_article_type = ${articletype.newswire} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date asc, webdb_create asc", 20, 5, 0,
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/euskalherria.indymedia.org/topic.template",
@@ -126,9 +125,9 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
               )
             )
           ),
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/euskalherria.indymedia.org/topicnavigation.template",
@@ -142,10 +141,10 @@ public class EHProducerLocalizer extends MirBasicProducerLocalizer {
       topicPageNode.addVerb("new", 3);
 
       aProducerNode.addSubNode(
-          new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "", "",
-            new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "topic", model, "topic","", "",
+            new EntityListProducerNode("topicspecial", model, "content",
                   "is_published='1' and to_article_type = ${articletype.topicspecial} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date, webdb_create", 1, 0,
-              new EntityListProducerNode("topicfeatures", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+              new EntityListProducerNode("topicfeatures", model, "content",
                     "is_published='1' and to_article_type = ${articletype.feature} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date, webdb_create", 10, 0,
                 topicPageNode
               )
index 56286b8..b43dc78 100755 (executable)
@@ -14,7 +14,7 @@ public class IndyNLLocalizer extends MirBasicLocalizer {
     return new IndyNLOpenPostingLocalizer();
   }
 
-  public MirProducerToolLocalizer producerTool() {
+  public MirProducerAssistantLocalizer producerAssistant() {
     return new IndyNLProducerAssistantLocalizer();
   }
 
index 4812af5..ec22992 100755 (executable)
@@ -3,7 +3,7 @@ package mircoders.localizer.basic;
 import java.util.*;
 import mircoders.localizer.basic.*;
 
-public class IndyNLProducerAssistantLocalizer extends MirBasicProducerToolLocalizer {
+public class IndyNLProducerAssistantLocalizer extends MirBasicProducerAssistantLocalizer {
   public void initializeGenerationValueSet(Map aValueSet) {
     super.initializeGenerationValueSet(aValueSet);
 
index 45e2911..cb99075 100755 (executable)
@@ -7,7 +7,6 @@ import mircoders.localizer.*;
 import mircoders.localizer.basic.*;
 import mircoders.producer.*;
 import mircoders.storage.*;
-import mircoders.entity.adapter.*;
 
 public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
@@ -16,13 +15,13 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       contentNode =
-          new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "content", model, "content",
             new CompositeProducerNode( new ProducerNode[] {
               new GeneratingProducerNode(
                   "/producer/indymedia.nl/content.template",
                   "${config.storageRoot}/content/${content.date.formatted.yyyy}/${content.date.formatted.MM}/${content.id}.inc"
               ),
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                     new CompositeProducerNode( new ProducerNode[] {
                       new GeneratingProducerNode(
@@ -46,8 +45,8 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
 
       contentNode =
-          new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+          new EntityEnumeratingProducerNode( "content", model, "content",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                   new CompositeProducerNode( new ProducerNode[] {
                     new GeneratingProducerNode(
@@ -76,12 +75,12 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
   protected void setupStartPageFactory(CompositeProducerNode aProducerNode) {
     try {
       aProducerNode.addSubNode(
-            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+            new EntityListProducerNode("newswire", model, "content",
                     "is_published='1' and to_article_type in (${articletype.newswire}, ${articletype.promotednewswire})", "date desc, webdb_create desc", 40, 0,
-              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+              new EntityListProducerNode("languages", model, "language",
                             "", "code", 10, 0,
                     new CompositeProducerNode( new ProducerNode[] {
-                        new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                        new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                           new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                               new GeneratingProducerNode(
                                   "/producer/indymedia.nl/newswire.template",
@@ -89,13 +88,13 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
                               )
                           )
                         ),
-                        new EntityListProducerNode("startspecials", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                        new EntityListProducerNode("startspecials", model, "content",
                                 "is_published='1' and to_article_type = ${articletype.startspecial}", "date desc, webdb_create desc", 10, 0,
-                          new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                          new EntityListProducerNode("features", model, "content",
                                   "is_published='1' and to_article_type in ( ${articletype.feature}, ${articletype.promotednewswire})", "date desc, webdb_create desc", 20, 0,
-                            new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+                            new EntityListProducerNode("breaking", model, "breakingNews",
                                       "", "webdb_create desc", 5, 0,
-                              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "code='nl'", "",
+                              new EntityEnumeratingProducerNode( "language", model, "language", "code='nl'", "",
                                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                                   new AssignmentProducerNode( "staticinclude", "1",
                                     new EvaluatedAssignmentProducerNode( "topinclude", "/producer/indymedia.nl/top.template",
@@ -129,11 +128,11 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       topicPageNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityBatchingProducerNode( "articles", "batch", model, "content",
               "is_published='1' and to_article_type in (${articletype.newswire}, ${articletype.promotednewswire}) and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date asc, webdb_create asc", 6, 5, 0,
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/indymedia.nl/topic.template",
@@ -142,9 +141,9 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
               )
             )
           ),
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+            new EntityEnumeratingProducerNode( "language", model, "language", "", "",
               new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                 new GeneratingProducerNode(
                     "/producer/indymedia.nl/topicnavigation.template",
@@ -158,8 +157,8 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
       topicPageNode.addVerb("new", 3);
 
       aProducerNode.addSubNode(
-          new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "", "",
-            new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityEnumeratingProducerNode( "topic", model, "topic","", "",
+            new EntityListProducerNode("topicspecial", model, "content",
                   "is_published='1' and to_article_type = ${articletype.topicspecial} and id in (select content_id from content_x_topic where topic_id = ${topic.id})", "date, webdb_create", 1, 0,
               topicPageNode
             )
@@ -175,9 +174,9 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
   protected void setupStaticFactory(CompositeProducerNode aProducerNode) {
     try {
       aProducerNode.addSubNode(
-          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+          new EntityListProducerNode("languages", model, "language",
                   "", "code", 10, 0,
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                   new CompositeProducerNode( new ProducerNode[] {
                     new GeneratingProducerNode(
@@ -256,15 +255,15 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       node =
-        new EntityListProducerNode("startspecials", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+        new EntityListProducerNode("startspecials", model, "content",
                 "is_published='1' and to_article_type = ${articletype.startspecial}", "date desc, webdb_create desc", 10, 0,
-          new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityListProducerNode("features", model, "content",
                   "is_published='1' and to_article_type in ( ${articletype.feature}, ${articletype.promotednewswire})", "date desc, webdb_create desc", 20, 0,
-            new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+            new EntityListProducerNode("breaking", model, "breakingNews",
                       "", "webdb_create desc", 5, 0,
-              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+              new EntityListProducerNode("languages", model, "language",
                         "", "code", 10, 0,
-                new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                   new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                       new GeneratingProducerNode(
                           "/producer/indymedia.nl/features.template",
@@ -285,13 +284,13 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       node =
-          new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+          new EntityListProducerNode("features", model, "content",
                   "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10, 0,
-            new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+            new EntityListProducerNode("breaking", model, "breakingNews",
                       "", "webdb_create desc", 5, 0,
-              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+              new EntityListProducerNode("languages", model, "language",
                         "", "code", 10, 0,
-                new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                new EntityEnumeratingProducerNode( "language", model, "language", "", "",
                   new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                       new GeneratingProducerNode(
                           "/producer/indymedia.nl/features.template",
@@ -310,11 +309,12 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       batchingNode =
-          new EntityBatchingProducerNode( "comments", "batch", DatabaseComment.getInstance(), CommentAdapterDefinition.getInstance(),
+          new EntityBatchingProducerNode( "comments", "batch", model, "comments",
+
                 "", "id asc", 25, 15, 0,
-            new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+            new EntityListProducerNode("languages", model, "language",
                     "", "code", 10, 0,
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "code='nl'", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "code='nl'", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                   new GeneratingProducerNode(
                       "/producer/indymedia.nl/commentsindex.template",
@@ -323,9 +323,9 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
                 )
               )
             ),
-            new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+            new EntityListProducerNode("languages", model, "language",
                     "", "code", 10, 0,
-              new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "code='nl'", "",
+              new EntityEnumeratingProducerNode( "language", model, "language", "code='nl'", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                   new GeneratingProducerNode(
                       "/producer/indymedia.nl/commentsindexnavigation.template",
@@ -346,7 +346,7 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
     try {
       enumeratingNode =
-              new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+              new EntityEnumeratingProducerNode( "content", model, "content",
                   new GeneratingProducerNode(
                       "/producer/indymedia.nl/static.template",
                       "${config.storageRoot}/${language.code}/static/${content.edittitle}.shtml"
@@ -357,7 +357,7 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
       enumeratingNode.addVerb( "new", "is_published='1' and is_produced='f' and to_article_type=${articletype.static} and to_language=${language.id} and edittitle<>'' and not edittitle is null", "" );
 
       aFactoriesMap.put("staticarticles", new NodedProducerFactory(
-          new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+          new EntityEnumeratingProducerNode( "language", model, "language", "", "",
             new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
               enumeratingNode
             )