yet another rewrite of the producers...
[mir.git] / source / mircoders / producer / ContentProducer.java
index ec7b9d1..99902a5 100755 (executable)
@@ -1,141 +1,9 @@
-<<<<<<< ContentProducer.java
-package mircoders.producer;\r
-\r
-import java.io.*;\r
-import java.util.*;\r
-\r
-import mir.misc.*;\r
-import mir.entity.*;\r
-import mir.producer.*;\r
-import mir.generator.*;\r
-\r
-import mircoders.localizer.*;\r
-import mircoders.global.*;\r
-import mircoders.entity.*;\r
-\r
-import org.apache.struts.util.MessageResources;\r
-\r
-// @todo ML: the file that gets generated should be better configurable\r
-\r
-public class ContentProducer implements mir.producer.Producer {\r
-\r
-  private String generatorIdentifier;\r
-  private String resourceBundle;\r
-\r
-  private String outputFilePrefix;\r
-  private String outputFilePostfix;\r
-\r
-  EntityBrowser browser;\r
-\r
-  public ContentProducer(\r
-    EntityBrowser aBrowser,\r
-    String aGeneratorIdentifier,\r
-    String aResourceBundle,\r
-    String anOutputFilePrefix,\r
-    String anOutputFilePostfix) {\r
-\r
-    browser = aBrowser;\r
-    generatorIdentifier=aGeneratorIdentifier;\r
-    resourceBundle=aResourceBundle;\r
-    outputFilePrefix=anOutputFilePrefix;\r
-    outputFilePostfix=anOutputFilePostfix;\r
-  }\r
-\r
-  public void produce( PrintWriter aLogger ) throws ProducerException {\r
-    EntityContent content;\r
-\r
-    Map configMap = new HashMap();\r
-    Map generationValues = new HashMap();\r
-    Map dataMap = new HashMap();\r
-    String fileName;\r
-\r
-\r
-\r
-               configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));\r
-               configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));\r
-    configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));\r
-               configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));\r
-               configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));\r
-               configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));\r
-               configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));\r
-               configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));\r
-               configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));\r
-               configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));\r
-               configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));\r
-               configMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );\r
-    generationValues.put("config", configMap);\r
-\r
-               MessageResources messages = MessageResources.getMessageResources(resourceBundle);\r
-               generationValues.put("lang", new MessageMethodModel(null, messages) );\r
-               generationValues.put("data", dataMap);\r
-\r
-\r
-\r
-    try {\r
-      Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);\r
-\r
-      aLogger.println("ContentProducer.produce:<br>");\r
-      aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");\r
-\r
-      while (browser.hasNext()) {\r
-        content = (EntityContent) browser.next();\r
-        dataMap.put("content", content);\r
-\r
-        String date = content.getValue("date");\r
-\r
-        fileName = outputFilePrefix + "/" +\r
-                date.substring(0,4) + "/" + date.substring(4,6) + "/" +\r
-                content.getValue("id") + outputFilePostfix;\r
-\r
-        aLogger.println("fileName = " + fileName + "<br>");\r
-\r
-        try {\r
-          File file = new File(fileName);\r
-\r
-          File dir = new File(file.getParent());\r
-          if (!dir.exists()){\r
-            dir.mkdirs();\r
-          }\r
-\r
-          FileWriter fileWriter = new FileWriter(file);\r
-          PrintWriter printWriter = new PrintWriter(fileWriter);\r
-\r
-          aLogger.println("generating: " + fileName + "<br/>");\r
-\r
-          generator.generate(printWriter, generationValues, aLogger);\r
-          printWriter.close();\r
-          fileWriter.close();\r
-          content.setProduced(true);\r
-\r
-          aLogger.println("done generating: " + fileName + "<br/>");\r
-        }\r
-        catch (Exception e) {\r
-          aLogger.println("exception while generating " + fileName + ":<br/>");\r
-          aLogger.println(e.getMessage() + "<br/>");\r
-          e.printStackTrace(aLogger);\r
-          aLogger.flush();\r
-        }\r
-      }\r
-    }\r
-    catch (Exception e) {\r
-      aLogger.println("exception while generating:<br/>");\r
-      aLogger.println(e.getMessage() + "<br/>");\r
-      e.printStackTrace(aLogger);\r
-      aLogger.flush();\r
-    }\r
-\r
-    aLogger.println("ContentProducer.produce: done<br>");\r
-\r
-  }\r
-\r
-}\r
-\r
-=======
 package mircoders.producer;
 
 import java.io.*;
 import java.util.*;
 
+import mir.util.*;
 import mir.misc.*;
 import mir.entity.*;
 import mir.producer.*;
@@ -144,18 +12,17 @@ import mir.generator.*;
 import mircoders.localizer.*;
 import mircoders.global.*;
 import mircoders.entity.*;
+import mircoders.entity.adapter.*;
 
 import org.apache.struts.util.MessageResources;
 
-// @todo ML: the file that gets generated should be better configurable
-
 public class ContentProducer implements mir.producer.Producer {
 
   private String generatorIdentifier;
   private String resourceBundle;
 
-  private String outputFilePrefix;
-  private String outputFilePostfix;
+  private String outputFileExpression;
+
 
   EntityBrowser browser;
 
@@ -163,111 +30,80 @@ public class ContentProducer implements mir.producer.Producer {
     EntityBrowser aBrowser,
     String aGeneratorIdentifier,
     String aResourceBundle,
-    String anOutputFilePrefix,
-    String anOutputFilePostfix) {
+    String anOutputFileExpression) {
 
     browser = aBrowser;
-    generatorIdentifier=aGeneratorIdentifier;
-    resourceBundle=aResourceBundle;
-    outputFilePrefix=anOutputFilePrefix;
-    outputFilePostfix=anOutputFilePostfix;
+    generatorIdentifier = aGeneratorIdentifier;
+    resourceBundle = aResourceBundle;
+    outputFileExpression = anOutputFileExpression;
   }
 
-  public void produce( PrintWriter aLogger ) throws ProducerException {
+  public void produce( PrintWriter aLogger ) throws ProducerFailure {
     EntityContent content;
 
-    Map configMap = new HashMap();
     Map generationValues = new HashMap();
     Map dataMap = new HashMap();
     String fileName;
 
-
-
-               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("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
-    generationValues.put("config", configMap);
+    MirGlobal.localizer().producerTool().initializeGenerationValueSet(generationValues);
 
                MessageResources messages = MessageResources.getMessageResources(resourceBundle);
                generationValues.put("lang", new MessageMethodModel(null, messages) );
                generationValues.put("data", dataMap);
 
-
-
     try {
       Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
 
-      aLogger.println("ContentProducer.produce:<br>");
-      aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");
+      aLogger.println("ContentProducer.produce:");
+      aLogger.println("generatorIdentifier = " + generatorIdentifier);
 
       while (browser.hasNext()) {
         content = (EntityContent) browser.next();
-        dataMap.put("content", content);
+        dataMap.put("content", ContentAdapterDefinition.getInstance().makeEntityAdapter(content));
 
         String date = content.getValue("date");
 
+      // ML: this will be done more elegantly soon!
+        dataMap.put("contentmonth", date.substring(4,6));
+        dataMap.put("contentyear", date.substring(0,4));
+        dataMap.put("contentid", content.getValue("id"));
+
+        aLogger.println("unparsed fileName = " + outputFileExpression);
 
-        fileName = outputFilePrefix + "/" +
-                date.substring(0,4) + "/" + date.substring(4,6) + "/" +
-                content.getValue("id") + outputFilePostfix;
+        fileName = ParameterExpander.expandExpression(dataMap, outputFileExpression);
 
-        aLogger.println("fileName = " + fileName + "<br>");
-        aLogger.println("Yo1<br>");
+        aLogger.println("fileName = " + fileName);
 
         try {
-          File file = new File(fileName);
-          File dir = new File(file.getParent());
-          if (!dir.exists()){
-            dir.mkdirs();
-          }
-          FileWriter fileWriter = new FileWriter(file);
-          PrintWriter printWriter = new PrintWriter(fileWriter);
+          aLogger.println("generating: " + fileName);
 
-          aLogger.println("generating: " + fileName + "<br/>");
+          PrintWriter printWriter = MirGlobal.localizer().producerTool().openWriter(fileName);
 
-          aLogger.println("Yo2<br>");
           generator.generate(printWriter, generationValues, aLogger);
 
-          aLogger.println("Yo3<br>");
-          printWriter.close();
-          fileWriter.close();
-          aLogger.println("Yo4<br>");
-
-          aLogger.println("Yo5<br>");
+          MirGlobal.localizer().producerTool().closeWriter(printWriter);
 
           content.setProduced(true);
-          aLogger.println("Yo6<br>");
 
-          aLogger.println("done generating: " + fileName + "<br/>");
+          aLogger.println("done generating: " + fileName);
         }
         catch (Exception e) {
-          aLogger.println("exception while generating " + fileName + ":<br/>");
-          aLogger.println(e.getMessage() + "<br/>");
+          aLogger.println("exception while generating " + fileName + ":");
+          aLogger.println(e.getMessage());
           e.printStackTrace(aLogger);
           aLogger.flush();
         }
       }
     }
     catch (Exception e) {
-      aLogger.println("exception while generating:<br/>");
-      aLogger.println(e.getMessage() + "<br/>");
+      aLogger.println("exception while generating:");
+      aLogger.println(e.getMessage());
       e.printStackTrace(aLogger);
       aLogger.flush();
     }
 
-    aLogger.println("ContentProducer.produce: done<br>");
+    aLogger.println("ContentProducer.produce: done");
 
   }
 
 }
-
->>>>>>> 1.1.2.2