rebuilding head
[mir.git] / source / mir / generator / FreemarkerGenerator.java
index a786a71..d4a4ee7 100755 (executable)
 package mir.generator;
 
 import java.io.PrintWriter;
-import java.util.Arrays;
+import java.io.File;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Vector;
-
-import mir.log.LoggerWrapper;
-import mir.util.GeneratorFormatAdapters;
-import mir.util.RewindableIterator;
-
-import org.apache.commons.beanutils.MethodUtils;
-import org.apache.commons.beanutils.PropertyUtils;
 
 import freemarker.template.FileTemplateCache;
 import freemarker.template.SimpleScalar;
@@ -55,6 +48,11 @@ import freemarker.template.TemplateModel;
 import freemarker.template.TemplateModelException;
 import freemarker.template.TemplateModelRoot;
 import freemarker.template.TemplateScalarModel;
+import mir.log.LoggerWrapper;
+import mir.util.GeneratorFormatAdapters;
+import mir.util.RewindableIterator;
+import org.apache.commons.beanutils.MethodUtils;
+import org.apache.commons.beanutils.PropertyUtils;
 
 
 public class FreemarkerGenerator implements Generator {
@@ -91,7 +89,7 @@ public class FreemarkerGenerator implements Generator {
     return new IteratorAdapter(anIterator);
   }
 
-  private static TemplateMethodModel makeFunctionAdapter(Generator.GeneratorFunction aFunction) {
+  private static TemplateMethodModel makeFunctionAdapter(Generator.Function aFunction) {
     return new FunctionAdapter(aFunction);
   }
 
@@ -102,12 +100,13 @@ public class FreemarkerGenerator implements Generator {
   public static TemplateModel makeAdapter(Object anObject) throws TemplateModelException {
     if (anObject == null)
       return null;
+
     if (anObject instanceof TemplateModel)
       return (TemplateModel) anObject;
-    else if (anObject instanceof Generator.GeneratorFunction)
-      return makeFunctionAdapter((Generator.GeneratorFunction) anObject);
+    else if (anObject instanceof Generator.Function)
+      return makeFunctionAdapter((Generator.Function) anObject);
     else if (anObject instanceof Integer)
-      return makeStringAdapter(((Integer) anObject).toString());
+      return makeStringAdapter(anObject.toString());
     else if (anObject instanceof Boolean) {
       if (((Boolean) anObject).booleanValue())
         return makeStringAdapter("1");
@@ -122,14 +121,6 @@ public class FreemarkerGenerator implements Generator {
       return makeIteratorAdapter((Iterator) anObject);
     else if (anObject instanceof List)
       return makeIteratorAdapter(((List) anObject).iterator());
-               else if (anObject instanceof Object[]){
-                       if(((Object[])anObject).length <= 1){
-                               Object[] array = (Object[]) anObject;                           
-                               return makeAdapter(array[0]);
-                       } else {
-                               return makeIteratorAdapter(Arrays.asList((Object[]) anObject).iterator());                              
-                       }
-               }
     else if (anObject instanceof Number)
       return makeAdapter(new GeneratorFormatAdapters.NumberFormatAdapter((Number) anObject));
     else if (anObject instanceof Date)
@@ -189,7 +180,7 @@ public class FreemarkerGenerator implements Generator {
     private IteratorAdapter(Iterator anIterator) {
       iterator = anIterator;
 
-      valuesCache = new Vector();
+      valuesCache = new ArrayList();
       position=0;
 
 
@@ -257,7 +248,7 @@ public class FreemarkerGenerator implements Generator {
 
     private ListAdapter(List aList) {
       list = aList;
-      valuesCache = new Vector();
+      valuesCache = new ArrayList();
       position=0;
     }
 
@@ -307,9 +298,9 @@ public class FreemarkerGenerator implements Generator {
   }
 
   private static class FunctionAdapter implements TemplateMethodModel {
-    private Generator.GeneratorFunction function;
+    private Generator.Function function;
 
-    public FunctionAdapter(Generator.GeneratorFunction aFunction) {
+    public FunctionAdapter(Generator.Function aFunction) {
       function = aFunction;
     }
 
@@ -360,11 +351,11 @@ public class FreemarkerGenerator implements Generator {
     }
   }
 
-  public static class FreemarkerGeneratorLibrary implements GeneratorLibrary {
+  public static class FreemarkerGeneratorLibrary implements Library {
     private FileTemplateCache templateCache;
 
-    public FreemarkerGeneratorLibrary(String aTemplateRoot) {
-      templateCache = new FileTemplateCache( aTemplateRoot+"/" );
+    public FreemarkerGeneratorLibrary(File aTemplateRoot) {
+      templateCache = new FileTemplateCache(aTemplateRoot);
       templateCache.setLoadingPolicy(FileTemplateCache.LOAD_ON_DEMAND);
     }
 
@@ -372,22 +363,23 @@ public class FreemarkerGenerator implements Generator {
       Template template = (Template) templateCache.getItem(anIdentifier, "template");
 
       if (template==null) {
-        throw new GeneratorExc("FreemarkerGeneratorLibrary: Can't find template "+templateCache.getDirectory()+anIdentifier);
+        throw new GeneratorExc("FreemarkerGeneratorLibrary: Can't find template "+templateCache.getDirectory()+"/"+anIdentifier);
       }
 
       return new FreemarkerGenerator(template);
     }
   }
 
-  public static class FreemarkerGeneratorLibraryFactory implements GeneratorLibraryFactory {
-    private String basePath;
+  public static class FreemarkerGeneratorLibraryFactory implements LibraryFactory {
+    private File basePath;
 
-    public FreemarkerGeneratorLibraryFactory(String aBasePath) {
+    public FreemarkerGeneratorLibraryFactory(File aBasePath) {
       basePath = aBasePath;
     }
 
-    public GeneratorLibrary makeLibrary(String anInitializationString) {
-      return new FreemarkerGeneratorLibrary(basePath+anInitializationString);
+    public Library makeLibrary(String anInitializationString) {
+      // todo: the initialization string should be parsed
+      return new FreemarkerGeneratorLibrary(new File(basePath, anInitializationString));
     };
   }
 }