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;
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 {
return new IteratorAdapter(anIterator);
}
- private static TemplateMethodModel makeFunctionAdapter(Generator.GeneratorFunction aFunction) {
+ private static TemplateMethodModel makeFunctionAdapter(Generator.Function aFunction) {
return new FunctionAdapter(aFunction);
}
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");
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)
private IteratorAdapter(Iterator anIterator) {
iterator = anIterator;
- valuesCache = new Vector();
+ valuesCache = new ArrayList();
position=0;
private ListAdapter(List aList) {
list = aList;
- valuesCache = new Vector();
+ valuesCache = new ArrayList();
position=0;
}
}
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;
}
}
}
- 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);
}
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));
};
}
}