TRINIDAD-2137 Improve Trinidad component and tagdoc generation plugin to handle deprecated classes

Thanks to Dave Robinson for the patch.
diff --git a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
index 5578b6a..34c07f1 100644
--- a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
+++ b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
@@ -120,9 +120,19 @@
       out.println(" * <p>");
       out.println(" * It does not support any children.");
     }
-
+    
+    String deprecatedMessage = component.getDeprecated();
+    if (deprecatedMessage != null)
+    {
+      out.println(" * @deprecated " + convertMultilineComment(deprecatedMessage));
+    }
     out.println(" */");
 
+    if (deprecatedMessage != null)
+    {
+      out.println("@Deprecated");
+    }
+
     // TODO: eliminate <mfp:component-class-modifier> metadata
     int modifiers = component.getComponentClassModifiers();
     String classStart = Modifier.toString(modifiers);
diff --git a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/AbstractTagBean.java b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/AbstractTagBean.java
index 7df387b..13217c7 100644
--- a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/AbstractTagBean.java
+++ b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/AbstractTagBean.java
@@ -30,6 +30,7 @@
   private List<String> _accessibilityGuidelines = new ArrayList<String>();
   private String       _description;
   private String       _longDescription;
+  private String       _deprecated;
   private QName        _tagName;
   private String       _tagClass;
   protected Map<String, PropertyBean> _properties;
@@ -101,6 +102,23 @@
   }
 
   /**
+   * Sets the component deprecated flag
+   * @param deprecated
+   */
+  public void setDeprecated(String deprecated)
+  {
+    this._deprecated = deprecated;
+  }
+
+  /**
+   * Value is provided through the deprecated extended property metadata.
+   * @return deprecated description if the component should be deprecated
+   */
+  public String getDeprecated() {
+    return _deprecated;
+  }
+
+  /**
    * Sets the JSP tag handler class for this component.
    *
    * @param tagClass  the JSP tag handler class
diff --git a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java
index 0dee4c0..ec9dbcc 100644
--- a/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java
+++ b/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java
@@ -226,6 +226,9 @@
     digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/required");
     digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/value-expression", "valueExpression");
 
+    // faces-config/component/component-extension/component-metadata/deprecated
+    digester.addBeanPropertySetter("faces-config/component/component-extension/component-metadata/deprecated");
+
     // faces-config/component/facet/facet-extension/facet-metadata/allowed-child-components
     digester.addCallMethod("faces-config/component/facet/facet-extension/facet-metadata/allowed-child-components",
                            "parseAllowedChildComponents", 1);
diff --git a/maven-faces-plugin/src/test/resources/META-INF/maven-faces-plugin/components/trinidad/faces/Command.xml b/maven-faces-plugin/src/test/resources/META-INF/maven-faces-plugin/components/trinidad/faces/Command.xml
index 6bfc9ca..b0fec24 100644
--- a/maven-faces-plugin/src/test/resources/META-INF/maven-faces-plugin/components/trinidad/faces/Command.xml
+++ b/maven-faces-plugin/src/test/resources/META-INF/maven-faces-plugin/components/trinidad/faces/Command.xml
@@ -22,7 +22,8 @@
               xmlns:af="http://myfaces.apache.org/trinidad"

               xmlns:xi="http://www.w3.org/2001/XInclude"

               xmlns:md="http://myfaces.apache.org/bali/xml/metadata"

-              xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin" >

+              xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin"

+              xmlns:fmd="http://java.sun.com/xml/ns/javaee/faces/design-time-metadata">

 

   <component>  

   

@@ -152,6 +153,10 @@
 

       <mfp:jsp-tag-class>org.apache.myfaces.trinidadinternal.taglib.UIXCommandTag</mfp:jsp-tag-class>

       <mfp:jsp-tag-name>af:command</mfp:jsp-tag-name>

+  

+      <fmd:component-metadata>

+        <fmd:deprecated>The imaginary component has been deprecated. Use the real component instead.</fmd:deprecated>

+      </fmd:component-metadata>

 

       <!-- <mfp:implementation-type>trinidad</mfp:implementation-type> -->

 

diff --git a/maven-tagdoc-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/tagdoc/TagdocReport.java b/maven-tagdoc-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/tagdoc/TagdocReport.java
index 90de6c5..bbd226c 100644
--- a/maven-tagdoc-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/tagdoc/TagdocReport.java
+++ b/maven-tagdoc-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/tagdoc/TagdocReport.java
@@ -755,6 +755,15 @@
 
     out.write("</table>\n");
     out.write("</div>\n");
+    
+    String deprecatedMessage = bean.getDeprecated();
+    if (deprecatedMessage != null)
+    {
+      out.write("\n");
+      out.write("<b>DEPRECATED: </b>");
+      out.write(_preToSource(deprecatedMessage));
+      out.write("\n");
+    }
 
     String doc = bean.getLongDescription();
     if (doc == null)