You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2012/02/05 10:07:27 UTC

svn commit: r1240689 - in /felix/trunk/metatype/src: main/java/org/apache/felix/metatype/ test/java/org/apache/felix/metatype/

Author: marrs
Date: Sun Feb  5 09:07:27 2012
New Revision: 1240689

URL: http://svn.apache.org/viewvc?rev=1240689&view=rev
Log:
FELIX-3338 implemented support for optional attributes, and added a test case for it

Added:
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OptionalAttributes.java
Modified:
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/AD.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Attribute.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Designate.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/DesignateObject.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaData.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OCD.java
    felix/trunk/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/AD.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/AD.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/AD.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/AD.java Sun Feb  5 09:07:27 2012
@@ -19,7 +19,10 @@
 package org.apache.felix.metatype;
 
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.felix.metatype.internal.Activator;
 import org.osgi.service.log.LogService;
@@ -32,7 +35,7 @@ import org.osgi.service.metatype.Attribu
  *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class AD
+public class AD extends OptionalAttributes
 {
 
     /**

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Attribute.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Attribute.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Attribute.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Attribute.java Sun Feb  5 09:07:27 2012
@@ -24,7 +24,7 @@ package org.apache.felix.metatype;
  *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class Attribute
+public class Attribute extends OptionalAttributes
 {
 
     private String adRef;

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Designate.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Designate.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Designate.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/Designate.java Sun Feb  5 09:07:27 2012
@@ -25,7 +25,7 @@ package org.apache.felix.metatype;
  * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class Designate
+public class Designate extends OptionalAttributes
 {
 
     private String pid;

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/DesignateObject.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/DesignateObject.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/DesignateObject.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/DesignateObject.java Sun Feb  5 09:07:27 2012
@@ -29,7 +29,7 @@ import java.util.List;
  * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class DesignateObject
+public class DesignateObject extends OptionalAttributes
 {
 
     private String ocdRef;

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaData.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaData.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaData.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaData.java Sun Feb  5 09:07:27 2012
@@ -31,7 +31,7 @@ import java.util.Map;
  *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class MetaData
+public class MetaData extends OptionalAttributes
 {
 
     private String localePrefix;
@@ -39,7 +39,6 @@ public class MetaData
     private Map designates;
     private URL source;
 
-
     public String getLocalePrefix()
     {
         return localePrefix;

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java Sun Feb  5 09:07:27 2012
@@ -22,8 +22,11 @@ package org.apache.felix.metatype;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.metatype.internal.Activator;
 import org.kxml2.io.KXmlParser;
@@ -74,6 +77,14 @@ public class MetaDataReader
     /** The XML parser used to read the XML documents */
     private KXmlParser parser = new KXmlParser();
 
+    /** Sets of attributes belonging to XML elements. */
+    private final Set AD_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "name", "description", "id", "type", "cardinality", "min", "max", "default", "required" }));
+    private final Set ATTRIBUTE_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "adref", "content" }));
+    private final Set DESIGNATE_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "pid", "factoryPid", "bundle", "optional", "merge" }));
+    private final Set DESIGNATEOBJECT_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "ocdref" }));
+    private final Set METADATA_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "localization" }));
+    private final Set OCD_ATTRIBUTES = new HashSet(Arrays.asList(new String[] { "name", "description", "id" }));
+    
 
     /**
      * Parses the XML document provided by the <code>url</code>. The XML document
@@ -185,11 +196,27 @@ public class MetaDataReader
         return mti;
     }
 
+    
+    private void readOptionalAttributes(OptionalAttributes entity, Set attributes) {
+        int count = this.parser.getAttributeCount();
+        for (int i = 0; i < count; i++)
+        {
+            String name = this.parser.getAttributeName(i);
+            if (!attributes.contains(name))
+            {
+                String value = this.parser.getAttributeValue(i);
+                entity.addOptionalAttribute(name, value);
+            }
+        }
+    }
+    
 
     private MetaData readMetaData() throws IOException, XmlPullParserException
     {
         MetaData mti = this.createMetaData();
         mti.setLocalePrefix( this.getOptionalAttribute( "localization" ) );
+        
+        readOptionalAttributes(mti, METADATA_ATTRIBUTES);
 
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
@@ -231,6 +258,8 @@ public class MetaDataReader
         ocd.setId( this.getRequiredAttribute( "id" ) );
         ocd.setName( this.getRequiredAttribute( "name" ) );
         ocd.setDescription( this.getOptionalAttribute( "description" ) );
+        
+        readOptionalAttributes(ocd, OCD_ATTRIBUTES);
 
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
@@ -287,6 +316,8 @@ public class MetaDataReader
         designate.setBundleLocation( this.getOptionalAttribute( "bundle" ) );
         designate.setOptional( this.getOptionalAttribute( "optional", false ) );
         designate.setMerge( this.getOptionalAttribute( "merge", false ) );
+        
+        readOptionalAttributes(designate, DESIGNATE_ATTRIBUTES);
 
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
@@ -331,6 +362,8 @@ public class MetaDataReader
         ad.setDefaultValue( this.getOptionalAttribute( "default" ) );
         ad.setRequired( this.getOptionalAttribute( "required", true ) );
 
+        readOptionalAttributes(ad, AD_ATTRIBUTES);
+        
         Map options = new LinkedHashMap();
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
@@ -372,6 +405,8 @@ public class MetaDataReader
     {
         DesignateObject oh = this.createDesignateObject();
         oh.setOcdRef( this.getRequiredAttribute( "ocdref" ) );
+        
+        readOptionalAttributes(oh, DESIGNATEOBJECT_ATTRIBUTES);
 
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
@@ -408,6 +443,8 @@ public class MetaDataReader
         ah.setAdRef( this.getRequiredAttribute( "adref" ) );
         ah.addContent( this.getOptionalAttribute( "content" ), true );
 
+        readOptionalAttributes(ah, ATTRIBUTE_ATTRIBUTES);
+
         int eventType = this.parser.next();
         while ( eventType != XmlPullParser.END_DOCUMENT )
         {

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OCD.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OCD.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OCD.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OCD.java Sun Feb  5 09:07:27 2012
@@ -30,7 +30,7 @@ import java.util.Map;
  *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
-public class OCD
+public class OCD extends OptionalAttributes
 {
 
     private String id;

Added: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OptionalAttributes.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OptionalAttributes.java?rev=1240689&view=auto
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OptionalAttributes.java (added)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/OptionalAttributes.java Sun Feb  5 09:07:27 2012
@@ -0,0 +1,39 @@
+/*
+ * 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.felix.metatype;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class OptionalAttributes {
+    private Map optionalAttributes;
+    
+    public void addOptionalAttribute(String name, String value)
+    {
+        if (optionalAttributes == null)
+        {
+            optionalAttributes = new HashMap();
+        }
+        optionalAttributes.put(name, value);
+    }
+    
+    public Map getOptionalAttributes() {
+        return optionalAttributes;
+    }
+}

Modified: felix/trunk/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java?rev=1240689&r1=1240688&r2=1240689&view=diff
==============================================================================
--- felix/trunk/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java (original)
+++ felix/trunk/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java Sun Feb  5 09:07:27 2012
@@ -66,6 +66,20 @@ public class MetaDataReaderTest extends 
         assertNull( mti.getObjectClassDefinitions() );
     }
 
+    public void testOptionalAttributesInMetaData() throws IOException, XmlPullParserException
+    {
+        String name = "myattribute";
+        String value = "working";
+        String localization = "test";
+        String empty = "<MetaData " + name + "=\"" + value + "\" localization=\"" + localization + "\" />";
+        MetaData mti = read( empty );
+
+        assertEquals( localization, mti.getLocalePrefix() );
+        assertNull( mti.getObjectClassDefinitions() );
+        assertNotNull( mti.getOptionalAttributes() );
+        assertEquals( 1, mti.getOptionalAttributes().size() );
+        assertEquals( value, mti.getOptionalAttributes().get(name) );
+    }
 
     public void testWithNamespace_1_0_0() throws IOException, XmlPullParserException
     {