You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by dr...@apache.org on 2011/02/23 21:38:18 UTC

svn commit: r1073934 - in /tapestry/tapestry5/trunk: quickstart/src/main/resources/archetype-resources/ tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ tapestry-core/ t...

Author: drobiazko
Date: Wed Feb 23 20:38:18 2011
New Revision: 1073934

URL: http://svn.apache.org/viewvc?rev=1073934&view=rev
Log:
TAP5-1348: Component report should accept multiple root packages
TAP5-1450: Component report should print information about deprecated components or deprecated parameters

Modified:
    tapestry/tapestry5/trunk/quickstart/src/main/resources/archetype-resources/pom.xml
    tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ClassDescription.java
    tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java
    tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParameterDescription.java
    tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParametersDoclet.java
    tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java
    tapestry/tapestry5/trunk/tapestry-core/pom.xml
    tapestry/tapestry5/trunk/tapestry-upload/pom.xml

Modified: tapestry/tapestry5/trunk/quickstart/src/main/resources/archetype-resources/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/quickstart/src/main/resources/archetype-resources/pom.xml?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/quickstart/src/main/resources/archetype-resources/pom.xml (original)
+++ tapestry/tapestry5/trunk/quickstart/src/main/resources/archetype-resources/pom.xml Wed Feb 23 20:38:18 2011
@@ -85,7 +85,9 @@ of testing facilities designed for use w
                 <artifactId>tapestry-component-report</artifactId>
                 <version>${D}{tapestry-release-version}</version>
                 <configuration>
-                    <rootPackage>${package}</rootPackage>
+                    <rootPackages>
+                    	<rootPackage>${package}</rootPackage>
+                    </rootPackages>
                 </configuration>
             </plugin>
         </plugins>

Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ClassDescription.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ClassDescription.java?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ClassDescription.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ClassDescription.java Wed Feb 23 20:38:18 2011
@@ -35,15 +35,18 @@ public class ClassDescription
     private final Map<String, String> events = CollectionFactory.newCaseInsensitiveMap();
 
     private final String since;
+    
+    private final boolean deprecated;
 
-    public ClassDescription(String className, String superClassName, String description,
-                            boolean supportsInformalParameters, String since)
+	public ClassDescription(String className, String superClassName, String description,
+                            boolean supportsInformalParameters, String since, boolean deprecated)
     {
         this.className = className;
         this.superClassName = superClassName;
         this.description = description;
         this.supportsInformalParameters = supportsInformalParameters;
         this.since = since;
+        this.deprecated = deprecated;
     }
 
     public String getClassName()
@@ -75,6 +78,11 @@ public class ClassDescription
     {
         return since;
     }
+    
+    public boolean isDeprecated() 
+    {
+		return deprecated;
+	}
 
     /**
      * Case insensitive map, keyed on parameter name, value is class name of component from which the parameter is

Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java Wed Feb 23 20:38:18 2011
@@ -14,7 +14,33 @@
 
 package org.apache.tapestry.mojo;
 
-import nu.xom.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import nu.xom.Attribute;
+import nu.xom.Builder;
+import nu.xom.Document;
+import nu.xom.Element;
+import nu.xom.Elements;
+import nu.xom.Node;
+import nu.xom.Nodes;
+import nu.xom.ParsingException;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
@@ -34,11 +60,6 @@ import org.codehaus.plexus.util.cli.Comm
 import org.codehaus.plexus.util.cli.Commandline;
 import org.codehaus.plexus.util.cli.DefaultConsumer;
 
-import java.io.*;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * The component report generates documentation about components and parameters within the current project.
  *
@@ -60,14 +81,14 @@ public class ComponentReport extends Abs
     private static final Pattern TAPESTRY5_PATTERN = Pattern.compile("(org\\.apache\\.tapestry5[#_\\w\\.]*)");
 
     private static final char QUOTE = '"';
-
+   
     /**
-     * Identifies the application root package.
+     * Identifies the root packages of the library.
      *
      * @parameter
      * @required
      */
-    private String rootPackage;
+    private List<String> rootPackages;
 
     /**
      * The Maven Project Object
@@ -200,57 +221,74 @@ public class ComponentReport extends Abs
             sink.title_();
             sink.head_();
 
-            sink.section1();
-            sink.sectionTitle1();
-            sink.text("Component Reference");
-            sink.sectionTitle1_();
-            sink.list();
-
             String currentSubpackage = null;
 
-            for (String className : InternalUtils.sortedKeys(descriptions))
+            for (String rootPackage: rootPackages)
             {
-                String subpackage = extractSubpackage(className);
-
-                if (!SUPPORTED_SUBPACKAGES.contains(subpackage)) continue;
+                sink.section1();
+                sink.sectionTitle1();
+                sink.text("Component Reference: "+rootPackage);
+                sink.sectionTitle1_();
+                
+                
+            	for (String className : InternalUtils.sortedKeys(descriptions))
+            	{
+            		ClassDescription classDescription = descriptions.get(className);
+            		
+	                String subpackage = extractSubpackage(className, rootPackage);
+	
+	                if (!SUPPORTED_SUBPACKAGES.contains(subpackage)) continue;
+	                
+	
+	                if (!subpackage.equals(currentSubpackage))
+	                {
+	                    if (currentSubpackage != null)
+	                    {
+	                        sink.list_();
+	                        sink.section2_();
+	                    }
+	
+	                    sink.section2();
+	                    sink.sectionTitle2();
+	                    sink.text(StringUtils.capitalize(subpackage));
+	                    sink.sectionTitle2_();
+	
+	
+	                    sink.list();
+	
+	                    currentSubpackage = subpackage;
+	                }
+	
+	
+	                sink.listItem();
+	                
+	                if(classDescription.isDeprecated())
+	                {
+	                	sink.rawText("<del>");
+	                }
+	                
+	                sink.link(toHtml(toPath(className)));
+	
+	                sink.text(className);
+	                sink.link_();
+	                
+	                if(classDescription.isDeprecated())
+	                {
+	                	sink.rawText("</del>");
+	                }
+	
+	                writeClassDescription(descriptions, refDir, docSearchPath, className);
+	
+	
+	                sink.listItem_();
+            	}
 
-                if (!subpackage.equals(currentSubpackage))
+                if (currentSubpackage != null)
                 {
-                    if (currentSubpackage != null)
-                    {
-                        sink.list_();
-                        sink.section2_();
-                    }
-
-                    sink.section2();
-                    sink.sectionTitle2();
-                    sink.text(StringUtils.capitalize(subpackage));
-                    sink.sectionTitle2_();
-
-
-                    sink.list();
-
-                    currentSubpackage = subpackage;
+                    sink.list_();
+                    sink.section2_();
+                    currentSubpackage = null;
                 }
-
-
-                sink.listItem();
-
-                sink.link(toHtml(toPath(className)));
-
-                sink.text(className);
-                sink.link_();
-
-                writeClassDescription(descriptions, refDir, docSearchPath, className);
-
-
-                sink.listItem_();
-            }
-
-            if (currentSubpackage != null)
-            {
-                sink.list_();
-                sink.section2_();
             }
         }
         catch (Exception ex)
@@ -281,16 +319,21 @@ public class ComponentReport extends Abs
 
         return className.substring(dotx + 1);
     }
-
-    private String extractSubpackage(String className)
+   
+    private String extractSubpackage(String className, String rootPackage)
     {
-        int dotx = className.indexOf(".", rootPackage.length() + 1);
-
-        // For classes directly in the root package.
-
-        if (dotx < 1) return "";
-
-        return className.substring(rootPackage.length() + 1, dotx);
+    	if(className.startsWith(rootPackage))
+    	{
+	        int dotx = className.indexOf(".", rootPackage.length() + 1);
+	
+	        // For classes directly in the root package.
+	
+	        if (dotx < 1) return "";
+	
+	        return className.substring(rootPackage.length() + 1, dotx);
+    	}
+    	
+    	return "";
     }
 
     protected List<File> createDocSearchPath()
@@ -373,8 +416,19 @@ public class ComponentReport extends Abs
 
         Element body = new Element("body");
         root.appendChild(body);
-
-        Element section = addSection(body, className);
+       
+        
+        Element section = null;
+        
+        if(cd.isDeprecated())
+        {
+        	section = addChild(body, "section");
+            addChild(addChild(section, "h2"), "del", className);
+        }
+        else
+        {
+        	 section = addSection(body, className);
+        }
 
 
         StringBuilder javadocURL = new StringBuilder(200);
@@ -459,7 +513,15 @@ public class ComponentReport extends Abs
                 Element row = new Element("tr");
                 table.appendChild(row);
 
-                addChild(row, "td", pd.getName());
+                Element nameTd = addChild(row, "td");
+                if(pd.isDeprecated())
+                {
+                	addChild(nameTd, "del", pd.getName());
+                }
+                else
+                {
+                	nameTd.appendChild(pd.getName());
+                }
                 addChildWithJavadocs(row, "td", pd.getType(), javadocHref);
                 addChild(row, "td", InternalUtils.join(flags));
                 addChild(row, "td", pd.getDefaultValue());
@@ -643,7 +705,7 @@ public class ComponentReport extends Abs
 
         String[] arguments = { "-private", "-o", parametersPath,
 
-                "-subpackages", rootPackage,
+                "-subpackages", InternalUtils.join(rootPackages, ":"),
 
                 "-doclet", ParametersDoclet.class.getName(),
 
@@ -881,9 +943,11 @@ public class ComponentReport extends Abs
             String superClassName = element.getAttributeValue("super-class");
             String supportsInformalParameters = element.getAttributeValue("supports-informal-parameters");
             String since = element.getAttributeValue("since");
+            String deprecated = element.getAttributeValue("deprecated");
 
             ClassDescription cd = new ClassDescription(className, superClassName, description,
-                                                       Boolean.valueOf(supportsInformalParameters), since);
+                                                       Boolean.valueOf(supportsInformalParameters), since,
+                                                       Boolean.valueOf(deprecated));
 
             result.put(className, cd);
 
@@ -931,9 +995,10 @@ public class ComponentReport extends Abs
             String defaultPrefix = node.getAttributeValue("default-prefix");
             String description = node.getValue();
             String since = node.getAttributeValue("since");
+            String deprecated = node.getAttributeValue("deprecated");
 
             ParameterDescription pd = new ParameterDescription(name, type, defaultValue, defaultPrefix, required,
-                                                               allowNull, cache, description, since);
+                                                               allowNull, cache, description, since, Boolean.valueOf(deprecated));
 
             cd.getParameters().put(name, pd);
         }

Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParameterDescription.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParameterDescription.java?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParameterDescription.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParameterDescription.java Wed Feb 23 20:38:18 2011
@@ -33,10 +33,12 @@ public class ParameterDescription
     private final String description;
     
     private final String since;
+    
+    private final boolean deprecated;
 
     public ParameterDescription(String name, String type, String defaultValue,
                                 String defaultPrefix, boolean required, boolean allowNull, boolean cache,
-                                String description, String since)
+                                String description, String since, boolean deprecated)
     {
         this.name = name;
         this.type = type;
@@ -47,6 +49,7 @@ public class ParameterDescription
         this.cache = cache;
         this.description = description;
         this.since = since;
+        this.deprecated = deprecated;
     }
 
     public boolean getCache()
@@ -93,4 +96,8 @@ public class ParameterDescription
 	{
 		return since;
 	}
+
+	public boolean isDeprecated() {
+		return deprecated;
+	}
 }

Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParametersDoclet.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParametersDoclet.java?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParametersDoclet.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ParametersDoclet.java Wed Feb 23 20:38:18 2011
@@ -79,11 +79,13 @@ public class ParametersDoclet extends Do
 
             if (!found) return;
 
-            Map<String, String> annotationValues = findAnnotation(classDoc, "SupportsInformalParameters");
+            Map<String, String> annotationValues = findTapestryAnnotation(classDoc, "SupportsInformalParameters");
+            
+            boolean deprecated = isDeprecated(classDoc);
 
-            println("<class name='%s' super-class='%s'  supports-informal-parameters='%s' since='%s'>",
+            println("<class name='%s' super-class='%s'  supports-informal-parameters='%s' since='%s' deprecated='%s'>",
                     classDoc.qualifiedTypeName(),
-                    classDoc.superclass().qualifiedTypeName(), annotationValues != null, getSinceTagValue(classDoc));
+                    classDoc.superclass().qualifiedTypeName(), annotationValues != null, getSinceTagValue(classDoc), deprecated);
             print("<description>");
             printDescription(classDoc);
             println("</description>", classDoc.commentText());
@@ -94,7 +96,7 @@ public class ParametersDoclet extends Do
 
                 if (!fd.isPrivate()) continue;
 
-                Map<String, String> parameterAnnotationsValues = findAnnotation(fd, "Parameter");
+                Map<String, String> parameterAnnotationsValues = findTapestryAnnotation(fd, "Parameter");
 
                 if (parameterAnnotationsValues != null)
                 {
@@ -103,7 +105,7 @@ public class ParametersDoclet extends Do
                     continue;
                 }
 
-                Map<String, String> componentAnnotationValues = findAnnotation(fd, "Component");
+                Map<String, String> componentAnnotationValues = findTapestryAnnotation(fd, "Component");
 
                 if (componentAnnotationValues != null)
                 {
@@ -119,6 +121,11 @@ public class ParametersDoclet extends Do
 
             println("</class>");
         }
+        
+        private boolean isDeprecated(ProgramElementDoc classDoc)
+        {
+        	return (findAnnotation(classDoc, "java.lang.Deprecated") != null) || (0 < classDoc.tags("deprecated").length);
+        }
 
         private void emitEvents(ClassDoc classDoc)
         {
@@ -175,10 +182,10 @@ public class ParametersDoclet extends Do
             if (name == null) name = fd.name().replaceAll("^[$_]*", "");
 
             print("<parameter name='%s' type='%s' default='%s' required='%s' cache='%s' " +
-                    "default-prefix='%s' since='%s'>",
+                    "default-prefix='%s' since='%s' deprecated='%s'>",
                   name, fd.type().qualifiedTypeName(), get(parameterAnnotationValues, "value", ""),
                   get(parameterAnnotationValues, "required", "false"), get(parameterAnnotationValues, "cache", "true"),
-                  get(parameterAnnotationValues, "defaultPrefix", "prop"), getSinceTagValue(fd));
+                  get(parameterAnnotationValues, "defaultPrefix", "prop"), getSinceTagValue(fd), isDeprecated(fd));
 
             // Body of a parameter is the comment text.
 
@@ -189,9 +196,14 @@ public class ParametersDoclet extends Do
 
         private String getSinceTagValue(Doc doc)
         {
-            Tag[] sinceTags = doc.tags("since");
+            return getTagValue(doc, "since");
+        }
+        
+        private String getTagValue(Doc doc, String tagName)
+        {
+            Tag[] tags = doc.tags(tagName);
 
-            return 0 < sinceTags.length ? sinceTags[0].text() : "";
+            return 0 < tags.length ? tags[0].text() : "";
         }
 
         private String get(Map<String, String> map, String key, String defaultValue)
@@ -200,13 +212,17 @@ public class ParametersDoclet extends Do
 
             return defaultValue;
         }
-
-        private Map<String, String> findAnnotation(ProgramElementDoc doc, String name)
+        
+        private Map<String, String> findTapestryAnnotation(ProgramElementDoc doc, String name)
+       {
+           return findAnnotation(doc, "org.apache.tapestry5.annotations." + name);
+       }
+ 
+         private Map<String, String> findAnnotation(ProgramElementDoc doc, String name)
         {
             for (AnnotationDesc annotation : doc.annotations())
             {
-                if (annotation.annotationType().qualifiedTypeName().equals(
-                        "org.apache.tapestry5.annotations." + name))
+                if (annotation.annotationType().qualifiedTypeName().equals(name))
                 {
                     Map<String, String> result = new HashMap<String, String>();
 

Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java Wed Feb 23 20:38:18 2011
@@ -31,6 +31,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.lang.reflect.Field;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -79,7 +80,7 @@ public class ComponentReportTest extends
         try
         {
             initializeMojo(report, ComponentReport.class,
-                           "rootPackage", "org.apache.tapestry5.corelib",
+                           "rootPackages", Arrays.asList("org.apache.tapestry5.corelib"),
                            "apidocs", "apidocs",
                            "tapestryJavadoc", tapestryDoc,
                            "generatedDocsDirectory", tempFolder
@@ -179,7 +180,8 @@ public class ComponentReportTest extends
                 "When it renders, it fires a org.apache.tapestry5.EventConstants#PREPARE_FOR_RENDER\n" +
                         " notification, followed by a org.apache.tapestry5.EventConstants#PREPARE",
                 false,
-                "5.1.0.0"
+                "5.1.0.0",
+                false
         );
 
         ParameterDescription paramDesc = new ParameterDescription(
@@ -187,7 +189,7 @@ public class ComponentReportTest extends
                 "Prefix value used when searching for validation messages and constraints. " +
                         "The default is the Form component's\n" +
                         " id. This is overriden by org.apache.tapestry5.corelib.components.BeanEditForm.",
-                        "5.1.0.0"
+                        "5.1.0.0", false
         );
         classDesc.getParameters().put(paramDesc.getName(), paramDesc);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/pom.xml?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/pom.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/pom.xml Wed Feb 23 20:38:18 2011
@@ -192,7 +192,9 @@
         <artifactId>tapestry-component-report</artifactId>
         <version>${project.version}</version>
         <configuration>
-          <rootPackage>org.apache.tapestry5.corelib</rootPackage>
+          <rootPackages>
+          	<rootPackage>org.apache.tapestry5.corelib</rootPackage>
+          </rootPackages>
           <apidocs>../apidocs</apidocs>
           <tapestryJavadoc>../apidocs</tapestryJavadoc>
         </configuration>

Modified: tapestry/tapestry5/trunk/tapestry-upload/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/pom.xml?rev=1073934&r1=1073933&r2=1073934&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-upload/pom.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-upload/pom.xml Wed Feb 23 20:38:18 2011
@@ -117,7 +117,9 @@
                 <artifactId>tapestry-component-report</artifactId>
                 <version>${project.version}</version>
                 <configuration>
-                    <rootPackage>org.apache.tapestry5.upload</rootPackage>
+                	<rootPackages>
+                    	<rootPackage>org.apache.tapestry5.upload</rootPackage>
+                	</rootPackages>
                     <apidocs>../apidocs</apidocs>
                     <tapestryJavadoc>../apidocs</tapestryJavadoc>
                 </configuration>