You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2010/03/13 14:32:33 UTC

svn commit: r922556 - in /tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker: ./ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tiles/ src/main/java/org/apache/tiles/autotag/ src/main/java/org/apache/tiles/autotag/freemar...

Author: apetrelli
Date: Sat Mar 13 13:32:32 2010
New Revision: 922556

URL: http://svn.apache.org/viewvc?rev=922556&view=rev
Log:
TILESSB-27
Added code generation of FreeMarker directive models.

Added:
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java   (with props)
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java   (with props)
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/fmModel.vm
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/repository.vm
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java   (with props)
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java   (with props)
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat
Modified:
    tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/pom.xml

Modified: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/pom.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/pom.xml?rev=922556&r1=922555&r2=922556&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/pom.xml (original)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/pom.xml Sat Mar 13 13:32:32 2010
@@ -10,4 +10,28 @@
   <version>1.0-SNAPSHOT</version>
   <name>Autotag - Freemarker support</name>
   <description>Generates code for Freemarker support.</description>
+  <dependencies>
+  	<dependency>
+  		<groupId>org.apache.tiles</groupId>
+  		<artifactId>tiles-autotag-core</artifactId>
+  		<version>1.0-SNAPSHOT</version>
+  	</dependency>
+  	<dependency>
+  		<groupId>org.apache.tiles</groupId>
+  		<artifactId>tiles-request-freemarker</artifactId>
+  		<version>1.0-SNAPSHOT</version>
+  	</dependency>
+  	<dependency>
+  		<groupId>junit</groupId>
+  		<artifactId>junit</artifactId>
+  		<version>4.8.1</version>
+  		<scope>test</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>commons-io</groupId>
+  		<artifactId>commons-io</artifactId>
+  		<version>1.4</version>
+  		<scope>test</scope>
+  	</dependency>
+  </dependencies>
 </project>
\ No newline at end of file

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java Sat Mar 13 13:32:32 2010
@@ -0,0 +1,28 @@
+package org.apache.tiles.autotag.freemarker;
+
+import java.io.File;
+
+import org.apache.tiles.autotag.generate.AbstractTemplateClassGenerator;
+import org.apache.tiles.autotag.model.TemplateClass;
+import org.apache.tiles.autotag.model.TemplateSuite;
+
+public class FMModelGenerator extends AbstractTemplateClassGenerator {
+
+    @Override
+    protected String getDirectoryName(File directory, String packageName,
+            TemplateSuite suite, TemplateClass clazz) {
+        return packageName.replaceAll("\\.", "/");
+    }
+
+    @Override
+    protected String getFilename(File directory, String packageName,
+            TemplateSuite suite, TemplateClass clazz) {
+        return clazz.getTagClassPrefix() + "FMModel.java";
+    }
+
+    @Override
+    protected String getTemplatePath(File directory, String packageName,
+            TemplateSuite suite, TemplateClass clazz) {
+        return "/org/apache/tiles/autotag/freemarker/fmModel.vm";
+    }
+}

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelGenerator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java Sat Mar 13 13:32:32 2010
@@ -0,0 +1,23 @@
+package org.apache.tiles.autotag.freemarker;
+
+import java.io.File;
+
+import org.apache.tiles.autotag.generate.AbstractTemplateSuiteGenerator;
+import org.apache.tiles.autotag.model.TemplateSuite;
+
+public class FMModelRepositoryGenerator extends AbstractTemplateSuiteGenerator {
+
+    protected String getTemplatePath(File directory, String packageName, TemplateSuite suite) {
+        return "/org/apache/tiles/autotag/freemarker/repository.vm";
+    }
+
+    protected String getFilename(File directory, String packageName, TemplateSuite suite) {
+        String name = suite.getName();
+        return name.substring(0, 1).toUpperCase() + name.substring(1) + "FMModelRepository.java";
+    }
+
+    protected String getDirectoryName(File directory, String packageName, TemplateSuite suite) {
+        return packageName.replaceAll("\\.", "/");
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGenerator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/fmModel.vm
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/fmModel.vm?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/fmModel.vm (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/fmModel.vm Sat Mar 13 13:32:32 2010
@@ -0,0 +1,68 @@
+package ${packageName};
+#*
+ * $Id: tiles-jsp.tld 836180 2009-11-14 14:00:02Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *#
+import java.io.IOException;
+import java.util.Map;
+
+#if(${clazz.hasBody()})
+import org.apache.tiles.autotag.core.runtime.ModelBody;
+#end
+import org.apache.tiles.freemarker.template.Body#if(!${clazz.hasBody()})less#{end}FMModel;
+import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
+
+import freemarker.template.TemplateModel;
+
+/**
+#foreach($line in $stringTool.splitOnNewlines(${clazz.documentation}))
+ * ${line}
+#end
+ */
+public class ${clazz.tagClassPrefix}FMModel extends Body#if(!${clazz.hasBody()})less#{end}FMModel {
+
+    /**
+     * The template model.
+     */
+    private ${clazz.name} model;
+
+    /**
+     * Constructor.
+     *
+     * @param model
+     *            The template model.
+     */
+    public ${clazz.tagClassPrefix}FMModel(${clazz.name} model) {
+        this.model = model;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(
+#foreach($parameter in ${clazz.parameters})
+            ($stringTool.getClassToCast(${parameter.type})) FreeMarkerUtil.getAsObject(parms.get("${parameter.exportedName}"), $stringTool.getDefaultValue(${parameter.type}, ${parameter.defaultValue}));
+#end
+                request#if(${clazz.hasBody()}), modelBody#end
+
+        );
+    }
+}

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/repository.vm
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/repository.vm?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/repository.vm (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/main/resources/org/apache/tiles/autotag/freemarker/repository.vm Sat Mar 13 13:32:32 2010
@@ -0,0 +1,59 @@
+package ${packageName};
+#*
+ * $Id: tiles-jsp.tld 836180 2009-11-14 14:00:02Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *#
+#foreach($clazz in ${suite.getTemplateClasses()})
+import ${clazz.name};
+#end
+
+/**
+#foreach($line in $stringTool.splitOnNewlines(${suite.documentation}))
+ * $line
+#end
+ */
+public class $stringTool.capitalizeFirstLetter(${suite.name})FMModelRepository {
+
+#foreach($clazz in ${suite.getTemplateClasses()})
+    /**
+     * The "${clazz.tagName}" directive.
+     */
+    private ${clazz.tagClassPrefix}FMModel ${clazz.tagName};
+
+#end
+    /**
+     * Constructor.
+     */
+    public TilesFMModelRepository() {
+#foreach($clazz in ${suite.getTemplateClasses()})
+        ${clazz.tagName} = new ${clazz.tagClassPrefix}FMModel(new ${clazz.name}());
+#end
+    }
+#foreach($clazz in ${suite.getTemplateClasses()})
+
+    /**
+     * Returns the "${clazz.tagName}" directive.
+     *
+     * @return The "${clazz.tagName}" directive.
+     */
+    public ${clazz.tagClassPrefix}FMModel get$stringTool.capitalizeFirstLetter(${clazz.tagName})() {
+        return ${clazz.tagName};
+    }
+#end
+}

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java Sat Mar 13 13:32:32 2010
@@ -0,0 +1,119 @@
+/**
+ *
+ */
+package org.apache.tiles.autotag.freemarker;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.tiles.autotag.core.runtime.ModelBody;
+import org.apache.tiles.autotag.model.TemplateClass;
+import org.apache.tiles.autotag.model.TemplateMethod;
+import org.apache.tiles.autotag.model.TemplateParameter;
+import org.apache.tiles.autotag.model.TemplateSuite;
+import org.apache.tiles.request.Request;
+import org.apache.velocity.app.Velocity;
+import org.junit.Test;
+
+/**
+ * Tests {@link TagClassGenerator}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class FMModelGeneratorTest {
+
+    /**
+     * Test method for {@link TagClassGenerator#generate(File, String, TemplateSuite, TemplateClass)}.
+     * @throws Exception If something goes wrong.
+     */
+    @Test
+    public void testGenerate() throws Exception {
+        FMModelGenerator generator = new FMModelGenerator();
+        File file = File.createTempFile("autotag", null);
+        file.delete();
+        file.mkdir();
+        file.deleteOnExit();
+        TemplateSuite suite = new TemplateSuite("tldtest", "Test for TLD docs.");
+
+        List<TemplateParameter> params = new ArrayList<TemplateParameter>();
+        TemplateParameter param = new TemplateParameter("one", "one", "java.lang.String", null, true);
+        param.setDocumentation("Parameter one.");
+        params.add(param);
+        param = new TemplateParameter("two", "two", "int", null, false);
+        param.setDocumentation("Parameter two.");
+        params.add(param);
+        param = new TemplateParameter("three", "three", "boolean", null, false);
+        param.setDocumentation("Parameter three.");
+        params.add(param);
+        param = new TemplateParameter("request", "request", Request.class.getName(), null, false);
+        param.setDocumentation("The request.");
+        params.add(param);
+        param = new TemplateParameter("modelBody", "modelBody", ModelBody.class.getName(), null, false);
+        param.setDocumentation("The body.");
+        params.add(param);
+        TemplateMethod executeMethod = new TemplateMethod("execute", params);
+
+        TemplateClass clazz = new TemplateClass("org.apache.tiles.autotag.template.DoStuffTemplate",
+                "doStuff", "DoStuff", executeMethod);
+        clazz.setDocumentation("Documentation of the DoStuff class.");
+
+        Properties props = new Properties();
+        InputStream propsStream = getClass().getResourceAsStream("/org/apache/tiles/autotag/velocity.properties");
+        props.load(propsStream);
+        propsStream.close();
+        Velocity.init(props);
+
+        generator.generate(file, "org.apache.tiles.autotag.freemarker.test", suite, clazz);
+
+        InputStream expected = getClass().getResourceAsStream("/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat");
+        File effectiveFile = new File(file, "/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.java");
+        assertTrue(effectiveFile.exists());
+        InputStream effective = new FileInputStream(effectiveFile);
+        assertTrue(IOUtils.contentEquals(effective, expected));
+        effective.close();
+        expected.close();
+
+        suite.addTemplateClass(clazz);
+        params = new ArrayList<TemplateParameter>();
+        param = new TemplateParameter("one", "one", "java.lang.Double", null, true);
+        param.setDocumentation("Parameter one.");
+        params.add(param);
+        param = new TemplateParameter("two", "two", "float", null, false);
+        param.setDocumentation("Parameter two.");
+        params.add(param);
+        param = new TemplateParameter("three", "three", "java.util.Date", null, false);
+        param.setDocumentation("Parameter three.");
+        params.add(param);
+        param = new TemplateParameter("request", "request", Request.class.getName(), null, false);
+        param.setDocumentation("The request.");
+        params.add(param);
+        executeMethod = new TemplateMethod("execute", params);
+
+        clazz = new TemplateClass("org.apache.tiles.autotag.template.DoStuffNoBodyTemplate",
+                "doStuffNoBody", "DoStuffNoBody", executeMethod);
+        clazz.setDocumentation("Documentation of the DoStuffNoBody class.");
+
+        suite.addTemplateClass(clazz);
+
+        generator.generate(file, "org.apache.tiles.autotag.freemarker.test", suite, clazz);
+
+        expected = getClass().getResourceAsStream("/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat");
+        effectiveFile = new File(file, "/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.java");
+        assertTrue(effectiveFile.exists());
+        effective = new FileInputStream(effectiveFile);
+        assertTrue(IOUtils.contentEquals(effective, expected));
+        effective.close();
+        expected.close();
+
+        FileUtils.deleteDirectory(file);
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java Sat Mar 13 13:32:32 2010
@@ -0,0 +1,109 @@
+/**
+ *
+ */
+package org.apache.tiles.autotag.freemarker;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.tiles.autotag.core.runtime.ModelBody;
+import org.apache.tiles.autotag.model.TemplateClass;
+import org.apache.tiles.autotag.model.TemplateMethod;
+import org.apache.tiles.autotag.model.TemplateParameter;
+import org.apache.tiles.autotag.model.TemplateSuite;
+import org.apache.tiles.request.Request;
+import org.apache.velocity.app.Velocity;
+import org.junit.Test;
+
+/**
+ * Tests {@link TLDGenerator}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class FMModelRepositoryGeneratorTest {
+
+    /**
+     * Test method for {@link org.apache.tiles.autotag.jsp.TLDGenerator#generate(java.io.File, java.lang.String, org.apache.tiles.autotag.model.TemplateSuite)}.
+     * @throws Exception If something goes wrong.
+     */
+    @Test
+    public void testGenerate() throws Exception {
+        FMModelRepositoryGenerator generator = new FMModelRepositoryGenerator();
+        File file = File.createTempFile("autotag", null);
+        file.delete();
+        file.mkdir();
+        file.deleteOnExit();
+        TemplateSuite suite = new TemplateSuite("tldtest", "Test for TLD docs.");
+
+        List<TemplateParameter> params = new ArrayList<TemplateParameter>();
+        TemplateParameter param = new TemplateParameter("one", "one", "java.lang.String", null, true);
+        param.setDocumentation("Parameter one.");
+        params.add(param);
+        param = new TemplateParameter("two", "two", "int", null, false);
+        param.setDocumentation("Parameter two.");
+        params.add(param);
+        param = new TemplateParameter("three", "three", "long", null, false);
+        param.setDocumentation("Parameter three.");
+        params.add(param);
+        param = new TemplateParameter("request", "request", Request.class.getName(), null, false);
+        param.setDocumentation("The request.");
+        params.add(param);
+        param = new TemplateParameter("modelBody", "modelBody", ModelBody.class.getName(), null, false);
+        param.setDocumentation("The body.");
+        params.add(param);
+        TemplateMethod executeMethod = new TemplateMethod("execute", params);
+
+        TemplateClass clazz = new TemplateClass("org.apache.tiles.autotag.template.DoStuffTemplate",
+                "doStuff", "DoStuff", executeMethod);
+        clazz.setDocumentation("Documentation of the DoStuff class");
+
+        suite.addTemplateClass(clazz);
+        params = new ArrayList<TemplateParameter>();
+        param = new TemplateParameter("one", "one", "java.lang.Double", null, true);
+        param.setDocumentation("Parameter one.");
+        params.add(param);
+        param = new TemplateParameter("two", "two", "float", null, false);
+        param.setDocumentation("Parameter two.");
+        params.add(param);
+        param = new TemplateParameter("three", "three", "java.util.Date", null, false);
+        param.setDocumentation("Parameter three.");
+        params.add(param);
+        param = new TemplateParameter("request", "request", Request.class.getName(), null, false);
+        param.setDocumentation("The request.");
+        params.add(param);
+        executeMethod = new TemplateMethod("execute", params);
+
+        clazz = new TemplateClass("org.apache.tiles.autotag.template.DoStuffNoBodyTemplate",
+                "doStuffNoBody", "DoStuffNoBody", executeMethod);
+        clazz.setDocumentation("Documentation of the DoStuffNoBody class");
+
+        suite.addTemplateClass(clazz);
+
+        Properties props = new Properties();
+        InputStream propsStream = getClass().getResourceAsStream("/org/apache/tiles/autotag/velocity.properties");
+        props.load(propsStream);
+        propsStream.close();
+        Velocity.init(props);
+
+        generator.generate(file, "org.apache.tiles.autotag.freemarker.test", suite);
+
+        InputStream expected = getClass().getResourceAsStream("/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat");
+        File effectiveFile = new File(file, "/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.java");
+        assertTrue(effectiveFile.exists());
+        InputStream effective = new FileInputStream(effectiveFile);
+        assertTrue(IOUtils.contentEquals(effective, expected));
+        effective.close();
+        expected.close();
+
+        FileUtils.deleteDirectory(file);
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/java/org/apache/tiles/autotag/freemarker/FMModelRepositoryGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffFMModel.javat Sat Mar 13 13:32:32 2010
@@ -0,0 +1,44 @@
+package org.apache.tiles.autotag.freemarker.test;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.tiles.autotag.core.runtime.ModelBody;
+import org.apache.tiles.freemarker.template.BodyFMModel;
+import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
+
+import freemarker.template.TemplateModel;
+
+/**
+ * Documentation of the DoStuff class.
+ */
+public class DoStuffFMModel extends BodyFMModel {
+
+    /**
+     * The template model.
+     */
+    private org.apache.tiles.autotag.template.DoStuffTemplate model;
+
+    /**
+     * Constructor.
+     *
+     * @param model
+     *            The template model.
+     */
+    public DoStuffFMModel(org.apache.tiles.autotag.template.DoStuffTemplate model) {
+        this.model = model;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(
+            (java.lang.String) FreeMarkerUtil.getAsObject(parms.get("one"), null);
+            (java.lang.Integer) FreeMarkerUtil.getAsObject(parms.get("two"), 0);
+            (java.lang.Boolean) FreeMarkerUtil.getAsObject(parms.get("three"), false);
+                request, modelBody
+        );
+    }
+}

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/DoStuffNoBodyFMModel.javat Sat Mar 13 13:32:32 2010
@@ -0,0 +1,43 @@
+package org.apache.tiles.autotag.freemarker.test;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.tiles.freemarker.template.BodylessFMModel;
+import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
+
+import freemarker.template.TemplateModel;
+
+/**
+ * Documentation of the DoStuffNoBody class.
+ */
+public class DoStuffNoBodyFMModel extends BodylessFMModel {
+
+    /**
+     * The template model.
+     */
+    private org.apache.tiles.autotag.template.DoStuffNoBodyTemplate model;
+
+    /**
+     * Constructor.
+     *
+     * @param model
+     *            The template model.
+     */
+    public DoStuffNoBodyFMModel(org.apache.tiles.autotag.template.DoStuffNoBodyTemplate model) {
+        this.model = model;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(
+            (java.lang.Double) FreeMarkerUtil.getAsObject(parms.get("one"), null);
+            (java.lang.Float) FreeMarkerUtil.getAsObject(parms.get("two"), 0.0f);
+            (java.util.Date) FreeMarkerUtil.getAsObject(parms.get("three"), null);
+                request
+        );
+    }
+}

Added: tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat?rev=922556&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat (added)
+++ tiles/sandbox/trunk/tiles-autotag/tiles-autotag-freemarker/src/test/resources/org/apache/tiles/autotag/freemarker/test/TldtestFMModelRepository.javat Sat Mar 13 13:32:32 2010
@@ -0,0 +1,46 @@
+package org.apache.tiles.autotag.freemarker.test;
+
+import org.apache.tiles.autotag.template.DoStuffTemplate;
+import org.apache.tiles.autotag.template.DoStuffNoBodyTemplate;
+
+/**
+ * Test for TLD docs.
+ */
+public class TldtestFMModelRepository {
+
+    /**
+     * The "doStuff" directive.
+     */
+    private DoStuffFMModel doStuff;
+
+    /**
+     * The "doStuffNoBody" directive.
+     */
+    private DoStuffNoBodyFMModel doStuffNoBody;
+
+    /**
+     * Constructor.
+     */
+    public TilesFMModelRepository() {
+        doStuff = new DoStuffFMModel(new org.apache.tiles.autotag.template.DoStuffTemplate());
+        doStuffNoBody = new DoStuffNoBodyFMModel(new org.apache.tiles.autotag.template.DoStuffNoBodyTemplate());
+    }
+
+    /**
+     * Returns the "doStuff" directive.
+     *
+     * @return The "doStuff" directive.
+     */
+    public DoStuffFMModel getDoStuff() {
+        return doStuff;
+    }
+
+    /**
+     * Returns the "doStuffNoBody" directive.
+     *
+     * @return The "doStuffNoBody" directive.
+     */
+    public DoStuffNoBodyFMModel getDoStuffNoBody() {
+        return doStuffNoBody;
+    }
+}