Author: mrdon
Date: Fri Aug 19 23:01:03 2005
New Revision: 234001

URL: http://svn.apache.org/viewcvs?rev=234001&view=rev
Log:
 * Adding support for one annotation output for multiple controllers
 * Changing xwork to be generated once from all controllers
 * Reworked xjavadoc unit tests
 * Changed namespace handling from action mapper to include leading '/'

Added:
    struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java   (with 
props)
    struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/Controller2.jsrc
      - copied unchanged from r233126, 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/foo/Controller.jsrc
Removed:
    struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/foo/
Modified:
    struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/OutputType.java
    struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTags.java
    
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java
    
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java
    
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/mapper/ServletActionMapper.java
    struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/xdocletToXWork.vm
    
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/chain/ProcessTagsInDevMode.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/StringOutputType.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestProcessTags.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletValidation.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletXWork.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java
    
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/mapper/TestServletActionMapper.java

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/OutputType.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/OutputType.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/OutputType.java 
(original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/OutputType.java 
Fri Aug 19 23:01:03 2005
@@ -39,20 +39,24 @@
  */
 public class OutputType {
 
+    public static final int PER_ACTION = 0;
+    public static final int PER_CONTROLLER = 1;
+    public static final int ONCE = 3;
+
     private String filePattern;
-    private boolean perAction;
+    private int frequency;
     private String template;
 
     private static final Log log = LogFactory.getLog(OutputType.class);
 
-    public OutputType(String template, String filePattern, boolean perAction) {
+    public OutputType(String template, String filePattern, int frequency) {
         this.template = template;
         this.filePattern = filePattern;
-        this.perAction = perAction;
+        this.frequency = frequency;
     }
 
-    public boolean getPerAction() {
-        return perAction;
+    public int getFrequency() {
+        return frequency;
     }
 
     public String getTemplate() {
@@ -60,27 +64,31 @@
     }    
 
     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;
+        String name = filePattern;
+        if (frequency != ONCE) {
+        
+            // 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);
+            }
+            dest = new File(dest, rootPath);
+        }    
         try {
             writer = new FileWriter(new File(dest, name));
         } catch (IOException ex) {

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTags.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTags.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTags.java 
(original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTags.java 
Fri Aug 19 23:01:03 2005
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.net.URI;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -43,28 +44,27 @@
     }
 
     public void process(File src, String srcName, File dest, List outputs) 
throws IOException {
-        crawl(src, srcName, dest, outputs, new ArrayList());
+        ArrayList sources = new ArrayList();
+        crawl(src, srcName, src, outputs, sources);
+        xdocletParser.generate(sources, src, dest, outputs);
     }
 
-    protected void crawl(File src, String srcName, File dest, List outputs, 
List stack) throws IOException {
+    protected void crawl(File src, String srcName, File srcRoot, List outputs, 
List sources) 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, outputs, stack);
-                stack.remove(stack.size() - 1);
+                //stack.add(kids[x].getName());
+                crawl(kids[x], srcName, srcRoot, outputs, sources);
+                //stack.remove(stack.size() - 1);
             } else if (!controllerFound && srcName.equals(kids[x].getName())) {
-                StringBuffer path = new StringBuffer();
-                for (Iterator i = stack.iterator(); i.hasNext();) {
-                    path.append(i.next()).append(SEP);
-                }
-                File destDir = new File(dest, path.toString());
-                destDir.mkdirs();
-                String filePath = path.toString() + kids[x].getName();
-
-                log.info("Generating to " + destDir);
-                xdocletParser.generate(filePath, new FileReader(kids[x]), 
outputs, destDir);
+                URI srcUri = kids[x].toURI();
+                URI fileUri = srcRoot.toURI();
+                URI result = fileUri.relativize(srcUri);
+                log.info("Adding source "+result);
+                sources.add(result.toString());
+                
+                //xdocletParser.generate(filePath, new FileReader(kids[x]), 
outputs, destDir);
                 controllerFound = true;
             }
         }

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java 
(original)
+++ 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java 
Fri Aug 19 23:01:03 2005
@@ -52,8 +52,8 @@
         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));
+        outputs.add(new OutputType("org/apache/ti/config/xdocletToXWork.vm", 
"xwork.xml", OutputType.ONCE));
+        outputs.add(new 
OutputType("org/apache/ti/config/xdocletToValidation.vm", 
"$c-$a-validation.xml", OutputType.PER_ACTION));
         
         try {
             pt.process(srcdir, "Controller.java", destdir, outputs);

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java 
(original)
+++ 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java 
Fri Aug 19 23:01:03 2005
@@ -40,6 +40,7 @@
 import xjavadoc.XMethod;
 import xjavadoc.XJavaDoc;
 import xjavadoc.filesystem.ReaderFile;
+import xjavadoc.filesystem.XJavadocFile;
 
 /**
  *  Processes xdoclet-style tags and uses a velocity template to generate
@@ -73,58 +74,100 @@
         return parameters;
     }
 
-    public void generate(String name, Reader reader, List outputs, File 
destDir) {
-        XJavaDoc jdoc = new XJavaDoc();
-        ReaderFile jdocFile = new ReaderFile(reader);
-
-
-        String className = name.replace('/', '.');
+    protected String getClassName(String uri) {
+        String className = uri.replace('/', '.');
         className = className.replace('\\', '.');
         className = className.substring(0, className.indexOf(".java"));
+        return className;
+    }    
 
-        jdoc.addAbstractFile(className, jdocFile);
-        XClass xclass = jdoc.getXClass(className);
-        
+
+    public void generate(List sources, File srcRoot, File destRoot, List 
outputs) {
+        XJavaDoc jdoc = new XJavaDoc();
+        String source, className;
+        XJavadocFile file;
+        for (Iterator i = sources.iterator(); i.hasNext(); ) {
+            source = (String)i.next();
+            file = new XJavadocFile(new File(srcRoot, source));
+            className = getClassName(source);
+            jdoc.addAbstractFile(className, file);
+        }  
+ 
         Map contextMap = new HashMap();
         if (parameters != null) {
             contextMap.putAll(parameters);
         }
-
-
+        VelocityContext context = new VelocityContext(contextMap);
+        
         OutputType output;
-        Writer writer = null;
-        for (Iterator i = outputs.iterator(); i.hasNext(); ) {
-            output = (OutputType) i.next();
-            Template template = null;
+        XClass xclass;
+        Template template;
+        for (Iterator o = outputs.iterator(); o.hasNext(); ) {
+            output = (OutputType)o.next();
             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);
+            }
+            if (output.getFrequency() == output.ONCE) {
+                generateOnce(sources, destRoot, jdoc, output, template, 
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);
+                for (Iterator i = sources.iterator(); i.hasNext(); ) {
+                    source = (String)i.next();
+                    xclass = jdoc.getXClass(getClassName(source));
+                   
+                    if (output.getFrequency() == output.PER_CONTROLLER) {
+                        generatePerController(source, destRoot, xclass, 
output, template, context);
+                    } else if (output.getFrequency() == output.PER_ACTION) {
+                        generatePerAction(source, destRoot, xclass, output, 
template, context);
                     }
                 }    
+            }
+        }    
+    }
+
+    protected void generateOnce(List sources, File destRoot, XJavaDoc jdoc, 
+                                OutputType output, Template template, 
VelocityContext context) {
+        String source, className;
+        XClass xclass;
+        Map xclasses = new HashMap();
+        for (Iterator i = sources.iterator(); i.hasNext(); ) {
+            source = (String)i.next();
+            className = getClassName(source);
+            xclass = jdoc.getXClass(className);
+            xclasses.put(source, xclass);
+        }    
+        Writer writer = output.getWriter(destRoot, null, null);
+        context.put("xclasses", xclasses);
+        writeOutput(template, writer, context);
+    }
+
+
+
+    protected void generatePerController(String source, File destRoot, XClass 
xclass, 
+                                         OutputType output, Template template, 
VelocityContext context) {
+        Writer writer = output.getWriter(destRoot, source, null);
+        context.put("xclass", xclass);
+        context.put("javaFile", source);
+        writeOutput(template, writer, context);
+    }
+
+
+    protected void generatePerAction(String source, File destRoot, XClass 
xclass, 
+                                     OutputType output, Template template, 
VelocityContext context) {
+        List methods = xclass.getMethods();
+        XMethod m;
+        Writer writer;
+        for (Iterator it = methods.iterator(); it.hasNext(); ) {
+            m = (XMethod) it.next();
+            if (m.getDoc().hasTag("ti.action")) {
+                writer = output.getWriter(destRoot, source, m.getName());
+                context.put("xclass", xclass);
+                context.put("xmethod", m);
+                context.put("javaFile", source);
+
+                writeOutput(template, writer, context);
             }    
         }
     }

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/mapper/ServletActionMapper.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/mapper/ServletActionMapper.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/mapper/ServletActionMapper.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/mapper/ServletActionMapper.java
 Fri Aug 19 23:01:03 2005
@@ -54,7 +54,7 @@
             if (mapping.charAt(mapping.length() - 1) == '*') {
                 String prefix = mapping.substring(0, mapping.length() - 1);
                 if (servletPath.startsWith(prefix)) {
-                    uri = servletPath.substring(prefix.length());
+                    uri = servletPath.substring(prefix.length() - 1);
                     log.debug("matched prefix:" + prefix);
                     break;
                 }
@@ -63,7 +63,7 @@
             } else if (mapping.charAt(0) == '*') {
                 String ext = mapping.substring(1);
                 if (servletPath.endsWith(ext)) {
-                    uri = servletPath.substring(1, (servletPath.length() - 
ext.length()));
+                    uri = servletPath.substring(0, (servletPath.length() - 
ext.length()));
                     log.debug("matched ext:" + ext);
                     break;
                 }

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/xdocletToXWork.vm
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/xdocletToXWork.vm?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/xdocletToXWork.vm 
(original)
+++ 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/xdocletToXWork.vm 
Fri Aug 19 23:01:03 2005
@@ -6,46 +6,48 @@
 
 <xwork>
 <include file="ti-default.xml"/>
-#set( $pkg=$xclass.containingPackage)
-
-#if( $pkg.name=="")
-<package name="default" extends="ti-default">
-#else
-<package name="$pkg.name" namespace="/${pkg.name}" extends="xwork-default">
-#end
-
-    #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) 
-        <action name="$method.name" method="$method.name" 
class="$xclass.qualifiedName">
-           
-           #set( $form = $method.doc.getTag("ti.form"))
-           #if( $form)
-            #if( $form.getAttributeValue("scope"))
-              <param 
name="formScope">${form.getAttributeValue("scope")}</param>
-            #end
-            #if ($form.getAttributeValue("name"))
-              <param name="formName">${form.getAttributeValue("name")}</param>
-            #end
-           #end
-           #set( $forwards = $method.doc.getTags("ti.forward"))
-           #if( $forwards.size() == 0) 
-           <result name="success">
-                <param name="location">${method.name}.jsp</param>
-           </result>
-           #else
-             #foreach( $fwd in $forwards )
-             <result name="${fwd.getAttributeValue("name")}"
-                     type="${fwd.getAttributeValue("type")}">
-                <param 
name="location">${fwd.getAttributeValue("location")}</param>
-             </result>
+#foreach( $xclass in $xclasses)
+  #set( $pkg=$xclass.containingPackage)
+  
+  #if( $pkg.name=="")
+  <package name="default" extends="ti-default">
+  #else
+  <package name="$pkg.name" namespace="/${pkg.name}" extends="ti-default">
+  #end
+  
+      #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) 
+          <action name="$method.name" method="$method.name" 
class="$xclass.qualifiedName">
+             
+             #set( $form = $method.doc.getTag("ti.form"))
+             #if( $form)
+              #if( $form.getAttributeValue("scope"))
+                <param 
name="formScope">${form.getAttributeValue("scope")}</param>
+              #end
+              #if ($form.getAttributeValue("name"))
+                <param 
name="formName">${form.getAttributeValue("name")}</param>
+              #end
              #end
-           #end  
-           <interceptor-ref name="validationWorkflowStack"/>
-        </action>
-        #end
-      #end  
-    #end
-
-</package>
+             #set( $forwards = $method.doc.getTags("ti.forward"))
+             #if( $forwards.size() == 0) 
+             <result name="success">
+                  <param name="location">${method.name}.jsp</param>
+             </result>
+             #else
+               #foreach( $fwd in $forwards )
+               <result name="${fwd.getAttributeValue("name")}"
+                       type="${fwd.getAttributeValue("type")}">
+                  <param 
name="location">${fwd.getAttributeValue("location")}</param>
+               </result>
+               #end
+             #end  
+             <interceptor-ref name="validationWorkflowStack"/>
+          </action>
+          #end
+        #end  
+      #end
+  
+  </package>
+  #end
 </xwork>

Modified: 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/chain/ProcessTagsInDevMode.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/chain/ProcessTagsInDevMode.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/chain/ProcessTagsInDevMode.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/chain/ProcessTagsInDevMode.java
 Fri Aug 19 23:01:03 2005
@@ -50,8 +50,8 @@
     public void setProcessTags(ProcessTags pt) {
         this.processTags = pt;
         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));
+        outputs.add(new OutputType("org/apache/ti/config/xdocletToXWork.vm", 
"xwork.xml", OutputType.ONCE));
+        outputs.add(new 
OutputType("org/apache/ti/config/xdocletToValidation.vm", 
"$c-$a-validation.xml", OutputType.PER_ACTION));
     }    
 
     public void setControllerSourceName(String name) {

Added: struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java?rev=234001&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java (added)
+++ struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java Fri Aug 
19 23:01:03 2005
@@ -0,0 +1,94 @@
+/*
+ * $Id: BaseTest.java 230619 2005-08-07 02:04:31Z mrdon $ 
+ *
+ * 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;
+
+import java.io.File;
+import java.io.IOException;
+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;
+import junit.framework.TestSuite;
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.ProcessTags</code> class.
+ *
+ * @version $Rev: 230619 $ $Date: 2005-08-06 19:04:31 -0700 (Sat, 06 Aug 2005) 
$
+ */
+public abstract class BaseTest extends TestCase {
+    
+    /**
+     * Defines the testcase name for JUnit.
+     *
+     * @param theName the testcase's name.
+     */
+    public BaseTest(String theName) {
+        super(theName);
+    }
+
+ 
+    protected static File makeDir(String name) throws Exception {
+        File root = File.createTempFile("strutsti", "").getParentFile();
+        File src = new File(root, name);
+        src.mkdirs();
+        return src;
+    }
+    
+    protected static void setText(File file, String text) throws IOException {
+        FileWriter writer = new FileWriter(file);
+        writer.write(text);
+        writer.close();
+    }
+    
+    protected static void setText(File file, InputStream in) throws 
IOException {
+        
+        byte[] b = new byte[4096];
+        int len = 0;
+        FileOutputStream fout = new FileOutputStream(file);
+        while ((len = in.read(b)) > 0) {
+            fout.write(b, 0, len);
+        }
+        in.close();
+        fout.close();
+    }
+    
+    // Deletes all files and subdirectories under dir.
+    // Returns true if all deletions were successful.
+    // If a deletion fails, the method stops attempting to delete and returns 
false.
+    protected static boolean deleteDir(File dir) {
+        if (dir.isDirectory()) {
+            String[] children = dir.list();
+            for (int i=0; i<children.length; i++) {
+                boolean success = deleteDir(new File(dir, children[i]));
+                if (!success) {
+                    return false;
+                }
+            }
+        }
+    
+        // The directory is now empty so delete it
+        return dir.delete();
+    }
+
+}

Propchange: struts/sandbox/trunk/ti/core/src/test/org/apache/ti/BaseTest.java
------------------------------------------------------------------------------
    svn:executable = *

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/StringOutputType.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/StringOutputType.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/StringOutputType.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/StringOutputType.java
 Fri Aug 19 23:01:03 2005
@@ -41,8 +41,12 @@
 
     private Map writers = new HashMap();
 
-    public StringOutputType(String template, String filePattern, boolean 
perAction) {
-        super(template, filePattern, perAction);
+    public StringOutputType(String template) {
+        this(template, PER_CONTROLLER);
+    }
+    
+    public StringOutputType(String template, int perAction) {
+        super(template, "ASDF", perAction);
     }
 
     public Writer getWriter(File dest, String path, String actionName) {

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestProcessTags.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestProcessTags.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestProcessTags.java 
(original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestProcessTags.java 
Fri Aug 19 23:01:03 2005
@@ -27,6 +27,8 @@
 import java.util.*;
 import org.apache.velocity.*;
 
+import org.apache.ti.*;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -36,9 +38,9 @@
  *
  * @version $Rev$ $Date$
  */
-public class TestProcessTags extends TestCase {
+public class TestProcessTags extends BaseTest {
     
-    File src, dest;
+    File src;
     
     /**
      * Defines the testcase name for JUnit.
@@ -69,16 +71,11 @@
     }
     
     public void setUp() throws Exception {
-        File root = File.createTempFile("strutsti", "").getParentFile();
-        src = new File(root, "strutsti-src");
-        src.mkdirs();
-        dest = new File(root, "strutsti-dest");
-        dest.mkdirs();
+        src = makeDir("strutsti-src");
     }
     
     public void tearDown() {
         deleteDir(src);
-        deleteDir(dest);
     }
         
 
@@ -86,17 +83,9 @@
         final HashSet shouldFind = new HashSet();
         shouldFind.add("Controller.java");
         shouldFind.add("foo/Controller.java");
-        shouldFind.add("foo\\Controller.java");
         
-        XDocletParser mock = new XDocletParser() {
-            public void generate(String name, Reader reader, File dest, List 
outputs) {
-                if (!shouldFind.contains(name)) {
-                    fail("Invalid controller file "+name);
-                }
-            }
-        };
        
-        /*
+        
         File rootCtr = new File(src, "Controller.java");
         rootCtr.createNewFile();
         File sub = new File(src, "foo");
@@ -104,34 +93,10 @@
         File subCtr = new File(sub, "Controller.java");
         subCtr.createNewFile();
         
-        ProcessTags processer = new ProcessTags();
-        processer.setXDocletParser(mock);
-        
-        processer.process(src, "Controller.java", dest, "xwork.xml");
-        assertTrue(new File(dest, "xwork.xml").exists());
-        assertTrue(new File(dest, "foo/xwork.xml").exists());
-        */
+        ProcessTags processor = new ProcessTags();
+        ArrayList sources = new ArrayList();
+        processor.crawl(src, "Controller.java", src, null, sources);
+        assertTrue("Not all files found:"+sources, new 
HashSet(sources).equals(shouldFind));
     }
     
-    
-    
-    
-    // Deletes all files and subdirectories under dir.
-    // Returns true if all deletions were successful.
-    // If a deletion fails, the method stops attempting to delete and returns 
false.
-    private static boolean deleteDir(File dir) {
-        if (dir.isDirectory()) {
-            String[] children = dir.list();
-            for (int i=0; i<children.length; i++) {
-                boolean success = deleteDir(new File(dir, children[i]));
-                if (!success) {
-                    return false;
-                }
-            }
-        }
-    
-        // The directory is now empty so delete it
-        return dir.delete();
-    }
-
 }

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
 Fri Aug 19 23:01:03 2005
@@ -39,7 +39,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class TestXDocletParser extends TestCase {
+public class TestXDocletParser extends XDocletTestBase {
     
     /**
      * Defines the testcase name for JUnit.
@@ -49,7 +49,7 @@
     public TestXDocletParser(String theName) {
         super(theName);
     }
-
+    
     /**
      * Start the tests.
      *
@@ -73,14 +73,15 @@
         XDocletParser p = new XDocletParser();
         p.init();
         
-        StringOutputType out = new 
StringOutputType("org/apache/ti/config/test.vm", "foo.xml", false);
+        StringOutputType out = new 
StringOutputType("org/apache/ti/config/test.vm");
         List outputs = new ArrayList();
         outputs.add(out);
 
-        String src = "public class Test {}";
-        StringReader reader = new StringReader(src);
-        
-        p.generate("Test.java", reader, outputs, new File("foo"));
+        String txt = "public class Test {}";
+        setText(new File(src, "Test.java"), txt);
+        ArrayList sources = new ArrayList();
+        sources.add("Test.java");
+        p.generate(sources, src, null, outputs);
         
         String ut = out.getString();
         assertNotNull(ut);
@@ -91,13 +92,15 @@
         XDocletParser p = new XDocletParser();
         p.init();
         
-        StringOutputType out = new 
StringOutputType("org/apache/ti/config/testTag.vm", "foo.xml", false);
+        StringOutputType out = new 
StringOutputType("org/apache/ti/config/testTag.vm");
         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);
-        p.generate("Test.java", reader, outputs, new File("foo"));
+        String srctxt = "package foo;\n/** \n * things\n *  @foo bar\n 
*/\npublic class Test{}";
+        setText(new File(src, "Test.java"), srctxt);
+        ArrayList sources = new ArrayList();
+        sources.add("Test.java");
+        p.generate(sources, src, null, outputs);
         
         String ut = out.getString();
         assertNotNull(ut);

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletValidation.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletValidation.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletValidation.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletValidation.java
 Fri Aug 19 23:01:03 2005
@@ -79,7 +79,7 @@
    
     
     protected Document runTemplate(String path, String action) throws 
Exception {
-        return runTemplate(path, 
"org/apache/ti/config/xdocletToValidation.vm", true, action);
+        return runTemplate(path, 
"org/apache/ti/config/xdocletToValidation.vm", OutputType.PER_ACTION, action);
     }
 
 }

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletXWork.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletXWork.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletXWork.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletXWork.java
 Fri Aug 19 23:01:03 2005
@@ -71,7 +71,7 @@
     }
    
     public void testForwards() throws Exception {
-        Document doc = runTemplate("Controller.jsrc");
+        Document doc = runTemplate(new String[] {"Controller.jsrc"});
         assertXPath(doc, "/xwork/[EMAIL PROTECTED]'default']");
         
         // Test simple forward
@@ -87,9 +87,14 @@
     }
    
     public void testInPackage() throws Exception {
-        Document doc = runTemplate("foo/Controller.jsrc");
+        Document doc = runTemplate("Controller2.jsrc");
         assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo' and 
@namespace='/foo']");
     }
+    
+    public void testMultiplePackages() throws Exception {
+        Document doc = runTemplate(new String[] {"Controller2.jsrc", 
"Controller.jsrc"});
+        assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo'] and /xwork/[EMAIL 
PROTECTED]'default']");
+    }
  
     public void testForm() throws Exception {
         Document doc = runTemplate("Controller.jsrc");
@@ -99,7 +104,11 @@
         
     
     protected Document runTemplate(String path) throws Exception {
-        return runTemplate(path, "org/apache/ti/config/xdocletToXWork.vm");
+        return runTemplate(path, "org/apache/ti/config/xdocletToXWork.vm", 
OutputType.ONCE, null);
+    }
+    
+    protected Document runTemplate(String[] path) throws Exception {
+        return runTemplate(path, "org/apache/ti/config/xdocletToXWork.vm", 
OutputType.ONCE, null);
     }
 
 }

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java 
(original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java 
Fri Aug 19 23:01:03 2005
@@ -24,6 +24,7 @@
 import org.apache.velocity.*;
 import java.io.StringReader;
 import java.io.StringWriter;
+import org.xml.sax.*;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -33,21 +34,30 @@
 import org.jdom.input.SAXBuilder;
 import org.jdom.xpath.XPath;
 
+import org.apache.ti.*;
+
 /**
  * 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 {
+public class XDocletTestBase extends BaseTest {
         
     private XDocletParser p; 
+    protected File src;
     
-    public void setUp() {
+    public void setUp()  throws Exception {
         p = new XDocletParser();
         p.init();
+        src = makeDir("strutsti-src");
+    }
+    
+    public void tearDown() throws Exception {
+        deleteDir(src);
     }
 
 
+
     /**
      * Defines the testcase name for JUnit.
      *
@@ -56,6 +66,8 @@
     public XDocletTestBase(String theName) {
         super(theName);
     }
+    
+    
       
     
     protected void assertXPath(Document doc, String xpath) throws Exception {
@@ -64,20 +76,30 @@
     }
     
     protected Document runTemplate(String path, String template) throws 
Exception {
-        return runTemplate(path, template, false, null);
+        return runTemplate(path, template, OutputType.PER_CONTROLLER, null);
     }    
     
-    protected Document runTemplate(String path, String template, boolean 
perAction, String actionName) throws Exception {
-        StringOutputType output = new StringOutputType(template, "foo", 
perAction);
+    protected Document runTemplate(String path, String template, int 
frequency, String actionName) throws Exception {
+        return runTemplate(new String[]{path}, template, frequency, 
actionName);
+    }
+    
+    protected Document runTemplate(String[] paths, String template, int 
frequency, String actionName) throws Exception {
+        StringOutputType output = new StringOutputType(template, frequency);
         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);
+        ArrayList sources = new ArrayList();
+        for (int x=0; x<paths.length; x++) {
+            String name = "Test"+x+".java";
+            setText(new File(src, name), 
getClass().getResourceAsStream(paths[x]));
+            sources.add(name);
+        }
+        
+        
+        p.generate(sources, src, null, list);
         
         String out = null;
-        if (perAction) {
+        if (frequency==output.PER_ACTION) {
             out = output.getString(actionName);
             //System.out.println("output:"+out); 
         } else {
@@ -85,7 +107,13 @@
             //System.out.println("output:"+out);
         }    
         
-        Document doc = new SAXBuilder().build(new StringReader(out));
+        SAXBuilder builder = new SAXBuilder(false);
+        builder.setEntityResolver(new EntityResolver() {
+           public InputSource resolveEntity (String publicId, String systemId) 
{
+               return null;
+           }
+        });
+        Document doc = builder.build(new StringReader(out));
         return doc;
     }
 

Modified: 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/mapper/TestServletActionMapper.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/mapper/TestServletActionMapper.java?rev=234001&r1=234000&r2=234001&view=diff
==============================================================================
--- 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/mapper/TestServletActionMapper.java
 (original)
+++ 
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/mapper/TestServletActionMapper.java
 Fri Aug 19 23:01:03 2005
@@ -75,7 +75,7 @@
         ActionMapping am = mapper.getMapping("/foo/ns/bar", mappings);
         assertNotNull(am);
         assertTrue("action:"+am.getName(), "bar".equals(am.getName()));
-        assertTrue("ns".equals(am.getNamespace()));
+        assertTrue("/ns".equals(am.getNamespace()));
         assertTrue("/foo/*".equals(am.getExternalMapping()));
     }
     
@@ -83,7 +83,7 @@
         ActionMapping am = mapper.getMapping("/ns/bar.do", mappings);
         assertNotNull(am);
         assertTrue("bar".equals(am.getName()));
-        assertTrue("ns".equals(am.getNamespace()));
+        assertTrue("/ns".equals(am.getNamespace()));
         assertTrue("*.do".equals(am.getExternalMapping()));
     }
     



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

Reply via email to