commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hls...@apache.org
Subject cvs commit: jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind HiveMindMessages.properties
Date Mon, 01 Mar 2004 22:56:27 GMT
hlship      2004/03/01 14:56:27

  Modified:    hivemind/xdocs descriptor.xml case1.xml
               hivemind/framework/src/test/hivemind/test/config
                        TestConversion.java
               hivemind/framework/src/java/org/apache/hivemind/parse
                        ConversionDescriptor.java DescriptorParser.java
               hivemind/framework/src/java/org/apache/hivemind/schema/rules
                        CreateObjectRule.java
               hivemind/framework/src/java/org/apache/hivemind
                        HiveMindMessages.properties
  Added:       hivemind/framework/src/test/hivemind/test/config
                        DuplicateAttribute.xml ComplexAttributeName.xml
                        ConversionParentMethod.xml ComplexNameItem.java
  Log:
  Rename parentMethod attribute of <conversion> to parent-method.
  Add tests for parent-method and a few other code coverage gaps.
  Mangle attribute names with dashes into equivalent property names (i.e., "complex-name"
to "complexName").
  
  Revision  Changes    Path
  1.31      +12 -3     jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml
  
  Index: descriptor.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- descriptor.xml	1 Mar 2004 01:08:02 -0000	1.30
  +++ descriptor.xml	1 Mar 2004 22:56:27 -0000	1.31
  @@ -179,7 +179,7 @@
   				</tr>
   				
   				<tr>
  -					<td>parentMethod</td>
  +					<td>parent-method</td>
   					<td>string</td>
   					<td>no</td>
   					<td>The name of a method of the parent object used to add the created object
  @@ -192,6 +192,13 @@
   				Contains: &map;
   				</p>
   			
  +		<p>
  +		Each attribute will be mapped to a property. A limited amount of name mangling occurs:
if the attribute name
  +		contains dashes, they are removed, and the character following is converted to upper
case.	So,
  +		an attribute named "complex-attribute-name" would be mapped to a property named "complexAttributeName".
Only
  +		attributes identified with a &attribute; element will be mapped, others will be ignored.
  +		</p>	
  +		
   		</section>
   		
   		<section name="create-instance">
  @@ -394,7 +401,9 @@
   					<td>
   					The corresponding property (of the Java object specified by the
   					enclosing &conversion;). If not specified, the property name
  -					will match the attribute name.
  +					will be based upon the attribute name (with the same
  +					mangling described in the description of
  +					&conversion;).
   					</td>
   				</tr>	
   				
  
  
  
  1.13      +12 -23    jakarta-commons-sandbox/hivemind/xdocs/case1.xml
  
  Index: case1.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/case1.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- case1.xml	26 Feb 2004 23:07:34 -0000	1.12
  +++ case1.xml	1 Mar 2004 22:56:27 -0000	1.13
  @@ -123,19 +123,12 @@
             Id of a service that implements the Executable interface.  
             </description>  
           </attribute>
  -        <rules>
  -          <create-object
  -            class="com.panorama.framework.startup.service.Task"
  -            />
  -          <read-attribute attribute="order" property="order"
  -            translator="int"/>
  -          <read-attribute attribute="title" property="title"/>
  -          <read-attribute attribute="class" property="executable"
  -            translator="object"/>
  -          <read-attribute attribute="service-id" property="executable" 
  -            translator="service"/>
  -          <invoke-parent method="addElement"/>
  -        </rules>
  +        
  +        <conversion class="com.panorama.framework.startup.service.Task">
  +          <map attribute="class" property="executable" translator="object"/>
  +          <map attribute="service-id" property="executable" translator="service"/>
  +        </conversion>
  +        
           <element name="invoke-static">
             <description>Used to invoke a public static method of a
               class.</description>
  @@ -146,15 +139,11 @@
               <description>Name of method to invoke; default is
                 "init".</description>
             </attribute>
  -          <rules>
  -            <create-object
  -              class="com.panorama.framework.startup.service.StaticTask"
  -              />
  -            <read-attribute attribute="class" property="className"/>
  -            <read-attribute attribute="method" property="methodName"
  -              />
  -            <invoke-parent method="setExecutable"/>
  -          </rules>
  +          
  +          <conversion class="com.panorama.framework.startup.service.StaticTask" parent-method="setExecutable">
  +            <map attribute="class" property="className"/>
  +            <map attribute="method" property="methodName"/>
  +          </conversion>
           </element>
         </element>
       </schema>
  
  
  
  1.2       +62 -1     jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/TestConversion.java
  
  Index: TestConversion.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/TestConversion.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestConversion.java	1 Mar 2004 01:08:02 -0000	1.1
  +++ TestConversion.java	1 Mar 2004 22:56:27 -0000	1.2
  @@ -53,6 +53,27 @@
           assertSame(builderFactory, d.getFactory());
       }
   
  +    public void testParentMethod() throws Exception
  +    {
  +        Registry r = buildFrameworkRegistry("ConversionParentMethod.xml");
  +
  +        List l = r.getConfiguration("hivemind.test.config.ConversionParentMethod");
  +
  +        assertEquals(1, l.size());
  +
  +        DataItem d = (DataItem) l.get(0);
  +
  +        assertEquals("builder", d.getName());
  +        assertEquals(5, d.getCount());
  +
  +        ServiceImplementationFactory builderFactory =
  +            (ServiceImplementationFactory) r.getService(
  +                "hivemind.BuilderFactory",
  +                ServiceImplementationFactory.class);
  +
  +        assertSame(builderFactory, d.getFactory());
  +    }
  +
       public void testPropertyNameDefaultsToAttributeName() throws Exception
       {
           Registry r = buildFrameworkRegistry("Basics2.xml");
  @@ -74,6 +95,19 @@
           assertSame(builderFactory, d.getFactory());
       }
   
  +    public void testComplexAttributeName() throws Exception
  +    {
  +        Registry r = buildFrameworkRegistry("ComplexAttributeName.xml");
  +
  +        List l = r.getConfiguration("hivemind.test.config.ComplexAttributeName");
  +
  +        assertEquals(1, l.size());
  +
  +        ComplexNameItem cni = (ComplexNameItem) l.get(0);
  +
  +        assertEquals("fred", cni.getComplexAttributeName());
  +    }
  +
       public void testExtraAttributeNames() throws Exception
       {
           interceptLogging();
  @@ -92,6 +126,33 @@
   
           assertEquals("lamb", d.getName());
           assertEquals(95, d.getCount());
  +
  +        ServiceImplementationFactory builderFactory =
  +            (ServiceImplementationFactory) r.getService(
  +                "hivemind.BuilderFactory",
  +                ServiceImplementationFactory.class);
  +
  +        assertSame(builderFactory, d.getFactory());
  +    }
  +
  +    public void testDuplicateAttribute() throws Exception
  +    {
  +        interceptLogging();
  +
  +        Registry r = buildFrameworkRegistry("DuplicateAttribute.xml");
  +
  +        assertLoggedMessagePattern(
  +            "Mapping for attribute item-name \\(at .*\\) conflicts with a previous "
  +                + "mapping \\(at .*\\) and has been ignored\\.");
  +
  +        List l = r.getConfiguration("hivemind.test.config.DuplicateAttribute");
  +
  +        assertEquals(1, l.size());
  +
  +        DataItem d = (DataItem) l.get(0);
  +
  +        assertEquals("wesley", d.getName());
  +        assertEquals(15, d.getCount());
   
           ServiceImplementationFactory builderFactory =
               (ServiceImplementationFactory) r.getService(
  
  
  
  1.1                  jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/DuplicateAttribute.xml
  
  Index: DuplicateAttribute.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: DuplicateAttribute.xml,v 1.1 2004/03/01 22:56:27 hlship Exp $ -->
  <module id="hivemind.test.config" version="1.0.0">
  
  	<configuration-point id="DuplicateAttribute">
  	  <schema>
  		  <element name="data-item">
  			
  		  	<attribute name="item-name" required="true"/>
  			  <attribute name="count"/>
  			  <attribute name="service-id"/>
  			
  			  <conversion class="hivemind.test.config.DataItem">
  				  <map attribute="item-name" property="name"/>
  				  <map attribute="service-id" property="factory" translator="service"/>
  				  <map attribute="item-name" property="fred"/>
  			  </conversion>
  			
  		  </element>	
  		</schema>	
  	</configuration-point>
  	
  	<contribution configuration-id="DuplicateAttribute">
  		<data-item item-name="wesley" count="15" service-id="hivemind.BuilderFactory"/>

  	</contribution>
  
  </module>
  
  
  1.1                  jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/ComplexAttributeName.xml
  
  Index: ComplexAttributeName.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ComplexAttributeName.xml,v 1.1 2004/03/01 22:56:27 hlship Exp $ -->
  <module id="hivemind.test.config" version="1.0.0">
  
  	<configuration-point id="ComplexAttributeName">
  	  <schema>
  		  <element name="data-item">
  			
  		  	<attribute name="complex-attribute-name" required="true"/>
  			
  			  <conversion class="hivemind.test.config.ComplexNameItem"/>
  			
  		  </element>	
  		</schema>	
  	</configuration-point>
  	
  	<contribution configuration-id="ComplexAttributeName">
  		<data-item complex-attribute-name="fred"/>	
  	</contribution>
  
  </module>
  
  
  1.1                  jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/ConversionParentMethod.xml
  
  Index: ConversionParentMethod.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ConversionParentMethod.xml,v 1.1 2004/03/01 22:56:27 hlship Exp $ -->
  <module id="hivemind.test.config" version="1.0.0">
  
  	<configuration-point id="ConversionParentMethod">
  	  <schema>
  		  <element name="data-item">
  			
  		  	<attribute name="item-name" required="true"/>
  			  <attribute name="count"/>
  			  <attribute name="service-id"/>
  			
  			  <conversion class="hivemind.test.config.DataItem" parent-method="addElement">
  				  <map attribute="item-name" property="name"/>
  				  <map attribute="service-id" property="factory" translator="service"/>	
  			  </conversion>
  			
  		  </element>	
  		</schema>	
  	</configuration-point>
  	
  	<contribution configuration-id="ConversionParentMethod">
  		<data-item item-name="builder" count="5" service-id="hivemind.BuilderFactory"/>

  	</contribution>
  
  </module>
  
  
  1.1                  jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/config/ComplexNameItem.java
  
  Index: ComplexNameItem.java
  ===================================================================
  package hivemind.test.config;
  
  import org.apache.hivemind.impl.BaseLocatable;
  
  
  public class ComplexNameItem extends BaseLocatable
  {
  	private String _complexAttributeName;
  	
      public String getComplexAttributeName()
      {
          return _complexAttributeName;
      }
  
      public void setComplexAttributeName(String string)
      {
          _complexAttributeName = string;
      }
  
  }
  
  
  
  1.2       +46 -3     jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/parse/ConversionDescriptor.java
  
  Index: ConversionDescriptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/parse/ConversionDescriptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ConversionDescriptor.java	1 Mar 2004 01:08:02 -0000	1.1
  +++ ConversionDescriptor.java	1 Mar 2004 22:56:27 -0000	1.2
  @@ -58,6 +58,12 @@
           setLocation(location);
       }
   
  +	/**
  +	 * Adds a mapping for an attribute; these come from &lt;map&gt;
  +	 * elements nested within the &lt;conversion&gt; element.  A check
  +	 * for duplicate attribute mappings (that is, duplicated attribute name),
  +	 * and an error is logged (and the duplicate ignored).
  +	 */
       public void addAttributeMapping(AttributeMappingDescriptor descriptor)
       {
           String attributeName = descriptor.getAttributeName();
  @@ -90,6 +96,11 @@
           _parentMethodName = string;
       }
   
  +	/**
  +	 * Invoked once all &lt;map&gt; elements have been processed; this creates
  +	 * {@link org.apache.hivemind.schema.Rule}s that are added
  +	 * to the {@link ElementModelImpl}.
  +	 */
       public void addRulesForModel()
       {
           _elementModel.addRule(new CreateObjectRule(_className));
  @@ -116,7 +127,7 @@
                   _elementModel.addRule(
                       new ReadAttributeRule(
                           attributeName,
  -                        attributeName,
  +                        constructPropertyName(attributeName),
                           _defaultTranslator,
                           getLocation()));
               }
  @@ -124,7 +135,7 @@
               {
                   String propertyName = amd.getPropertyName();
                   if (propertyName == null)
  -                    propertyName = attributeName;
  +                    propertyName = constructPropertyName(attributeName);
   
                   _elementModel.addRule(
                       new ReadAttributeRule(
  @@ -146,4 +157,36 @@
                       getLocation()));
       }
   
  +    private String constructPropertyName(String attributeName)
  +    {
  +        int dashx = attributeName.indexOf('-');
  +        if (dashx < 0)
  +            return attributeName;
  +
  +        int length = attributeName.length();
  +        StringBuffer buffer = new StringBuffer(length);
  +
  +        buffer.append(attributeName.substring(0, dashx));
  +        boolean toUpper = true;
  +
  +        for (int i = dashx + 1; i < length; i++)
  +        {
  +            char ch = attributeName.charAt(i);
  +
  +            if (ch == '-')
  +            {
  +                toUpper = true;
  +                continue;
  +            }
  +
  +            if (toUpper)
  +                ch = Character.toUpperCase(ch);
  +
  +            buffer.append(ch);
  +
  +            toUpper = false;
  +        }
  +
  +        return buffer.toString();
  +    }
   }
  
  
  
  1.4       +87 -1     jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java
  
  Index: DescriptorParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DescriptorParser.java	29 Feb 2004 20:57:09 -0000	1.3
  +++ DescriptorParser.java	1 Mar 2004 22:56:27 -0000	1.4
  @@ -176,6 +176,13 @@
       private static final int STATE_COLLECT_SERVICE_PARAMETERS = 12;
   
       /**
  +     * Used with the &lt;conversion&gt; element (an alternative to
  +     * using &lt;rules&gt;. Finds &lt;map&gt; elements.
  +     */
  +
  +    public static final int STATE_CONVERSION = 13;
  +
  +    /**
        * Represents building Element hierarchy as a light-wieght DOM.
        */
   
  @@ -313,6 +320,20 @@
           CUSTOM_ATTRIBUTES.put("class", Boolean.TRUE);
       }
   
  +    private final Map CONVERSION_ATTRIBUTES = new HashMap();
  +    {
  +        CONVERSION_ATTRIBUTES.put("class", Boolean.TRUE);
  +        CONVERSION_ATTRIBUTES.put("parent-method", Boolean.FALSE);
  +    }
  +
  +    private final Map MAP_ATTRIBUTES = new HashMap();
  +
  +    {
  +        MAP_ATTRIBUTES.put("attribute", Boolean.TRUE);
  +        MAP_ATTRIBUTES.put("property", Boolean.FALSE);
  +        MAP_ATTRIBUTES.put("translator", Boolean.FALSE);
  +    }
  +
       private final Map OCCURS_MAP = new HashMap();
   
       {
  @@ -798,6 +819,11 @@
                   beginCollectServiceParameters(qName);
                   break;
   
  +            case STATE_CONVERSION :
  +
  +                beginConversion(qName);
  +                break;
  +
               default :
   
                   unexpectedElement(qName);
  @@ -816,6 +842,11 @@
                   endLWDom();
                   break;
   
  +            case STATE_CONVERSION :
  +
  +                endConversion();
  +                break;
  +
               default :
                   break;
           }
  @@ -1208,6 +1239,25 @@
               return;
           }
   
  +        if (elementName.equals("conversion"))
  +        {
  +            ConversionDescriptor cd =
  +                new ConversionDescriptor(elementModel, getTranslator("smart"), getLocation());
  +
  +            push(elementName, cd, STATE_CONVERSION);
  +
  +            checkAttributes(CONVERSION_ATTRIBUTES);
  +
  +            cd.setClassName(getAttribute("class"));
  +
  +            String methodName = getAttribute("parent-method");
  +
  +            if (methodName != null)
  +                cd.setParentMethodName(methodName);
  +
  +            return;
  +        }
  +
           if (elementName.equals("rules"))
           {
               push(elementName, elementModel, STATE_RULES);
  @@ -1223,6 +1273,42 @@
           }
   
           unexpectedElement(elementName);
  +    }
  +
  +    private void beginConversion(String elementName)
  +    {
  +        if (elementName.equals("map"))
  +        {
  +            ConversionDescriptor cd = (ConversionDescriptor) peekObject();
  +
  +            AttributeMappingDescriptor amd = new AttributeMappingDescriptor();
  +
  +            push(elementName, amd, STATE_NO_CONTENT);
  +
  +            checkAttributes(MAP_ATTRIBUTES);
  +
  +            amd.setAttributeName(getAttribute("attribute"));
  +            amd.setPropertyName(getAttribute("property"));
  +
  +            String translator = getAttribute("translator");
  +            if (translator == null)
  +                translator = "smart";
  +
  +            amd.setTranslator(getTranslator(translator));
  +
  +            cd.addAttributeMapping(amd);
  +
  +            return;
  +        }
  +
  +        unexpectedElement(elementName);
  +    }
  +
  +    private void endConversion()
  +    {
  +        ConversionDescriptor cd = (ConversionDescriptor) peekObject();
  +
  +        cd.addRulesForModel();
       }
   
       private void beginRules(String elementName)
  
  
  
  1.3       +10 -1     jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/schema/rules/CreateObjectRule.java
  
  Index: CreateObjectRule.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/schema/rules/CreateObjectRule.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CreateObjectRule.java	29 Feb 2004 20:57:08 -0000	1.2
  +++ CreateObjectRule.java	1 Mar 2004 22:56:27 -0000	1.3
  @@ -33,6 +33,15 @@
   {
       private String _className;
   
  +	public CreateObjectRule()
  +	{
  +	}
  +
  +	public CreateObjectRule(String className)
  +	{
  +		_className = className;
  +	}
  +
       /**
        * Creates the new object and pushes it onto the processor's stack.  If the
        * object implement {@link LocationHolder} then
  
  
  
  1.5       +2 -2      jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties
  
  Index: HiveMindMessages.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HiveMindMessages.properties	1 Mar 2004 01:08:03 -0000	1.4
  +++ HiveMindMessages.properties	1 Mar 2004 22:56:27 -0000	1.5
  @@ -62,7 +62,7 @@
   DescriptorParser.invalid-id-format=Attribute {0} ({1}) of element {2} (at {3}) is not a
valid id.
   DescriptorParser.unable-to-resolve-schema=Unable to resolve reference to schema ''{0}''
at {1}.
   
  -ConversionDescriptor.dupe-attribute-mapping=Mapping for attribute {0} (at {1}) conflicts
with a previous mapping (at {2}) as has been ignored.
  +ConversionDescriptor.dupe-attribute-mapping=Mapping for attribute {0} (at {1}) conflicts
with a previous mapping (at {2}) and has been ignored.
   ConversionDescriptor.extra-mappings=Mappings for unknown attribute(s) {0} (for element
{1} at {2}) have been ignored.
   
   ExternalParser.missing-resource=Unable to locate {0}.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message