You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sk...@apache.org on 2008/06/22 20:31:47 UTC

svn commit: r670392 - /myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/

Author: skitching
Date: Sun Jun 22 11:31:46 2008
New Revision: 670392

URL: http://svn.apache.org/viewvc?rev=670392&view=rev
Log:
Create a new base class (ViewEntityMeta) to hold data common to ComponentMeta, ConverterMeta, ValidatorMeta.
Also simplify the xml writing code a bit.
And add comments.

Added:
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java   (with props)
Modified:
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ClassMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ComponentMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ConverterMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyHolder.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RenderKitMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RendererMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/TagMeta.java
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ValidatorMeta.java

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ClassMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ClassMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ClassMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ClassMeta.java Sun Jun 22 11:31:46 2008
@@ -56,6 +56,8 @@
  */
 public class ClassMeta
 {
+    private String _xmlElementName;
+
     private String _className;
     private String _parentClassName;
     
@@ -65,20 +67,84 @@
     private String _sourceClassParentClassName;
 
     /**
-     * Write this model out as xml.
+     * Add digester rules to repopulate an instance of this type from an xml
+     * file.
+     */
+    public static void addXmlRules(Digester digester, String prefix)
+    {
+        digester.addBeanPropertySetter(prefix + "/modelId");
+        digester.addBeanPropertySetter(prefix + "/className");
+        digester.addBeanPropertySetter(prefix + "/parentClassName");
+        digester.addBeanPropertySetter(prefix + "/sourceClassName");
+        digester.addBeanPropertySetter(prefix + "/sourceClassParentClassName");
+        digester.addCallMethod(prefix + "/interfaces/interface",
+                "addInterfaceClassName", 1);
+        digester.addCallParam(prefix + "/interfaces/interface", 0, "name");
+    }
+
+    /**
+     * Constructor.
+     * 
+     * Param xmlElementName is the name of the xml element that is created
+     * when method writeXml is invoked.
+     */
+    protected ClassMeta(String xmlElementName)
+    {
+        _xmlElementName = xmlElementName;
+    }
+
+    /**
+     * Write the properties of this instance out as xml.
+     * <p>
+     * The name of the xml element that is created to hold the properties
+     * was specified when the constructor was called.
+     * <p>
+     * Subclasses that want to output their own properties should not
+     * override this method. Instead, they should override writeXmlSimple
+     * (and in rare cases writeXmlComplex).
+     * <p>
+     * Having two write methods (writeXmlSimple/writeXmlComplex) gives some basic
+     * control over the order in which data is written to xml, in order to make
+     * the generated xml look nice. Any properties written in writeXmlSimple will
+     * appear in the output file before properties written by writeXmlComplex. 
+     * Therefore, properties which are "easily read" should be written out in
+     * a writeXmlSimple method. Data which has large CDATA blocks, or complicated
+     * nested structure should be written out in a writeXmlComplex method so that
+     * the "simple" stuff can be easily read and is not buried in the middle of
+     * the harder-to-read output.
      */
-    public static void writeXml(XmlWriter out, ClassMeta mi)
+    protected void writeXml(XmlWriter out)
     {
-        out.writeElement("modelId", mi._modelId);
-        out.writeElement("className", mi._className);
-        out.writeElement("parentClassName", mi._parentClassName);
-        out.writeElement("sourceClassName", mi._sourceClassName);
-        out.writeElement("sourceClassParentClassName", mi._sourceClassParentClassName);
+        out.beginElement(_xmlElementName);
+        writeXmlSimple(out);
+        writeXmlComplex(out);
+        out.endElement(_xmlElementName);
+    }
 
-        if (!mi._interfaceClassNames.isEmpty())
+    /**
+     * Write this model out as xml.
+     * <p>
+     * Subclasses that wish to write out properties as xml should override
+     * this method, call the super implementation, then call methods on the
+     * XmlWriter object to output their data.
+     */
+    protected void writeXmlSimple(XmlWriter out)
+    {
+        out.writeElement("modelId", _modelId);
+        out.writeElement("className", _className);
+        out.writeElement("parentClassName", _parentClassName);
+        out.writeElement("sourceClassName", _sourceClassName);
+        out.writeElement("sourceClassParentClassName", _sourceClassParentClassName);
+
+        // Interface data is a little complex, and could possibly be placed in the
+        // writeXmlComplex method. But except for very complicated inheritance
+        // hierarchies is is still only going to be a few lines and it logically
+        // belongs with the className/parentClassName/etc data. So it is written here
+        // along with the other "simple" data.
+        if (!_interfaceClassNames.isEmpty())
         {
             out.beginElement("interfaces");
-            for (Iterator i = mi._interfaceClassNames.iterator(); i.hasNext();)
+            for (Iterator i = _interfaceClassNames.iterator(); i.hasNext();)
             {
                 String name = (String) i.next();
                 out.beginElement("interface");
@@ -90,19 +156,21 @@
     }
 
     /**
-     * Add digester rules to repopulate an instance of this type from an xml
-     * file.
+     * See documentation for writeXml and writeXmlSimple methods.
      */
-    public static void addXmlRules(Digester digester, String prefix)
+    protected void writeXmlComplex(XmlWriter out)
     {
-        digester.addBeanPropertySetter(prefix + "/modelId");
-        digester.addBeanPropertySetter(prefix + "/className");
-        digester.addBeanPropertySetter(prefix + "/parentClassName");
-        digester.addBeanPropertySetter(prefix + "/sourceClassName");
-        digester.addBeanPropertySetter(prefix + "/sourceClassParentClassName");
-        digester.addCallMethod(prefix + "/interfaces/interface",
-                "addInterfaceClassName", 1);
-        digester.addCallParam(prefix + "/interfaces/interface", 0, "name");
+        // no complex data to write for this class.
+    }
+
+    /**
+     * Merge any inheritable data from the specified "other" instance into
+     * the metadata held by this instance.
+     */
+    protected void merge(ClassMeta other)
+    {
+        // There is nothing to merge between two ClassMeta objects;
+        // none of the properties on this class are inheritable.
     }
 
     /**

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ComponentMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ComponentMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ComponentMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ComponentMeta.java Sun Jun 22 11:31:46 2008
@@ -24,25 +24,18 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.logging.Logger;
 
 import org.apache.commons.digester.Digester;
 import org.apache.commons.lang.StringUtils;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.io.XmlWriter;
 
 /**
- * Store metadata about a class that is either a JSF UIComponent, or some base
+ * Store metadata about a JSF UIComponent, or some base
  * class or interface that a UIComponent can be derived from.
  */
-public class ComponentMeta extends ClassMeta implements 
+public class ComponentMeta extends ViewEntityMeta implements 
     PropertyHolder, FacetHolder
 {
-    static private final Logger _LOG = Logger.getLogger(ComponentMeta.class
-            .getName());
-
-    private String _name;
-    private String _description;
-    private String _longDescription;
     private String _bodyContent;
 
     private String _type;
@@ -63,49 +56,35 @@
     
     private Boolean _template;
     
-    protected Map _properties;
     protected Map _facets;
 
     /**
      * Write an instance of this class out as xml.
      */
-    public static void writeXml(XmlWriter out, ComponentMeta cm)
+    protected void writeXmlSimple(XmlWriter out)
     {
-        out.beginElement("component");
-
-        ClassMeta.writeXml(out, cm);
+        super.writeXmlSimple(out);
 
-        out.writeElement("name", cm._name);
-        out.writeElement("type", cm._type);
-        out.writeElement("bodyContent", cm._bodyContent);
-        out.writeElement("family", cm._family);
-        out.writeElement("tagClass", cm._tagClass);
-        out.writeElement("tagSuperclass", cm._tagSuperclass);
-        out.writeElement("tagHandler", cm._tagHandler);
-        out.writeElement("rendererType", cm._rendererType);
-        out.writeElement("configExcluded", cm._configExcluded);
-
-        out.writeElement("desc", cm._description);
-        out.writeElement("longDesc", cm._longDescription);
-        out.writeElement("serialuid", cm._serialuid);
-        out.writeElement("implements", cm._implements);
-        out.writeElement("generatedComponentClass", cm._generatedComponentClass);
-        out.writeElement("generatedTagClass", cm._generatedTagClass);
-        out.writeElement("template", cm._template);
-        
-        for (Iterator i = cm._properties.values().iterator(); i.hasNext();)
-        {
-            PropertyMeta prop = (PropertyMeta) i.next();
-            PropertyMeta.writeXml(out, prop);
-        }
+        out.writeElement("type", _type);
+        out.writeElement("bodyContent", _bodyContent);
+        out.writeElement("family", _family);
+        out.writeElement("tagClass", _tagClass);
+        out.writeElement("tagSuperclass", _tagSuperclass);
+        out.writeElement("tagHandler", _tagHandler);
+        out.writeElement("rendererType", _rendererType);
+        out.writeElement("configExcluded", _configExcluded);
+
+        out.writeElement("serialuid", _serialuid);
+        out.writeElement("implements", _implements);
+        out.writeElement("generatedComponentClass", _generatedComponentClass);
+        out.writeElement("generatedTagClass", _generatedTagClass);
+        out.writeElement("template", _template);
         
-        for (Iterator i = cm._facets.values().iterator(); i.hasNext();)
+        for (Iterator i = _facets.values().iterator(); i.hasNext();)
         {
             FacetMeta facet = (FacetMeta) i.next();
             FacetMeta.writeXml(out, facet);
         }
-
-        out.endElement("component");
     }
 
     /**
@@ -119,9 +98,8 @@
         digester.addObjectCreate(newPrefix, ComponentMeta.class);
         digester.addSetNext(newPrefix, "addComponent");
 
-        ClassMeta.addXmlRules(digester, newPrefix);
+        ViewEntityMeta.addXmlRules(digester, newPrefix);
 
-        digester.addBeanPropertySetter(newPrefix + "/name");
         digester.addBeanPropertySetter(newPrefix + "/type");
         digester.addBeanPropertySetter(newPrefix + "/bodyContent");
         digester.addBeanPropertySetter(newPrefix + "/family");
@@ -130,9 +108,6 @@
         digester.addBeanPropertySetter(newPrefix + "/tagHandler");
         digester.addBeanPropertySetter(newPrefix + "/rendererType");
         digester.addBeanPropertySetter(newPrefix + "/faceletRendererType");
-        digester.addBeanPropertySetter(newPrefix + "/desc", "description");
-        digester.addBeanPropertySetter(newPrefix + "/longDesc",
-                "longDescription");
         digester.addBeanPropertySetter(newPrefix + "/configExcluded");
         digester.addBeanPropertySetter(newPrefix + "/serialuid");
         digester.addBeanPropertySetter(newPrefix + "/implements");
@@ -140,7 +115,6 @@
         digester.addBeanPropertySetter(newPrefix + "/generatedTagClass");
         digester.addBeanPropertySetter(newPrefix + "/template");
         
-        PropertyMeta.addXmlRules(digester, newPrefix);
         FacetMeta.addXmlRules(digester, prefix);
     }
 
@@ -149,7 +123,7 @@
      */
     public ComponentMeta()
     {
-        _properties = new LinkedHashMap();
+        super("component");
         _facets = new LinkedHashMap();
     }
 
@@ -159,11 +133,7 @@
      */
     public void merge(ComponentMeta other)
     {
-        //_name = ModelUtils.merge(this._name, other._name);
         _bodyContent = ModelUtils.merge(this._bodyContent, other._bodyContent);
-        _description = ModelUtils.merge(this._description, other._description);
-        _longDescription = ModelUtils.merge(this._longDescription,
-                other._longDescription);
 
         _type = ModelUtils.merge(this._type, other._type);
         _family = ModelUtils.merge(this._family, other._family);
@@ -226,53 +196,6 @@
         }
     }
 
-    /**
-     * Sets the name that the user will refer to instances of this component by.
-     * <p>
-     * In JSP tags, this value will be used as the JSP tag name.
-     * <p>
-     * This property is optional; if not set then this Model instance represents
-     * a base class that components can be derived from, but which cannot itself
-     * be instantiated as a component.
-     */
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /**
-     * Sets the brief description of this property.
-     * <p>
-     * This description is used in tooltips, etc.
-     */
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the long description of this property.
-     */
-    public void setLongDescription(String longDescription)
-    {
-        _longDescription = longDescription;
-    }
-
-    public String getLongDescription()
-    {
-        return _longDescription;
-    }
-
     public void setBodyContent(String bodyContent)
     {
         this._bodyContent = bodyContent;
@@ -453,43 +376,6 @@
         return ModelUtils.defaultOf(_children, true);
     }
 
-    /**
-     * Adds a property to this component.
-     */
-    public void addProperty(PropertyMeta property)
-    {
-        _properties.put(property.getName(), property);
-    }
-
-    public PropertyMeta getProperty(String propertyName)
-    {
-        return (PropertyMeta) _properties.get(propertyName);
-    }
-
-    /**
-     * Number of properties for this component
-     */
-    public int propertiesSize()
-    {
-        return _properties.size();
-    }
-
-    /**
-     * Returns true if this component has any properties.
-     */
-    public boolean hasProperties()
-    {
-        return _properties.size() > 0;
-    }
-
-    /**
-     * Returns an iterator for all properties
-     */
-    public Iterator properties()
-    {
-        return _properties.values().iterator();
-    }
-    
     public void addFacet(FacetMeta prop)
     {
         _facets.put(prop.getName(), prop);
@@ -507,10 +393,6 @@
             
     //THIS METHODS ARE USED FOR VELOCITY TO GET DATA AND GENERATE CLASSES
     
-    public Collection getPropertyList(){
-        return _properties.values();
-    }
-    
     public Collection getFacetList(){
         return _facets.values();
     }
@@ -520,7 +402,7 @@
     public Collection getPropertyTagList(){
         if (_propertyTagList == null){
             _propertyTagList = new ArrayList();
-            for (Iterator it = _properties.values().iterator(); it.hasNext();){
+            for (Iterator it = getPropertyList().iterator(); it.hasNext();){
                 PropertyMeta prop = (PropertyMeta) it.next();
                 if (!prop.isTagExcluded().booleanValue() &&
                         !prop.isInheritedTag().booleanValue()){
@@ -537,7 +419,7 @@
     public Collection getPropertyComponentList(){
         if (_propertyComponentList == null){
             _propertyComponentList = new ArrayList();
-            for (Iterator it = _properties.values().iterator(); it.hasNext();){
+            for (Iterator it = getPropertyList().iterator(); it.hasNext();){
                 PropertyMeta prop = (PropertyMeta) it.next();
                 if (!prop.isInherited().booleanValue() && prop.isGenerated().booleanValue()){
                     _propertyComponentList.add(prop);

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ConverterMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ConverterMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ConverterMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ConverterMeta.java Sun Jun 22 11:31:46 2008
@@ -22,10 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
 
 import org.apache.commons.digester.Digester;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.io.XmlWriter;
@@ -41,20 +38,13 @@
  * <li>implicitly used via its forClass property
  * </ul>
  */
-public class ConverterMeta extends ClassMeta implements PropertyHolder
+public class ConverterMeta extends ViewEntityMeta implements PropertyHolder
 {
-    static private final Logger _LOG = Logger.getLogger(ConverterMeta.class
-            .getName());
-
-    private String _description;
-    private String _longDescription;
-
     private String _converterId;
     private int _converterClassModifiers;
     
     //Some converters has its own tag class, so it's necessary to
     //add some properties for this cases (f:convertNumber or f:convertDateTime)
-    private String _name;
     private String _bodyContent;
     private String _tagClass;
     private String _tagSuperclass;
@@ -63,34 +53,19 @@
     private Boolean _generatedTagClass;
     private Boolean _configExcluded;
 
-    protected Map _properties;
     /**
      * Write an instance of this class out as xml.
      */
-    public static void writeXml(XmlWriter out, ConverterMeta cm)
+    protected void writeXmlSimple(XmlWriter out)
     {
-        out.beginElement("converter");
-
-        ClassMeta.writeXml(out, cm);
-
-        out.writeElement("converterId", cm._converterId);
-        out.writeElement("desc", cm._description);
-        out.writeElement("longDesc", cm._longDescription);
-        out.writeElement("name", cm._name);        
-        out.writeElement("bodyContent", cm._bodyContent);
-        out.writeElement("tagClass", cm._tagClass);
-        out.writeElement("tagSuperclass", cm._tagSuperclass);
-        out.writeElement("serialuidtag", cm._serialuidtag);
-        out.writeElement("generatedTagClass", cm._generatedTagClass);
-        out.writeElement("configExcluded", cm._configExcluded);
-
-        for (Iterator i = cm._properties.values().iterator(); i.hasNext();)
-        {
-            PropertyMeta prop = (PropertyMeta) i.next();
-            PropertyMeta.writeXml(out, prop);
-        }
-        
-        out.endElement("converter");
+        super.writeXmlSimple(out);
+        out.writeElement("converterId", _converterId);
+        out.writeElement("bodyContent", _bodyContent);
+        out.writeElement("tagClass", _tagClass);
+        out.writeElement("tagSuperclass", _tagSuperclass);
+        out.writeElement("serialuidtag", _serialuidtag);
+        out.writeElement("generatedTagClass", _generatedTagClass);
+        out.writeElement("configExcluded", _configExcluded);
     }
 
     /**
@@ -104,27 +79,22 @@
         digester.addObjectCreate(newPrefix, ConverterMeta.class);
         digester.addSetNext(newPrefix, "addConverter");
 
-        ClassMeta.addXmlRules(digester, newPrefix);
+        ViewEntityMeta.addXmlRules(digester, newPrefix);
 
         digester.addBeanPropertySetter(newPrefix + "/converterId");
-        digester.addBeanPropertySetter(newPrefix + "/desc", "description");
-        digester.addBeanPropertySetter(newPrefix + "/longDesc",
-                "longDescription");
-        digester.addBeanPropertySetter(newPrefix + "/name");        
         digester.addBeanPropertySetter(newPrefix + "/bodyContent");
         digester.addBeanPropertySetter(newPrefix + "/tagClass");
         digester.addBeanPropertySetter(newPrefix + "/tagSuperclass");
         digester.addBeanPropertySetter(newPrefix + "/serialuidtag");
         digester.addBeanPropertySetter(newPrefix + "/generatedTagClass");
         digester.addBeanPropertySetter(newPrefix + "/configExcluded");
-
-        PropertyMeta.addXmlRules(digester, newPrefix);
     }
     
     public ConverterMeta()
     {
-        _properties = new LinkedHashMap();        
+        super("converter");
     }
+
     /**
      * Merge the data in the specified other property into this one, throwing an
      * exception if there is an incompatibility.
@@ -135,12 +105,8 @@
      */
     public void merge(ConverterMeta other)
     {
-        _name = ModelUtils.merge(this._name, other._name);
+        super.merge(other);
         _bodyContent = ModelUtils.merge(this._bodyContent, other._bodyContent);
-        
-        _description = ModelUtils.merge(this._description, other._description);
-        _longDescription = ModelUtils.merge(this._longDescription,
-                other._longDescription);
 
         boolean inheritParentTag = false;
         //check if the parent set a tag class
@@ -160,7 +126,6 @@
 
         _converterId = ModelUtils.merge(this._converterId, other._converterId);
         
-        ModelUtils.mergeProps(this, other);
         // TODO: _converterClassMOdifiers
         
         if (inheritParentTag)
@@ -241,53 +206,6 @@
         return modifiers;
     }
 
-    /**
-     * Sets the brief description of this property.
-     * <p>
-     * This description is used in tooltips, etc.
-     */
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the long description of this property.
-     */
-    public void setLongDescription(String longDescription)
-    {
-        _longDescription = longDescription;
-    }
-
-    public String getLongDescription()
-    {
-        return _longDescription;
-    }
-    
-    /**
-     * Sets the name that the user will refer to instances of this component by.
-     * <p>
-     * In JSP tags, this value will be used as the JSP tag name.
-     * <p>
-     * This property is optional; if not set then this Model instance represents
-     * a base class that components can be derived from, but which cannot itself
-     * be instantiated as a component.
-     */
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-    
     public void setBodyContent(String bodyContent)
     {
         this._bodyContent = bodyContent;
@@ -353,56 +271,15 @@
     {
         return ModelUtils.defaultOf(_configExcluded,false);
     }    
-        
-    /**
-     * Adds a property to this component.
-     */
-    public void addProperty(PropertyMeta property)
-    {
-        _properties.put(property.getName(), property);
-    }
-
-    public PropertyMeta getProperty(String propertyName)
-    {
-        return (PropertyMeta) _properties.get(propertyName);
-    }
 
-    /**
-     * Number of properties for this component
-     */
-    public int propertiesSize()
-    {
-        return _properties.size();
-    }
-
-    /**
-     * Returns true if this component has any properties.
-     */
-    public boolean hasProperties()
-    {
-        return _properties.size() > 0;
-    }
-
-    /**
-     * Returns an iterator for all properties
-     */
-    public Iterator properties()
-    {
-        return _properties.values().iterator();
-    }
-    
     //THIS METHODS ARE USED FOR VELOCITY TO GET DATA AND GENERATE CLASSES
     
-    public Collection getPropertyList(){
-        return _properties.values();
-    }
-    
     private List _propertyTagList = null; 
     
     public Collection getPropertyTagList(){
         if (_propertyTagList == null){
             _propertyTagList = new ArrayList();
-            for (Iterator it = _properties.values().iterator(); it.hasNext();){
+            for (Iterator it = getPropertyList().iterator(); it.hasNext();){
                 PropertyMeta prop = (PropertyMeta) it.next();
                 if (!prop.isTagExcluded().booleanValue() &&
                         !prop.isInheritedTag().booleanValue()){

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyHolder.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyHolder.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyHolder.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyHolder.java Sun Jun 22 11:31:46 2008
@@ -19,6 +19,7 @@
 package org.apache.myfaces.buildtools.maven2.plugin.builder.model;
 
 import java.util.Iterator;
+import java.util.Map;
 
 /**
  * Interface for any artifact that has JSF properties on it.
@@ -30,4 +31,6 @@
     PropertyMeta getProperty(String name);
 
     void addProperty(PropertyMeta prop);
+    
+    Map getProperties();
 }

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/PropertyMeta.java Sun Jun 22 11:31:46 2008
@@ -379,12 +379,23 @@
     {
         return ModelUtils.defaultOf(_inherited, false);
     }
-    
+
     public void setInheritedTag(Boolean inheritedTag)
     {
         _inheritedTag = inheritedTag;
     }
 
+    /**
+     * Returns true if this property was inherited from an ancestor component
+     * which has no associated tag class.
+     * <p>
+     * When a tag class is generated for <i>this</i> component, then the tag
+     * class will need to define a setter method to handle this property.
+     * <p>
+     * However properties which are inherited from an ancestor component that
+     * does have a tag class will not need 
+     * @param inheritedTag
+     */
     public Boolean isInheritedTag()
     {
         return ModelUtils.defaultOf(_inheritedTag, false);

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RenderKitMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RenderKitMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RenderKitMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RenderKitMeta.java Sun Jun 22 11:31:46 2008
@@ -48,7 +48,7 @@
         
         for (Iterator it = rkm._renderers.values().iterator();it.hasNext();){
             RendererMeta rm = (RendererMeta) it.next();
-            RendererMeta.writeXml(out, rm);  
+            rm.writeXml(out);  
         }
         
         out.endElement("renderKit");        

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RendererMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RendererMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RendererMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/RendererMeta.java Sun Jun 22 11:31:46 2008
@@ -28,7 +28,6 @@
  */
 public class RendererMeta extends ClassMeta
 {
-
     private String _description;
     private String _componentFamily;
     private String _rendererType;
@@ -36,17 +35,13 @@
     /**
      * Write an instance of this class out as xml.
      */
-    public static void writeXml(XmlWriter out, RendererMeta rm)
+    protected void writeXmlSimple(XmlWriter out)
     {
-        out.beginElement("renderer");
-        
-        ClassMeta.writeXml(out, rm);
-        
-        out.writeElement("componentFamily", rm._componentFamily);
-        out.writeElement("rendererType", rm._rendererType);
-        out.writeElement("description", rm._description);
+        super.writeXmlSimple(out);
         
-        out.endElement("renderer");
+        out.writeElement("componentFamily", _componentFamily);
+        out.writeElement("rendererType", _rendererType);
+        out.writeElement("description", _description);
     }
     
     /**
@@ -72,6 +67,7 @@
      */
     public RendererMeta()
     {
+        super("renderer");
     }    
 
     /**

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/TagMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/TagMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/TagMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/TagMeta.java Sun Jun 22 11:31:46 2008
@@ -71,24 +71,21 @@
     /**
      * Write an instance of this class out as xml.
      */
-    public static void writeXml(XmlWriter out, TagMeta tm)
+    protected void writeXmlSimple(XmlWriter out)
     {
-        out.beginElement("tag");
+        super.writeXmlSimple(out);
 
-        ClassMeta.writeXml(out, tm);
-        out.writeElement("name", tm._name);
-        out.writeElement("bodyContent", tm._bodyContent);
-        out.writeElement("desc", tm._description);
-        out.writeElement("longDesc", tm._longDescription);
-        out.writeElement("tagHandler", tm._tagHandler);
+        out.writeElement("name", _name);
+        out.writeElement("bodyContent", _bodyContent);
+        out.writeElement("desc", _description);
+        out.writeElement("longDesc", _longDescription);
+        out.writeElement("tagHandler", _tagHandler);
 
-        for (Iterator i = tm._attributes.values().iterator(); i.hasNext();)
+        for (Iterator i = _attributes.values().iterator(); i.hasNext();)
         {
             AttributeMeta prop = (AttributeMeta) i.next();
             AttributeMeta.writeXml(out, prop);
         }
-
-        out.endElement("tag");
     }
 
     /**
@@ -118,6 +115,7 @@
      */
     public TagMeta()
     {
+        super("tag");
         _attributes = new LinkedHashMap();
     }
 

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ValidatorMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ValidatorMeta.java?rev=670392&r1=670391&r2=670392&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ValidatorMeta.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ValidatorMeta.java Sun Jun 22 11:31:46 2008
@@ -22,10 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
 
 import org.apache.commons.digester.Digester;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.io.XmlWriter;
@@ -34,18 +31,11 @@
  * Store metadata about a class that is either a JSF Validator, or some base
  * class or interface that a Validator can be derived from.
  */
-public class ValidatorMeta extends ClassMeta implements PropertyHolder
+public class ValidatorMeta extends ViewEntityMeta implements PropertyHolder
 {
-    static private final Logger _LOG = Logger.getLogger(ValidatorMeta.class
-            .getName());
-
-    private String _description;
-    private String _longDescription;
-
     private String _validatorId;
     private int _validatorClassModifiers;
     
-    private String _name;
     private String _bodyContent;
     private String _tagClass;
     private String _tagSuperclass;
@@ -54,38 +44,22 @@
     private Boolean _generatedComponentClass;
     private Boolean _generatedTagClass;
     private Boolean _configExcluded;
-    
-    protected Map _properties;
 
     /**
      * Write an instance of this class out as xml.
      */
-    public static void writeXml(XmlWriter out, ValidatorMeta vm)
+    protected void writeXmlSimple(XmlWriter out)
     {
-        out.beginElement("validator");
-
-        ClassMeta.writeXml(out, vm);
-
-        out.writeElement("validatorId", vm._validatorId);
-        out.writeElement("desc", vm._description);
-        out.writeElement("longDesc", vm._longDescription);
-        out.writeElement("name", vm._name);        
-        out.writeElement("bodyContent", vm._bodyContent);
-        out.writeElement("tagClass", vm._tagClass);
-        out.writeElement("tagSuperclass", vm._tagSuperclass);
-        out.writeElement("serialuidtag", vm._serialuidtag);
-        out.writeElement("generatedComponentClass", vm._generatedComponentClass);
-        out.writeElement("generatedTagClass", vm._generatedTagClass);
-        out.writeElement("configExcluded", vm._configExcluded);
+        super.writeXmlSimple(out);
 
-        for (Iterator i = vm._properties.values().iterator(); i.hasNext();)
-        {
-            PropertyMeta prop = (PropertyMeta) i.next();
-            PropertyMeta.writeXml(out, prop);
-        }
-
-        
-        out.endElement("validator");
+        out.writeElement("validatorId", _validatorId);
+        out.writeElement("bodyContent", _bodyContent);
+        out.writeElement("tagClass", _tagClass);
+        out.writeElement("tagSuperclass", _tagSuperclass);
+        out.writeElement("serialuidtag", _serialuidtag);
+        out.writeElement("generatedComponentClass", _generatedComponentClass);
+        out.writeElement("generatedTagClass", _generatedTagClass);
+        out.writeElement("configExcluded", _configExcluded);
     }
 
     /**
@@ -99,13 +73,9 @@
         digester.addObjectCreate(newPrefix, ValidatorMeta.class);
         digester.addSetNext(newPrefix, "addValidator");
 
-        ClassMeta.addXmlRules(digester, newPrefix);
+        ViewEntityMeta.addXmlRules(digester, newPrefix);
 
         digester.addBeanPropertySetter(newPrefix + "/validatorId");
-        digester.addBeanPropertySetter(newPrefix + "/desc", "description");
-        digester.addBeanPropertySetter(newPrefix + "/longDesc",
-                "longDescription");
-        digester.addBeanPropertySetter(newPrefix + "/name");        
         digester.addBeanPropertySetter(newPrefix + "/bodyContent");
         digester.addBeanPropertySetter(newPrefix + "/tagClass");
         digester.addBeanPropertySetter(newPrefix + "/tagSuperclass");
@@ -113,13 +83,11 @@
         digester.addBeanPropertySetter(newPrefix + "/generatedComponentClass");
         digester.addBeanPropertySetter(newPrefix + "/generatedTagClass");
         digester.addBeanPropertySetter(newPrefix + "/configExcluded");
-        
-        PropertyMeta.addXmlRules(digester, newPrefix);
     }
     
     public ValidatorMeta()
     {
-        _properties = new LinkedHashMap();        
+        super("validator");
     }
 
     /**
@@ -132,14 +100,20 @@
      */
     public void merge(ValidatorMeta other)
     {
-        _name = ModelUtils.merge(this._name, other._name);
+        super.merge(other);
+
         _bodyContent = ModelUtils.merge(this._bodyContent, other._bodyContent);
-        _description = ModelUtils.merge(this._description, other._description);
-        _longDescription = ModelUtils.merge(this._longDescription,
-                other._longDescription);
 
+        // inheritParentTag is true if the tag class to be generated for this
+        // artifact extends the tag class generated for the parent artifact.
+        // In this case, the tag for this class already inherits setter methods
+        // from its parent that handle all the inherited properties, so the
+        // tag class for this component just needs to handle its own properties.
+        //
+        // But when the tag class for this component does not extend the tag class
+        // for the parent component (because the parent component does not have
+        // a tag class) then we need to 
         boolean inheritParentTag = false;
-        //check if the parent set a tag class
         if (other._tagClass != null)
         {
             //The tagSuperclass is the tagClass of the parent
@@ -157,7 +131,6 @@
         
         _validatorId = ModelUtils.merge(this._validatorId, other._validatorId);
 
-        ModelUtils.mergeProps(this, other);
         // TODO: _validatorClassMOdifiers
         
         if (inheritParentTag)
@@ -233,53 +206,6 @@
 
         return modifiers;
     }
-
-    /**
-     * Sets the brief description of this property.
-     * <p>
-     * This description is used in tooltips, etc.
-     */
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the long description of this property.
-     */
-    public void setLongDescription(String longDescription)
-    {
-        _longDescription = longDescription;
-    }
-
-    public String getLongDescription()
-    {
-        return _longDescription;
-    }
-    
-    /**
-     * Sets the name that the user will refer to instances of this component by.
-     * <p>
-     * In JSP tags, this value will be used as the JSP tag name.
-     * <p>
-     * This property is optional; if not set then this Model instance represents
-     * a base class that components can be derived from, but which cannot itself
-     * be instantiated as a component.
-     */
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
     
     public void setBodyContent(String bodyContent)
     {
@@ -356,56 +282,22 @@
     {
         return ModelUtils.defaultOf(_configExcluded,false);
     }    
-        
-    /**
-     * Adds a property to this component.
-     */
-    public void addProperty(PropertyMeta property)
-    {
-        _properties.put(property.getName(), property);
-    }
-
-    public PropertyMeta getProperty(String propertyName)
-    {
-        return (PropertyMeta) _properties.get(propertyName);
-    }
-
-    /**
-     * Number of properties for this component
-     */
-    public int propertiesSize()
-    {
-        return _properties.size();
-    }
-
-    /**
-     * Returns true if this component has any properties.
-     */
-    public boolean hasProperties()
-    {
-        return _properties.size() > 0;
-    }
 
-    /**
-     * Returns an iterator for all properties
-     */
-    public Iterator properties()
-    {
-        return _properties.values().iterator();
-    }
-    
     //THIS METHODS ARE USED FOR VELOCITY TO GET DATA AND GENERATE CLASSES
-    
-    public Collection getPropertyList(){
-        return _properties.values();
-    }
-    
+
+    // A transient attribute that is computed on-demand from the model data
+    // but is not itself stored in the model.
+    //
+    // It holds a list of all the properties which need to be implemented
+    // on the tag class. This is a subset of the properties available on
+    // this component itself, and depends upon what the parent class
+    // of the generated tag already supports.
     private List _propertyTagList = null; 
     
     public Collection getPropertyTagList(){
         if (_propertyTagList == null){
             _propertyTagList = new ArrayList();
-            for (Iterator it = _properties.values().iterator(); it.hasNext();){
+            for (Iterator it = getPropertyList().iterator(); it.hasNext();){
                 PropertyMeta prop = (PropertyMeta) it.next();
                 if (!prop.isTagExcluded().booleanValue() &&
                         !prop.isInheritedTag().booleanValue()){
@@ -422,7 +314,7 @@
     public Collection getPropertyValidatorList(){
         if (_propertyValidatorList == null){
             _propertyValidatorList = new ArrayList();
-            for (Iterator it = _properties.values().iterator(); it.hasNext();){
+            for (Iterator it = getPropertyList().iterator(); it.hasNext();){
                 PropertyMeta prop = (PropertyMeta) it.next();
                 if (!prop.isInherited().booleanValue() && prop.isGenerated().booleanValue()){
                     _propertyValidatorList.add(prop);

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java?rev=670392&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java Sun Jun 22 11:31:46 2008
@@ -0,0 +1,196 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.myfaces.buildtools.maven2.plugin.builder.model;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.digester.Digester;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.io.XmlWriter;
+
+
+/**
+ * Base class for metadata about any class whose instances can be used in a
+ * JSF view.
+ * <p>
+ * This means Components, Converters, Validators.
+ */
+public abstract class ViewEntityMeta extends ClassMeta implements PropertyHolder
+{
+    private String _name;
+    private String _description;
+    private String _longDescription;
+    private Map _properties = new LinkedHashMap();
+
+    /**
+     * Add digester rules to repopulate an instance of this type from an xml
+     * file.
+     */
+    public static void addXmlRules(Digester digester, String prefix)
+    {
+        ClassMeta.addXmlRules(digester, prefix);
+
+        digester.addBeanPropertySetter(prefix + "/name");
+        digester.addBeanPropertySetter(prefix + "/desc", "description");
+        digester.addBeanPropertySetter(prefix + "/longDesc",
+                "longDescription");
+        PropertyMeta.addXmlRules(digester, prefix);
+    }
+
+    /**
+     * Constructor.
+     */
+    public ViewEntityMeta(String xmlElementName)
+    {
+        super(xmlElementName);
+    }
+
+    /**
+     * Implement callback method to write out the "simple" properties of
+     * this class as xml.
+     */
+    protected void writeXmlSimple(XmlWriter out)
+    {
+        super.writeXmlSimple(out);
+
+        out.writeElement("name", _name);
+    }
+
+    /**
+     * Implement callback method to write out the "complex" properties of
+     * this class as xml.
+     */
+    protected void writeXmlComplex(XmlWriter out)
+    {
+        super.writeXmlComplex(out);
+        out.writeElement("desc", _description);
+        out.writeElement("longDesc", _longDescription);
+        for (Iterator i = _properties.values().iterator(); i.hasNext();)
+        {
+            PropertyMeta prop = (PropertyMeta) i.next();
+            PropertyMeta.writeXml(out, prop);
+        }
+    }
+
+    protected void merge(ViewEntityMeta other)
+    {
+        super.merge(other);
+        // name cannot be merged
+        _description = ModelUtils.merge(this._description, other._description);
+        _longDescription = ModelUtils.merge(this._longDescription,
+                other._longDescription);
+        ModelUtils.mergeProps(this, other);
+    }
+
+
+    /**
+     * Sets the name that the user will refer to instances of this component by.
+     * <p>
+     * In JSP tags, this value will be used as the JSP tag name.
+     * <p>
+     * This property is optional; if not set then this Model instance represents
+     * a base class that components can be derived from, but which cannot itself
+     * be instantiated as a component.
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    /**
+     * Sets the brief description of this property.
+     * <p>
+     * This description is used in tooltips, etc.
+     */
+    public void setDescription(String description)
+    {
+        _description = description;
+    }
+
+    public String getDescription()
+    {
+        return _description;
+    }
+
+    /**
+     * Sets the long description of this property.
+     */
+    public void setLongDescription(String longDescription)
+    {
+        _longDescription = longDescription;
+    }
+
+    public String getLongDescription()
+    {
+        return _longDescription;
+    }
+
+    /**
+     * Adds a property to this component.
+     */
+    public void addProperty(PropertyMeta property)
+    {
+        _properties.put(property.getName(), property);
+    }
+
+    public PropertyMeta getProperty(String propertyName)
+    {
+        return (PropertyMeta) _properties.get(propertyName);
+    }
+
+    /**
+     * Number of properties for this component
+     */
+    public int propertiesSize()
+    {
+        return _properties.size();
+    }
+
+    /**
+     * Returns true if this component has any properties.
+     */
+    public boolean hasProperties()
+    {
+        return _properties.size() > 0;
+    }
+
+    public Map getProperties()
+    {
+        return _properties;
+    }
+
+    public Collection getPropertyList(){
+        return _properties.values();
+    }
+
+    /**
+     * Returns an iterator for all properties
+     */
+    public Iterator properties()
+    {
+        return _properties.values().iterator();
+    }
+}
\ No newline at end of file

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ViewEntityMeta.java
------------------------------------------------------------------------------
    svn:eol-style = native