producer performance upgrades in the form of entity caching, and preliminary
authorzapata <zapata>
Sat, 1 Jun 2002 16:48:12 +0000 (16:48 +0000)
committerzapata <zapata>
Sat, 1 Jun 2002 16:48:12 +0000 (16:48 +0000)
bolivian producer config.

source/mir/entity/adapter/EntityAdapter.java
source/mir/entity/adapter/EntityAdapterDefinition.java
source/mir/entity/adapter/EntityIteratorAdapter.java
source/mir/generator/FreemarkerGenerator.java
source/mir/producer/EntityListProducerNode.java
source/mir/util/CachingRewindableIterator.java [new file with mode: 0755]
source/mircoders/entity/adapter/ContentAdapterDefinition.java
source/mircoders/producer/GeneratingProducerNode.java
source/mirlocal/bolivia.indymedia.org/BoliviaProducerLocalizer.java
source/mirlocal/indymedia.nl/IndyNLProducerLocalizer.java

index 74a481e..9e3aa87 100755 (executable)
@@ -17,7 +17,7 @@ public class EntityAdapter implements Map {
   public boolean containsKey(Object aKey) {
     try {
       if (aKey instanceof String)
-        return      entity.hasValueForField((String) aKey)
+        return     entity.hasValueForField((String) aKey)
                 || definition.hasCalculatedField((String) aKey)
                 || entity.getFields().contains(aKey);
     }
index 9a888fb..01c8b1b 100755 (executable)
@@ -131,9 +131,9 @@ public class EntityAdapterDefinition {
   static protected Object getRelation(StorageObject aStorageObject, String aWhereClause, String anOrderByClause, EntityAdapterDefinition aDefinition) {
     try {
       return
-          new EntityIteratorAdapter(
+          new CachingRewindableIterator( new EntityIteratorAdapter(
               new EntityBrowser( aStorageObject, aWhereClause, anOrderByClause, -1),
-              aDefinition);
+              aDefinition));
     }
     catch (Throwable t) {
       throw new RuntimeException(t.getMessage());
index fe967ab..202314d 100755 (executable)
@@ -37,4 +37,4 @@ public class EntityIteratorAdapter implements RewindableIterator {
   public void rewind() {
     iterator.rewind();
   };
-}
\ No newline at end of file
+}
index 4329ee0..460f24a 100755 (executable)
@@ -16,9 +16,13 @@ public class FreemarkerGenerator implements Generator {
   }
 
   public void generate(PrintWriter anOutputWriter, Map aValues, PrintWriter aLogger) throws GeneratorException {
-    aLogger.println("processing...<br/>");
-               template.process((TemplateModelRoot) makeMapAdapter(aValues), anOutputWriter);
-    aLogger.println("processed...<br/>");
+    try {
+                 template.process((TemplateModelRoot) makeMapAdapter(aValues), anOutputWriter);
+    }
+    catch (Throwable t) {
+      aLogger.println("Exception occurred: "+t.getMessage());
+      t.printStackTrace(aLogger);
+    }
        }
 
   private static TemplateScalarModel makeStringAdapter(String aString) {
index bda6241..39e3c1a 100755 (executable)
@@ -34,14 +34,16 @@ public class EntityListProducerNode extends ProducerNodeDecorator {
   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
     try {
       aValueMap.put(key,
-        new EntityIteratorAdapter(
-          storage,
-          ParameterExpander.expandExpression( aValueMap, whereClause ),
-          ParameterExpander.expandExpression( aValueMap, orderByClause ),
-          20,
-          definition,
-          limit,
-          skip )
+        new CachingRewindableIterator(
+          new EntityIteratorAdapter(
+            storage,
+            ParameterExpander.expandExpression( aValueMap, whereClause ),
+            ParameterExpander.expandExpression( aValueMap, orderByClause ),
+            20,
+            definition,
+            limit,
+            skip )
+        )
       );
       super.produce(aValueMap, aVerb, aLogger);
     }
diff --git a/source/mir/util/CachingRewindableIterator.java b/source/mir/util/CachingRewindableIterator.java
new file mode 100755 (executable)
index 0000000..77be4ba
--- /dev/null
@@ -0,0 +1,45 @@
+package mir.util;
+
+import java.util.*;
+
+import java.util.*;
+import mir.storage.*;
+import mir.util.*;
+import mir.entity.*;
+
+public class CachingRewindableIterator implements RewindableIterator {
+  private Iterator master;
+  private List cachedItems;
+  private int iterationPosition;
+
+  public CachingRewindableIterator(Iterator anIterator) {
+    master = anIterator;
+    cachedItems = new Vector();
+    iterationPosition = 0;
+  }
+
+  public boolean hasNext() {
+    return iterationPosition<cachedItems.size() || master.hasNext();
+  }
+
+  public Object next() {
+    Object result;
+
+    if (iterationPosition>=cachedItems.size()) {
+      cachedItems.add(master.next());
+    }
+
+    result = cachedItems.get(iterationPosition);
+    iterationPosition++;
+
+    return result;
+  }
+
+  public void remove() {
+    throw new UnsupportedOperationException();
+  }
+
+  public void rewind() {
+    iterationPosition=0;
+  };
+}
\ No newline at end of file
index d2e390c..1d038a1 100755 (executable)
@@ -5,6 +5,7 @@ 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.*;
@@ -33,6 +34,8 @@ public class ContentAdapterDefinition extends EntityAdapterDefinition {
     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(
@@ -122,30 +125,33 @@ public class ContentAdapterDefinition extends EntityAdapterDefinition {
 
   private class ContentToIconField implements CalculatedField {
     public Object getValue(EntityAdapter anEntityAdapter) {
-      EntityUploadedMedia uploadedMedia;
+//      EntityUploadedMedia uploadedMedia;
+      EntityAdapter media;
       Entity mediaType;
-      EntityBrowser browser;
+      RewindableIterator iterator;
       Map result;
       MirMedia mediaHandler;
       String tinyIcon;
       String iconAlt;
 
-
       try {
-        browser =
+        iterator = (RewindableIterator) anEntityAdapter.get("to_uploaded_media");
+        iterator.rewind();
+/*        browser =
             new EntityBrowser(
                 DatabaseUploadedMedia.getInstance(),
                 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
                 "id",
                 1);
+*/
 
         tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
         iconAlt = "Text";
 
-        if (browser.hasNext()) {
-          uploadedMedia = (EntityUploadedMedia) browser.next();
+        if (iterator.hasNext()) {
+          media = (EntityAdapter) iterator.next();
 
-          mediaType = uploadedMedia.getMediaType();
+          mediaType = ((EntityMedia) media.getEntity()).getMediaType();
           mediaHandler = MediaHelper.getHandler( mediaType );
 
           if (mediaHandler.isVideo()) {
index 0e25977..1ab617b 100755 (executable)
@@ -23,24 +23,28 @@ public class GeneratingProducerNode implements ProducerNode {
     String generatorIdentifier;
     String destinationIdentifier;
 
+         long startTime;
+         long endTime;
+
+         startTime = System.currentTimeMillis();
     try {
+
       destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression );
       generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression );
 
       aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier);
+      aLogger.flush();
       printWriter = MirGlobal.localizer().producerTool().openWriter( destinationIdentifier );
       generator = MirGlobal.localizer().generators().makeGenerator( generatorIdentifier );
       generator.generate(printWriter, aValueMap, aLogger);
       MirGlobal.localizer().producerTool().closeWriter( printWriter );
-      aLogger.println("Done generating");
-    }
-    catch (Throwable t) {
-      aLogger.println("Error while generating: " + t.getMessage());
-      t.printStackTrace(aLogger);
-
-      throw new ProducerFailure(t.getMessage(), t);
+       }
+       catch (Throwable t) {
     }
+    endTime = System.currentTimeMillis();
 
+    aLogger.println("  Time: " + (endTime-startTime) + " ms<br>");
+    aLogger.flush();
   }
 
   public Set buildVerbSet() {
index d0f0e83..3d3774d 100755 (executable)
@@ -11,37 +11,29 @@ import mircoders.entity.adapter.*;
 
 public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
 
-  protected void setupContentFactory(CompositeProducerNode aNode) {
-  }
-
-  protected void setupStartPageFactory(CompositeProducerNode aNode) {
-  }
-
-  protected void setupSynchronizationFactory(CompositeProducerNode aNode) {
-  }
-
-  protected void setupStaticFactory(CompositeProducerNode aNode) {
-  }
-
-  protected void setupTopicsFactory(CompositeProducerNode aNode) {
-  }
-
-/*  protected void setupContentFactory(CompositeProducerFactory aContentFactory) {
-
+  protected void setupContentFactory(CompositeProducerNode aProducerNode) {
     EntityEnumeratingProducerNode contentNode = null;
+    aProducerNode.clear();
 
     try {
       contentNode =
           new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
             new CompositeProducerNode( new ProducerNode[] {
               new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
-                new ResourceBundleProducerNode("lang", "producer_${language.code}",
-                  new GeneratingProducerNode(
-                      "/producer/bolivia.indymedia.org/article.template",
-                      "${config.storageRoot}/${language.code}/articles/${content.date.year}/${content.date.month}/${content.id}.shtml"
-                  )
+                new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
+                    new CompositeProducerNode( new ProducerNode[] {
+                      new GeneratingProducerNode(
+                          "/producer/bolivia.indymedia.org/article.template",
+                          "${config.storageRoot}/${language.code}/${content.date.formatted.yyyy}/${content.date.formatted.MM}/${content.id}.shtml"
+                      ),
+                      new FileDateSettingProducerNode(
+                          "${config.storageRoot}/${language.code}/${content.date.formatted.yyyy}/${content.date.formatted.MM}/${content.id}.shtml",
+                          "content.date.date"
+                      )
+                    } )
                 )
-              )
+              ),
+              new ContentMarkingProducerNode( "content")
             } )
           );
     }
@@ -51,127 +43,185 @@ public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer {
     contentNode.addVerb( "all", "is_published='1'", "" );
     contentNode.addVerb( "new", "is_published='1' and is_produced='f'", "" );
 
-    aContentFactory.addFactory( new NodedProducerFactory( contentNode ) );
-
+    aProducerNode.addSubNode( contentNode );
+  }
 
-//  public EntityEnumeratingProducerNode(String aKey, StorageObject aStorage, EntityAdapterDefinition aDefinition, ProducerNode aSubNode) {
+  protected void setupStartPageFactory(CompositeProducerNode aProducerNode) {
+    aProducerNode.clear();
+    try {
+      aProducerNode.addSubNode(
+            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                    "is_published='1' and to_article_type = ${articletype.newswire}", "date desc, webdb_create desc", 40, 0,
+              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                            "", "code", 10, 0,
+                new EntityListProducerNode("startspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                          "is_published='1' and to_article_type = ${articletype.startspecial}", "date desc, webdb_create desc", 1, 0,
+                  new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                          "is_published='1' and to_article_type = ${articletype.feature}", "date desc, webdb_create desc", 10, 0,
+                    new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+                              "", "webdb_create desc", 5, 0,
+                      new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                        new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
+                          new GeneratingProducerNode(
+                              "/producer/bolivia.indymedia.org/startpage.template",
+                              "${config.storageRoot}/${language.code}/index.shtml"
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+              )
+            )
+      );
+
+      aProducerNode.addSubNode(
+          new EntityEnumeratingProducerNode( "city", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "main_url='c'", "",
+            new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                    "is_published='1' and to_article_type = ${articletype.newswire} and exists(select * from content_x_topic where content_id=id and topic_id=${city.id})", "date desc, webdb_create desc", 40, 0,
+              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                            "", "code", 10, 0,
+                new EntityListProducerNode("startspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                          "is_published='1' and to_article_type = ${articletype.startspecial} and "+
+                          "exists(select * from content_x_topic where content_id=id and topic_id=${city.id})", "date desc, webdb_create desc", 1, 0,
+                  new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                          "is_published='1' and to_article_type = ${articletype.feature} and exists(select * from content_x_topic where content_id=id and topic_id=${city.id})", "date desc, webdb_create desc", 10, 0,
+                    new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
+                              "", "webdb_create desc", 5, 0,
+                      new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                        new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
+                          new GeneratingProducerNode(
+                              "/producer/bolivia.indymedia.org/startpage.template",
+                              "${config.storageRoot}/${language.code}/${city.filename}/index.shtml"
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+              )
+            )
+          )
+      );
+    }
+    catch (Throwable t) {
+    }
+  }
 
-//    aContentFactory.addFactory(
-//      new ContentProducerFactory(
-//      "producer/content.template",
-//      "bundles.admin",
-//      MirGlobal.getConfigProperty("Producer.StorageRoot") + "/content/${contentyear}/${contentmonth}/${contentid}.inc",
-//      Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize"))));
+  protected void setupStaticFactory(CompositeProducerNode aProducerNode) {
+    aProducerNode.clear();
 
-//    aContentFactory.addFactory(
-//      new ContentProducerFactory(
-//      "producer/article.template",
-//      "bundles.admin",
-//      MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/${contentyear}/${contentmonth}/${contentid}.shtml",
-//      Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize"))));
+    try {
+      aProducerNode.addSubNode(
+          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                  "", "code", 10, 0,
+            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
+                new GeneratingProducerNode(
+                    "/producer/bolivia.indymedia.org/navigation.template",
+                    "${config.storageRoot}/${language.code}/navigation.inc"
+                )
+              )
+            )
+          )
+      );
+    }
+    catch (Throwable t) {
+    }
   }
 
-  protected void setupStartPageFactory(CompositeProducerFactory aStartPageFactory) {
-    ProducerNode topicNode = null;
+  protected void setupTopicsFactory(CompositeProducerNode aProducerNode) {
+    aProducerNode.clear();
+
+    EntityBatchingProducerNode topicPageNode = null;
 
     try {
-      topicNode =
-        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance()
-              "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 20, 10, 0,
+// topic pages:
+      topicPageNode =
+        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+              "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", 6, 5, 0,
           new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
                   "", "code", 10, 0,
             new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
               new ResourceBundleProducerNode("lang", "producer_${language.code}",
                 new GeneratingProducerNode(
-                    "/producer/bolivia.indymedia.org/startpage.template",
-                    "${config.storageRoot}/${language.code}/index.shtml"
+                    "/producer/bolivia.indymedia.org/topic.template",
+                    "${config.storageRoot}/${language.code}/${topic.filename}/${topic.filename}${batch.current.identifier}.shtml"
+                )
+              )
+            )
+          ),
+          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                  "", "code", 10, 0,
+            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new ResourceBundleProducerNode("lang", "producer_${language.code}",
+                new GeneratingProducerNode(
+                    "/producer/bolivia.indymedia.org/topicnavigation.template",
+                    "${config.storageRoot}/${language.code}/${topic.filename}/${topic.filename}navigation.inc"
+                )
+              )
+            )
+          )
+        );
+      topicPageNode.addVerb("all", -1);
+      topicPageNode.addVerb("new", 3);
+
+      aProducerNode.addSubNode(
+          new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "", "",
+            new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                  "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
+            )
+          )
+      );
+
+// topic pages per city:
+      topicPageNode =
+        new EntityBatchingProducerNode( "articles", "batch", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+              "is_published='1' and to_article_type = ${articletype.newswire} and " +
+              "id in (select content_id from content_x_topic where topic_id = ${topic.id}) and " +
+              "id in (select content_id from content_x_topic where topic_id = ${city.id})", "date asc, webdb_create asc", 6, 5, 0,
+          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                  "", "code", 10, 0,
+            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new ResourceBundleProducerNode("lang", "producer_${language.code}",
+                new GeneratingProducerNode(
+                    "/producer/bolivia.indymedia.org/topic.template",
+                    "${config.storageRoot}/${language.code}/${city.filename}/${topic.filename}/${topic.filename}${batch.current.identifier}.shtml"
+                )
+              )
+            )
+          ),
+          new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                  "", "code", 10, 0,
+            new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+              new ResourceBundleProducerNode("lang", "producer_${language.code}",
+                new GeneratingProducerNode(
+                    "/producer/bolivia.indymedia.org/topicnavigation.template",
+                    "${config.storageRoot}/${language.code}/${city.filename}/${topic.filename}/${topic.filename}navigation.inc"
                 )
               )
             )
           )
         );
-      topicNode.addVerb("all", -1);
-      topicNode.addVerb("new", 3);
+      topicPageNode.addVerb("all", -1);
+      topicPageNode.addVerb("new", 3);
+
+      aProducerNode.addSubNode(
+          new EntityEnumeratingProducerNode( "city", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "main_url='c'", "",
+            new EntityEnumeratingProducerNode( "topic", DatabaseTopics.getInstance(), TopicsAdapterDefinition.getInstance(), "((main_url is null) or main_url<>'c')", "",
+              new EntityListProducerNode("topicspecial", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                    "is_published='1' and to_article_type = ${articletype.topicspecial} and "+
+                    "id in (select content_id from content_x_topic where topic_id = ${topic.id}) and"+
+                    "id in (select content_id from content_x_topic where topic_id = ${city.id})", "date, webdb_create", 1, 0,
+                topicPageNode
+              )
+            )
+          )
+      );
     }
     catch (Throwable t) {
     }
 
-    aStartPageFactory.addFactory( new NodedProducerFactory( startPageNode ) );
-
-
-
-    aStartPageFactory.addFactory(
-      new TopicStartPageProducerFactory(
-          "producer/citystart.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/start${filename}.shtml",
-          MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"),
-          0));
-
-    aStartPageFactory.addFactory(
-      new TopicStartPageProducerFactory(
-          "producer/newswire.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/newswire${filename}.inc",
-          0,
-          MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire")));
-
-    aStartPageFactory.addFactory(
-      new StartPageProducerFactory(
-          "producer/start.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/start.shtml",
-          MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"),
-          0));
-
-    aStartPageFactory.addFactory(
-      new StartPageProducerFactory(
-          "producer/newswire.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/newswire.inc",
-          0,
-          MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire")));
-
-
   }
-
-  protected void setupStaticFactory(CompositeProducerFactory aStaticFactory) {
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/nav.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/nav.inc"));
-
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/top.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/top.inc"));
-
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/bottom.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/bottom.inc"));
-
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/style.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/style.css"));
-
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/articlepre.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepre.shtml"));
-
-    aStaticFactory.addFactory(
-      new StaticProducerFactory(
-          "producer/articlepost.template",
-          "bundles.admin",
-          MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepost.shtml"));
-  }
-*/
-
 }
index 4bc33ad..8d45559 100755 (executable)
@@ -69,6 +69,7 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
                           new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
                                     "", "webdb_create desc", 5, 0,
                             new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "code='nl'", "",
+                              new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                                 new AssignmentProducerNode( "staticinclude", "1",
                                   new EvaluatedAssignmentProducerNode( "topinclude", "/producer/indymedia.nl/top.template",
                                   new EvaluatedAssignmentProducerNode( "bottominclude", "/producer/indymedia.nl/bottom.template",
@@ -81,6 +82,7 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
                                     )
                                   )))))
                                 )
+                              )
                             )
                           )
                         )