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>