producer performance upgrades in the form of entity caching, and preliminary
[mir.git] / source / mirlocal / indymedia.nl / IndyNLProducerLocalizer.java
index f436e4f..8d45559 100755 (executable)
@@ -11,7 +11,7 @@ import mircoders.entity.adapter.*;
 
 public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
 
-  protected void setupContentFactory(CompositeProducerFactory aContentFactory) {
+  protected void setupContentFactory(CompositeProducerNode aProducerNode) {
     EntityEnumeratingProducerNode contentNode = null;
 
     try {
@@ -20,14 +20,20 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
             new CompositeProducerNode( new ProducerNode[] {
               new GeneratingProducerNode(
                   "/producer/indymedia.nl/content.template",
-                  "${config.storageRoot}/content/${content.date.year}/${content.date.month}/${content.id}.inc"
+                  "${config.storageRoot}/content/${content.date.formatted.yyyy}/${content.date.formatted.MM}/${content.id}.inc"
               ),
               new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
-                    new GeneratingProducerNode(
-                        "/producer/indymedia.nl/article.template",
-                        "${config.storageRoot}/${language.code}/${content.date.year}/${content.date.month}/${content.id}.shtml"
-                    )
+                    new CompositeProducerNode( new ProducerNode[] {
+                      new GeneratingProducerNode(
+                          "/producer/indymedia.nl/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"
+                      )
+                    } )
                 )
               )
             } )
@@ -37,96 +43,110 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
     }
 
     contentNode.addVerb( "all", "is_published='1'", "" );
-    contentNode.addVerb( "all", "is_published='1' and is_produced='f'", "" );
-
-    aContentFactory.addFactory( new NodedProducerFactory( contentNode ) );
-
-
-/*
-    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"))));
-
-    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"))));
- */
-  }
+    contentNode.addVerb( "new", "is_published='1' and is_produced='f'", "" );
 
-  protected void setupStartPageFactory(CompositeProducerFactory aStartPageFactory) {
-    ProducerNode startPageNode = null;
+    aProducerNode.addSubNode( contentNode );
+  }
 
+  protected void setupStartPageFactory(CompositeProducerNode aProducerNode) {
     try {
-      startPageNode =
+      aProducerNode.addSubNode(
             new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
-                    "is_published='1' and to_article_type = 1", "date desc, webdb_create desc", 40,
-                new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
-                        "", "code", 10,
-                    new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
-                      new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
-                        new CompositeProducerNode( new ProducerNode[] {
-                          new GeneratingProducerNode(
-                              "/producer/indymedia.nl/start.template",
-                              "${config.storageRoot}/${language.code}/start.shtml"
-                          ),
-                          new GeneratingProducerNode(
-                              "/producer/indymedia.nl/newswire.template",
-                              "${config.storageRoot}/${language.code}/newswire.inc"
+                    "is_published='1' and to_article_type = 1", "date desc, webdb_create desc", 40, 0,
+              new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
+                            "", "code", 10, 0,
+                    new CompositeProducerNode( new ProducerNode[] {
+                        new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
+                          new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
+                              new GeneratingProducerNode(
+                                  "/producer/indymedia.nl/newswire.template",
+                                  "${config.storageRoot}/${language.code}/newswire.inc"
+                              )
                           )
-                        } )
-                      )
-                    )
-                )
-            );
+                        ),
+                        new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
+                                "is_published='1' and to_article_type = 2", "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(), "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",
+                                  new EvaluatedAssignmentProducerNode( "navinclude", "/producer/indymedia.nl/nav.template",
+                                  new EvaluatedAssignmentProducerNode( "newswireinclude", "/producer/indymedia.nl/newswire.template",
+                                  new EvaluatedAssignmentProducerNode( "featuresinclude", "/producer/indymedia.nl/features.template",
+                                    new GeneratingProducerNode(
+                                        "/producer/indymedia.nl/start.template",
+                                        "${config.storageRoot}/index.shtml"
+                                    )
+                                  )))))
+                                )
+                              )
+                            )
+                          )
+                        )
+                    })
+              )
+            )
+      );
     }
     catch (Throwable t) {
     }
-
-    aStartPageFactory.addFactory( new NodedProducerFactory( startPageNode ) );
-/*
-    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 setupSynchronizationFactory(CompositeProducerFactory aSynchronizationFactory) {
-    if(MirGlobal.getConfigBooleanProperty("Rsync")){
-      aSynchronizationFactory.addFactory(
-        new ScriptCallProducerFactory(MirGlobal.getConfigProperty("Rsync.Script.Path")));
+  protected void setupTopicsFactory(CompositeProducerNode aProducerNode) {
+    EntityBatchingProducerNode topicPageNode = null;
+
+    try {
+      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/indymedia.nl/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/indymedia.nl/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
+            )
+          )
+      );
     }
-    else {
-      NullProducerFactory nullFactory = new NullProducerFactory();
-      nullFactory.addVerb("run");
-      aSynchronizationFactory.addFactory(nullFactory);
+    catch (Throwable t) {
     }
   }
 
-  protected void setupStaticFactory(CompositeProducerFactory aStaticFactory) {
-    ProducerNode staticNode = null;
 
+  protected void setupStaticFactory(CompositeProducerNode aProducerNode) {
     try {
-      staticNode =
+      aProducerNode.addSubNode(
           new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
-                  "", "code", 10,
+                  "", "code", 10, 0,
               new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
                 new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                   new CompositeProducerNode( new ProducerNode[] {
@@ -158,15 +178,38 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
                         "/producer/indymedia.nl/articlepost.template",
                         "${config.storageRoot}/${language.code}/articlepost.shtml"
                     ),
+                    new AssignmentProducerNode( "staticinclude", "0",
+                      new EvaluatedAssignmentProducerNode( "topinclude", "/${language.code}/top.inc",
+                      new EvaluatedAssignmentProducerNode( "bottominclude", "/${language.code}/bottom.inc",
+                      new EvaluatedAssignmentProducerNode( "navinclude", "/${language.code}/nav.inc",
+                      new EvaluatedAssignmentProducerNode( "newswireinclude", "/${language.code}/newswire.inc",
+                      new EvaluatedAssignmentProducerNode( "featuresinclude", "/${language.code}/features.inc",
+                        new GeneratingProducerNode(
+                            "/producer/indymedia.nl/start.template",
+                            "${config.storageRoot}/${language.code}/start.shtml"
+                        )
+                      )))))
+                    ),
+                    new AssignmentProducerNode( "staticinclude", "0",
+                      new EvaluatedAssignmentProducerNode( "topinclude", "/${language.code}/top.inc",
+                      new EvaluatedAssignmentProducerNode( "bottominclude", "/${language.code}/bottom.inc",
+                      new EvaluatedAssignmentProducerNode( "navinclude", "/${language.code}/nav.inc",
+                      new EvaluatedAssignmentProducerNode( "newswireinclude", "/${language.code}/newswire.inc",
+                      new EvaluatedAssignmentProducerNode( "featuresinclude", "/try/${language.code}/features.inc",
+                        new GeneratingProducerNode(
+                            "/producer/indymedia.nl/start.template",
+                            "${config.storageRoot}/try/${language.code}/start.shtml"
+                        )
+                      )))))
+                    )
                   } )
                 )
               )
-          );
+          )
+      );
     }
     catch (Throwable t) {
     }
-
-    aStaticFactory.addFactory( new NodedProducerFactory( staticNode ) );
   }
 
   protected void setupFactories(Map aFactoriesMap ) {
@@ -177,11 +220,11 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
     try {
       node =
           new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
-                  "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10,
+                  "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10, 0,
             new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
-                      "", "webdb_create desc", 5,
+                      "", "webdb_create desc", 5, 0,
               new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
-                        "", "code", 10,
+                        "", "code", 10, 0,
                 new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
                   new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                       new GeneratingProducerNode(
@@ -202,11 +245,11 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
     try {
       node =
           new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(),
-                  "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10,
+                  "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10, 0,
             new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(),
-                      "", "webdb_create desc", 5,
+                      "", "webdb_create desc", 5, 0,
               new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(),
-                        "", "code", 10,
+                        "", "code", 10, 0,
                 new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "",
                   new ResourceBundleProducerNode("lang", "bundles.producer_${language.code}",
                       new GeneratingProducerNode(
@@ -222,23 +265,5 @@ public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer {
     catch (Throwable t) {
     }
     aFactoriesMap.put("featurestest", new NodedProducerFactory( node ) );
-
-/*
-    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")));
-*/
   }
 }