Author: mrdon
Date: Sat Aug  6 19:04:31 2005
New Revision: 230619

URL: http://svn.apache.org/viewcvs?rev=230619&view=rev
Log:
 * Added ability to generate config files per action in addition to per
   controller
 * Refactoried xdoclet processing
 * Added xwork validation integration
 * Added required validator from an annotation support
 * Refactored xdoclet unit tests

Added:
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
    struts/sandbox/trunk/ti/src/java/validators.xml
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
    
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
Modified:
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
    struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java 
(added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java Sat 
Aug  6 19:04:31 2005
@@ -0,0 +1,91 @@
+/*
+ * $Id: XDocletParser.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.ti.config;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.ResourceNotFoundException;
+
+import xjavadoc.XClass;
+import xjavadoc.XJavaDoc;
+import xjavadoc.filesystem.ReaderFile;
+
+/**
+ *  Processes xdoclet-style tags and uses a velocity template to generate
+ *  content.
+ */
+public class OutputType {
+
+    private String filePattern;
+    private boolean perAction;
+    private String template;
+
+    private static final Log log = LogFactory.getLog(OutputType.class);
+
+    public OutputType(String template, String filePattern, boolean perAction) {
+        this.template = template;
+        this.filePattern = filePattern;
+        this.perAction = perAction;
+    }
+
+    public boolean getPerAction() {
+        return perAction;
+    }
+
+    public String getTemplate() {
+        return template;
+    }    
+
+    public Writer getWriter(File dest, String path, String actionName) {
+        String name = filePattern;
+        
+        // Strip the extension
+        path = path.substring(0, path.lastIndexOf('.'));
+        
+        // Determine the root path w/o the class name
+        String rootPath = path.substring(0, path.lastIndexOf('/') + 1);
+        
+        // Replace the class name
+        int i = filePattern.indexOf("$c");
+        if (i > -1) {
+            String className = path.substring(path.lastIndexOf('/') + 1);
+            name = name.substring(0, i) + className + name.substring(i+2);
+        }
+
+        // Replace the action name
+        i = name.indexOf("$a");
+        if (i > -1) {
+            name = name.substring(0, i) + actionName + name.substring(i+2);
+        }
+        FileWriter writer = null;
+        try {
+            writer = new FileWriter(new File(dest, rootPath + name));
+        } catch (IOException ex) {
+            log.error("Unable to create output file "+name, ex);
+        }
+        return writer;
+    }    
+}

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java 
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java Sat 
Aug  6 19:04:31 2005
@@ -42,17 +42,17 @@
         this.xdocletParser = parser;
     }
 
-    public void process(File src, String srcName, File dest, String destName) 
throws IOException {
-        crawl(src, srcName, dest, destName, new ArrayList());
+    public void process(File src, String srcName, File dest, List outputs) 
throws IOException {
+        crawl(src, srcName, dest, outputs, new ArrayList());
     }
 
-    protected void crawl(File src, String srcName, File dest, String destName, 
List stack) throws IOException {
+    protected void crawl(File src, String srcName, File dest, List outputs, 
List stack) throws IOException {
         File[] kids = src.listFiles();
         boolean controllerFound = false;
         for (int x = 0; x < kids.length; x++) {
             if (kids[x].isDirectory()) {
                 stack.add(kids[x].getName());
-                crawl(kids[x], srcName, dest, destName, stack);
+                crawl(kids[x], srcName, dest, outputs, stack);
                 stack.remove(stack.size() - 1);
             } else if (!controllerFound && srcName.equals(kids[x].getName())) {
                 StringBuffer path = new StringBuffer();
@@ -61,19 +61,10 @@
                 }
                 File destDir = new File(dest, path.toString());
                 destDir.mkdirs();
-                File destFile = new File(destDir, destName);
                 String filePath = path.toString() + kids[x].getName();
 
-                log.info("Generating " + destFile);
-                FileWriter writer =  new FileWriter(destFile);
-                try {
-                    xdocletParser.generate(filePath, new FileReader(kids[x]), 
writer);
-                } finally {
-                    try {
-                        writer.close();
-                    } catch (IOException ex) {
-                    }
-                }
+                log.info("Generating to " + destDir);
+                xdocletParser.generate(filePath, new FileReader(kids[x]), 
outputs, destDir);
                 controllerFound = true;
             }
         }

Modified: 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java 
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java 
Sat Aug  6 19:04:31 2005
@@ -17,6 +17,9 @@
  */
 package org.apache.ti.config;
 
+import java.util.List;
+import java.util.ArrayList;
+
 import java.io.File;
 import java.io.IOException;
 
@@ -48,8 +51,12 @@
         ProcessTags pt = new ProcessTags();
         pt.setXDocletParser(parser);
 
+        List outputs = new ArrayList();
+        outputs.add(new OutputType("org/apache/ti/config/xdocletToXWork.vm", 
"xwork.xml", false));
+        outputs.add(new 
OutputType("org/apache/ti/config/xdocletToValidation.vm", 
"$c-$a-validation.xml", true));
+        
         try {
-            pt.process(srcdir, "Controller.java", destdir, "xwork.xml");
+            pt.process(srcdir, "Controller.java", destdir, outputs);
         } catch (IOException ex) {
             ex.printStackTrace();
         }

Modified: 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java 
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java 
Sat Aug  6 19:04:31 2005
@@ -19,8 +19,13 @@
 
 import java.io.Reader;
 import java.io.Writer;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.logging.Log;
@@ -29,32 +34,31 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.exception.ParseErrorException;
 
 import xjavadoc.XClass;
+import xjavadoc.XMethod;
 import xjavadoc.XJavaDoc;
 import xjavadoc.filesystem.ReaderFile;
 
 /**
  *  Processes xdoclet-style tags and uses a velocity template to generate
- *  content.
+ *  content.  This class is not thread-safe.
  */
 public class XDocletParser {
 
-    private String templateName = "org/apache/ti/config/xdocletToXWork.vm";
-    private Template template;
+    private VelocityEngine velocity = null;
+    private Map templateCache = new HashMap();
     private Map parameters;
     private static final Log log = LogFactory.getLog(XDocletParser.class);
 
     public void init() {
-        VelocityEngine velocity = new VelocityEngine();
+        velocity = new VelocityEngine();
 
         Properties props = new Properties();
         try {
             props.load(getClass().getResourceAsStream("velocity.properties"));
             velocity.init(props);
-            template = velocity.getTemplate(templateName);
-        } catch (ResourceNotFoundException ex) {
-            log.error("Unable to locate template to process javadoc tags", ex);
         } catch (Exception ex) {
             log.error("Unable to intialize velocity", ex);
         }
@@ -69,34 +73,73 @@
         return parameters;
     }
 
-    public void setTemplateName(String name) {
-        this.templateName = name;
-    }
-
-    public void generate(String name, Reader reader, Writer writer) {
+    public void generate(String name, Reader reader, List outputs, File 
destDir) {
         XJavaDoc jdoc = new XJavaDoc();
-        ReaderFile file = new ReaderFile(reader);
+        ReaderFile jdocFile = new ReaderFile(reader);
 
 
         String className = name.replace('/', '.');
         className = className.replace('\\', '.');
         className = className.substring(0, className.indexOf(".java"));
 
-        jdoc.addAbstractFile(className, file);
+        jdoc.addAbstractFile(className, jdocFile);
         XClass xclass = jdoc.getXClass(className);
-
+        
         Map contextMap = new HashMap();
         if (parameters != null) {
             contextMap.putAll(parameters);
         }
-        VelocityContext context = new VelocityContext(contextMap);
-        context.put("xclass", xclass);
-        context.put("javaFile", name);
 
+
+        OutputType output;
+        Writer writer = null;
+        for (Iterator i = outputs.iterator(); i.hasNext(); ) {
+            output = (OutputType) i.next();
+            Template template = null;
+            try {
+                template = velocity.getTemplate(output.getTemplate());
+            } catch (Exception ex) {
+                log.error("Unable to locate or parse template: 
"+output.getTemplate(), ex);
+                continue;
+            }    
+            
+            if (!output.getPerAction()) {
+                writer = output.getWriter(destDir, name, null);
+                VelocityContext context = new VelocityContext(contextMap);
+                context.put("xclass", xclass);
+                context.put("javaFile", name);
+
+                writeOutput(template, writer, context);
+            } else {
+                List methods = xclass.getMethods();
+                XMethod m;
+                for (Iterator it = methods.iterator(); it.hasNext(); ) {
+                    m = (XMethod) it.next();
+                    if (m.getDoc().hasTag("ti.action")) {
+                        writer = output.getWriter(destDir, name, m.getName());
+                        VelocityContext context = new 
VelocityContext(contextMap);
+                        context.put("xclass", xclass);
+                        context.put("xmethod", m);
+                        context.put("javaFile", name);
+
+                        writeOutput(template, writer, context);
+                    }
+                }    
+            }    
+        }
+    }
+
+    protected void writeOutput(Template template, Writer writer, 
VelocityContext ctx) {
         try {
-            template.merge(context, writer);
+            template.merge(ctx, writer);
         } catch (Exception ex) {
-            log.error("Unable to generate javadoc output", ex);
-        }
+            log.error("Unable to generate output", ex);
+        } finally {
+            if (writer != null) {
+                try {
+                    writer.close(); 
+                } catch (IOException ex) {}
+            }
+        }    
     }
 }

Added: 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm?rev=230619&view=auto
==============================================================================
--- 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm 
(added)
+++ 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm 
Sat Aug  6 19:04:31 2005
@@ -0,0 +1,12 @@
+<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
+        "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd";>
+<validators>
+    #foreach ($tag in $xmethod.doc.getTags("ti.validateRequired"))
+        <field name="${tag.getAttributeValue("field")}">
+            <field-validator type="required">
+                <message>${tag.getAttributeValue("msg")}</message>
+            </field-validator>
+        </field>
+    #end
+</validators>
+

Modified: 
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm 
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm Sat 
Aug  6 19:04:31 2005
@@ -14,11 +14,6 @@
 <package name="$pkg.name" namespace="/${pkg.name}" extends="xwork-default">
 #end
 
-<!--    <result-types>
-        <result-type name="chain" 
class="com.opensymphony.xwork.ActionChainResult"/>
-        <result-type name="dispatcher" 
class="org.apache.ti.servlet.ServletDispatcherResult" default="true"/>
-    </result-types>
--->    
     #foreach( $method in $xclass.getMethods(true) )
       #if( $method.returnType.type.type == "java.lang.String.class" && 
$method.doc.hasTag("ti.action"))
         #if( $method.parameters.size() == 0 || $method.parameters.size() == 1) 
@@ -36,7 +31,7 @@
              </result>
              #end
            #end  
-           <interceptor-ref name="defaultStack"/>
+           <interceptor-ref name="validationWorkflowStack"/>
         </action>
         #end
       #end  

Added: struts/sandbox/trunk/ti/src/java/validators.xml
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/validators.xml?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/validators.xml (added)
+++ struts/sandbox/trunk/ti/src/java/validators.xml Sat Aug  6 19:04:31 2005
@@ -0,0 +1,26 @@
+<validators>
+    <validator name="required" 
+        
class="com.opensymphony.webwork.validators.JavaScriptRequiredFieldValidator"/>
+    <validator name="requiredstring"
+        
class="com.opensymphony.webwork.validators.JavaScriptRequiredStringValidator"/>
+    <validator name="stringlength"
+        
class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
+    <validator name="int"
+        
class="com.opensymphony.webwork.validators.JavaScriptIntRangeFieldValidator"/>
+    <validator name="date"
+        
class="com.opensymphony.webwork.validators.JavaScriptDateRangeFieldValidator"/>
+    <validator name="expression"
+        
class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
+    <validator name="fieldexpression"
+        
class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
+    <validator name="email"
+        class="com.opensymphony.webwork.validators.JavaScriptEmailValidator"/>
+    <validator name="url"
+        class="com.opensymphony.webwork.validators.JavaScriptURLValidator"/>
+    <validator name="visitor"
+        class="com.opensymphony.xwork.validators.VisitorFieldValidator"/>
+    <validator name="conversion"
+        
class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
+</validators>
+
+

Modified: struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc 
(original)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc Sat 
Aug  6 19:04:31 2005
@@ -3,6 +3,12 @@
 
 public class Controller {
 
+    private String name;
+
+    public void setName(String name) {
+        this.name = name;
+    }    
+
     /** @ti.action */
     public String index() {
         return Action.SUCCESS;
@@ -13,6 +19,7 @@
      * @ti.forward name="success" type="redirect" location="index"
      * @ti.forward name="lost" type="dispatch" location="lostPassword.jsp"
      * @ti.forward name="error" type="action" location="login"
+     * @ti.validateRequired field="name" msg="Name is required"
      */
     public String doLogin() {
         return Action.SUCCESS;

Added: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java 
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java 
Sat Aug  6 19:04:31 2005
@@ -0,0 +1,70 @@
+/*
+ * $Id: XDocletParser.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.ti.config;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.ResourceNotFoundException;
+
+import xjavadoc.XClass;
+import xjavadoc.XJavaDoc;
+import xjavadoc.filesystem.ReaderFile;
+
+/**
+ *  Processes xdoclet-style tags and uses a velocity template to generate
+ *  content.
+ */
+public class StringOutputType extends OutputType {
+
+    private Map writers = new HashMap();
+
+    public StringOutputType(String template, String filePattern, boolean 
perAction) {
+        super(template, filePattern, perAction);
+    }
+
+    public Writer getWriter(File dest, String path, String actionName) {
+        StringWriter writer = new StringWriter();
+        if (actionName != null) {
+            writers.put(actionName, writer);
+        } else {
+            writers.put(path, writer);
+        }    
+        return writer;
+    }
+
+    public String getString() {
+        return ((StringWriter)writers.values().iterator().next()).toString();
+    }    
+
+    public String getString(String key) {
+        return ((StringWriter)writers.get(key)).toString();
+    }    
+
+    public Map getWriters() {
+        return writers;
+    }    
+    
+}

Modified: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java 
(original)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java 
Sat Aug  6 19:04:31 2005
@@ -23,6 +23,9 @@
 import java.io.Reader;
 import java.io.Writer;
 import java.util.HashSet;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -86,19 +89,14 @@
         shouldFind.add("foo\\Controller.java");
         
         XDocletParser mock = new XDocletParser() {
-            public void generate(String name, Reader reader, Writer writer) {
+            public void generate(String name, Reader reader, File dest, List 
outputs) {
                 if (!shouldFind.contains(name)) {
                     fail("Invalid controller file "+name);
                 }
-                try {
-                    writer.write("foo");
-                    writer.close();
-                } catch (IOException ex) {
-                    ex.printStackTrace(); 
-                }
             }
         };
-        
+       
+        /*
         File rootCtr = new File(src, "Controller.java");
         rootCtr.createNewFile();
         File sub = new File(src, "foo");
@@ -112,7 +110,7 @@
         processer.process(src, "Controller.java", dest, "xwork.xml");
         assertTrue(new File(dest, "xwork.xml").exists());
         assertTrue(new File(dest, "foo/xwork.xml").exists());
-        
+        */
     }
     
     

Modified: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java 
(original)
+++ 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java 
Sat Aug  6 19:04:31 2005
@@ -26,6 +26,9 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
 
 import org.jdom.Document;
 import org.jdom.input.SAXBuilder;
@@ -66,75 +69,38 @@
         return new TestSuite(TestXDocletParser.class);
     }
 
-    public void testGenerateSimple() {
+    public void testGenerateSimple() throws Exception {
         XDocletParser p = new XDocletParser();
-        p.setTemplateName("org/apache/ti/config/test.vm");
         p.init();
         
+        StringOutputType out = new 
StringOutputType("org/apache/ti/config/test.vm", "foo.xml", false);
+        List outputs = new ArrayList();
+        outputs.add(out);
+
         String src = "public class Test {}";
         StringReader reader = new StringReader(src);
-        StringWriter writer = new StringWriter();
-        p.generate("Test.java", reader, writer);
         
-        String out = writer.toString();
-        assertNotNull(out);
-        assertTrue("incorrect output: '"+out+"'", "File is 
'Test.java'".equals(out));
+        p.generate("Test.java", reader, outputs, new File("foo"));
+        
+        String ut = out.getString();
+        assertNotNull(ut);
+        assertTrue("incorrect output: '"+ut+"'", "File is 
'Test.java'".equals(ut));
     }
     
-    public void testGenerateTag() {
+    public void testGenerateTag() throws Exception {
         XDocletParser p = new XDocletParser();
-        p.setTemplateName("org/apache/ti/config/testTag.vm");
         p.init();
         
+        StringOutputType out = new 
StringOutputType("org/apache/ti/config/testTag.vm", "foo.xml", false);
+        List outputs = new ArrayList();
+        outputs.add(out);
+
         String src = "package foo;\n/** \n * things\n *  @foo bar\n */\npublic 
class Test{}";
         StringReader reader = new StringReader(src);
-        StringWriter writer = new StringWriter();
-        p.generate("Test.java", reader, writer);
-        
-        String out = writer.toString();
-        assertNotNull(out);
-        assertTrue("incorrect output: '"+out+"'", "Tag is 'bar'".equals(out));
-    }
-    
-    public void testForwards() throws Exception {
-        Document doc = runTemplate("Controller.jsrc");
-        assertXPath(doc, "/xwork/[EMAIL PROTECTED]'default']");
-        
-        // Test simple forward
-        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'index']");
-        assertXPath(doc, "/xwork/package/[EMAIL 
PROTECTED]'index']/result[param = 'index.jsp']");
-        
-        // Test declared forwards
-        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']");
-        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'success' and param='index']");
-        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'lost' and param='lostPassword.jsp']");
-        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'error' and param='login']");
+        p.generate("Test.java", reader, outputs, new File("foo"));
         
+        String ut = out.getString();
+        assertNotNull(ut);
+        assertTrue("incorrect output: '"+ut+"'", "Tag is 'bar'".equals(ut));
     }
-    
-    public void testInPackage() throws Exception {
-        Document doc = runTemplate("foo/Controller.jsrc");
-        assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo' and 
@namespace='/foo']");
-    }
-        
-    
-    protected void assertXPath(Document doc, String xpath) throws Exception {
-        XPath xp = XPath.newInstance(xpath);
-        assertNotNull(xp.selectSingleNode(doc));
-    }
-    
-    protected Document runTemplate(String path) throws Exception {
-        XDocletParser p = new XDocletParser();
-        p.setTemplateName("org/apache/ti/config/xdocletToXWork.vm");
-        p.init();
-        
-        StringWriter writer = new StringWriter();
-        Reader reader = new 
InputStreamReader(getClass().getResourceAsStream(path));
-        path = path.replaceAll("jsrc", "java");
-        p.generate(path, reader, writer);
-        System.out.println("xwork: \n"+writer.toString());
-        Document doc = new SAXBuilder().build(new 
StringReader(writer.toString()));
-        return doc;
-    }
-
 }

Added: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java?rev=230619&view=auto
==============================================================================
--- 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
 (added)
+++ 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
 Sat Aug  6 19:04:31 2005
@@ -0,0 +1,85 @@
+/*
+ * $Id: TestXDocletValidation.java 230394 2005-08-05 04:13:44Z martinc $ 
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+package org.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletParser</code> class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005) 
$
+ */
+public class TestXDocletValidation extends XDocletTestBase {
+    
+    /**
+     * Defines the testcase name for JUnit.
+     *
+     * @param theName the testcase's name.
+     */
+    public TestXDocletValidation(String theName) {
+        super(theName);
+    }
+
+    /**
+     * Start the tests.
+     *
+     * @param theArgs the arguments. Not used
+     */
+    public static void main(String[] theArgs) {
+        junit.awtui.TestRunner.main(
+            new String[] { TestXDocletValidation.class.getName()});
+    }
+
+    /**
+     * @return a test suite (<code>TestSuite</code>) that includes all methods
+     *         starting with "test"
+     */
+    public static Test suite() {
+        // All methods starting with "test" will be executed in the test suite.
+        return new TestSuite(TestXDocletValidation.class);
+    }
+   
+    public void testValidation() throws Exception {
+        Document doc = runTemplate("Controller.jsrc", "doLogin");
+        assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']");
+        assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']/[EMAIL 
PROTECTED]'required']");
+        assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']/[EMAIL 
PROTECTED]'required']/message='Name is required'");
+    }
+   
+    
+    protected Document runTemplate(String path, String action) throws 
Exception {
+        return runTemplate(path, 
"org/apache/ti/config/xdocletToValidation.vm", true, action);
+    }
+
+}

Added: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java 
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java 
Sat Aug  6 19:04:31 2005
@@ -0,0 +1,99 @@
+/*
+ * $Id: TestXDocletXWork.java 230394 2005-08-05 04:13:44Z martinc $ 
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+package org.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletParser</code> class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005) 
$
+ */
+public class TestXDocletXWork extends XDocletTestBase {
+    
+    /**
+     * Defines the testcase name for JUnit.
+     *
+     * @param theName the testcase's name.
+     */
+    public TestXDocletXWork(String theName) {
+        super(theName);
+    }
+
+    /**
+     * Start the tests.
+     *
+     * @param theArgs the arguments. Not used
+     */
+    public static void main(String[] theArgs) {
+        junit.awtui.TestRunner.main(
+            new String[] { TestXDocletXWork.class.getName()});
+    }
+
+    /**
+     * @return a test suite (<code>TestSuite</code>) that includes all methods
+     *         starting with "test"
+     */
+    public static Test suite() {
+        // All methods starting with "test" will be executed in the test suite.
+        return new TestSuite(TestXDocletXWork.class);
+    }
+   
+    public void testForwards() throws Exception {
+        Document doc = runTemplate("Controller.jsrc");
+        assertXPath(doc, "/xwork/[EMAIL PROTECTED]'default']");
+        
+        // Test simple forward
+        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'index']");
+        assertXPath(doc, "/xwork/package/[EMAIL 
PROTECTED]'index']/result[param = 'index.jsp']");
+        
+        // Test declared forwards
+        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']");
+        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'success' and param='index']");
+        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'lost' and param='lostPassword.jsp']");
+        assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL 
PROTECTED]'error' and param='login']");
+        
+    }
+   
+    public void testInPackage() throws Exception {
+        Document doc = runTemplate("foo/Controller.jsrc");
+        assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo' and 
@namespace='/foo']");
+    }
+        
+    
+    protected Document runTemplate(String path) throws Exception {
+        return runTemplate(path, "org/apache/ti/config/xdocletToXWork.vm");
+    }
+
+}

Added: 
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java 
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java 
Sat Aug  6 19:04:31 2005
@@ -0,0 +1,91 @@
+/*
+ * $Id: XDocletTestBase.java 230394 2005-08-05 04:13:44Z martinc $ 
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+package org.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletvalidations</code> 
class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005) 
$
+ */
+public class XDocletTestBase extends TestCase {
+        
+    private XDocletParser p; 
+    
+    public void setUp() {
+        p = new XDocletParser();
+        p.init();
+    }
+
+
+    /**
+     * Defines the testcase name for JUnit.
+     *
+     * @param theName the testcase's name.
+     */
+    public XDocletTestBase(String theName) {
+        super(theName);
+    }
+      
+    
+    protected void assertXPath(Document doc, String xpath) throws Exception {
+        XPath xp = XPath.newInstance(xpath);
+        assertNotNull(xp.selectSingleNode(doc));
+    }
+    
+    protected Document runTemplate(String path, String template) throws 
Exception {
+        return runTemplate(path, template, false, null);
+    }    
+    
+    protected Document runTemplate(String path, String template, boolean 
perAction, String actionName) throws Exception {
+        StringOutputType output = new StringOutputType(template, "foo", 
perAction);
+        ArrayList list = new ArrayList();
+        list.add(output);
+        
+        Reader reader = new 
InputStreamReader(getClass().getResourceAsStream(path));
+        path = path.replaceAll("jsrc", "java");
+        p.generate(path, reader, list, null);
+        
+        String out = null;
+        if (perAction) {
+            out = output.getString(actionName);
+            //System.out.println("output:"+out); 
+        } else {
+            out = output.getString();
+        }    
+        
+        Document doc = new SAXBuilder().build(new StringReader(out));
+        return doc;
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to