You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2013/01/25 11:01:53 UTC

svn commit: r1438410 - in /felix/trunk/scrplugin: annotations/src/main/java/org/apache/felix/scr/annotations/ annotations/src/main/java/org/apache/felix/scrplugin/processing/ generator/src/main/java/org/apache/felix/scrplugin/description/ generator/src...

Author: cziegeler
Date: Fri Jan 25 10:01:52 2013
New Revision: 1438410

URL: http://svn.apache.org/viewvc?rev=1438410&view=rev
Log:
FELIX-3169 :  Add support for new PASSWORD attribute type of Metatype service 

Modified:
    felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/Property.java
    felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/description/PropertyType.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java

Modified: felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/Property.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/Property.java?rev=1438410&r1=1438409&r2=1438410&view=diff
==============================================================================
--- felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/Property.java (original)
+++ felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/Property.java Fri Jan 25 10:01:52 2013
@@ -18,7 +18,11 @@
  */
 package org.apache.felix.scr.annotations;
 
-import java.lang.annotation.*;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * The <code>Property</code> annotation defines properties which are made
@@ -130,6 +134,14 @@ public @interface Property {
     short[] shortValue() default {};
 
     /**
+     * The password value(s) of the property.
+     * This attribute should not be used in combination with any of the other
+     * value attributes or the type attribute.
+     * @since 1.8.0
+     */
+    String[] passwordValue() default {};
+
+    /**
      * Defines the cardinality of the property and its collection type. If the
      * cardinality is negative, the property is expected to be stored in a
      * {@link java.util.Vector} (primitive types such as boolean are boxed in

Modified: felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java?rev=1438410&r1=1438409&r2=1438410&view=diff
==============================================================================
--- felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java (original)
+++ felix/trunk/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java Fri Jan 25 10:01:52 2013
@@ -331,7 +331,7 @@ public class SCRAnnotationProcessor impl
 
     private static final String[] PROPERTY_VALUE_PROCESSING = new String[] { "String", "value", "String", "classValue", "Long",
             "longValue", "Double", "doubleValue", "Float", "floatValue", "Integer", "intValue", "Byte", "byteValue", "Char",
-            "charValue", "Boolean", "boolValue", "Short", "shortValue" };
+            "charValue", "Boolean", "boolValue", "Short", "shortValue", "Password", "passwordValue" };
 
     /**
      * Create properties descriptions

Modified: felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/description/PropertyType.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/description/PropertyType.java?rev=1438410&r1=1438409&r2=1438410&view=diff
==============================================================================
--- felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/description/PropertyType.java (original)
+++ felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/description/PropertyType.java Fri Jan 25 10:01:52 2013
@@ -29,7 +29,8 @@ public enum PropertyType {
     Char,
     Character,
     Boolean,
-    Short;
+    Short,
+    Passwort;
 
     public static PropertyType from(final Class<?> javaClass) {
         if ( javaClass.getName().equals(Long.class.getName())) {

Modified: felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java?rev=1438410&r1=1438409&r2=1438410&view=diff
==============================================================================
--- felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java (original)
+++ felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java Fri Jan 25 10:01:52 2013
@@ -50,7 +50,8 @@ import org.xml.sax.helpers.AttributesImp
  */
 public class MetaTypeIO {
 
-    private static final String NAMESPACE_URI = "http://www.osgi.org/xmlns/metatype/v1.0.0";
+    private static final String NAMESPACE_URI_10 = "http://www.osgi.org/xmlns/metatype/v1.0.0";
+    private static final String NAMESPACE_URI_12 = "http://www.osgi.org/xmlns/metatype/v1.2.0";
 
     private static final String INNER_NAMESPACE_URI = "";
 
@@ -124,6 +125,25 @@ public class MetaTypeIO {
     }
 
     /**
+     * Detect correct version to use.
+     * If password type is used, we have to use v1.2
+     */
+    private static String detectMetatypeVersion(final DescriptionContainer container) {
+        for(final ComponentContainer comp : container.getComponents()) {
+            if ( comp.getMetatypeContainer() != null ) {
+                final Iterator<MetatypeAttributeDefinition> i = comp.getMetatypeContainer().getProperties().iterator();
+                while ( i.hasNext() ) {
+                    final MetatypeAttributeDefinition ad = i.next();
+                    if ( ad.getType().equalsIgnoreCase("password") ) {
+                        return NAMESPACE_URI_12;
+                    }
+                }
+            }
+        }
+        return NAMESPACE_URI_10;
+    }
+
+    /**
      * Generate the xml top level element and start streaming
      * the meta data.
      * @param metaData
@@ -131,17 +151,19 @@ public class MetaTypeIO {
      * @throws SAXException
      */
     private static void write(final DescriptionContainer metaData, final List<ComponentContainer> components, final File file)
-            throws SCRDescriptorException {
+    throws SCRDescriptorException {
+        final String namespace = detectMetatypeVersion(metaData);
+
         try {
             final ContentHandler contentHandler = IOUtils.getSerializer(file);
 
             contentHandler.startDocument();
-            contentHandler.startPrefixMapping(PREFIX, NAMESPACE_URI);
+            contentHandler.startPrefixMapping(PREFIX, namespace);
 
             final AttributesImpl ai = new AttributesImpl();
             IOUtils.addAttribute(ai, "localization", MetaTypeService.METATYPE_DOCUMENTS_LOCATION + "/metatype");
 
-            contentHandler.startElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME, ai);
+            contentHandler.startElement(namespace, METADATA_ELEMENT, METADATA_ELEMENT_QNAME, ai);
             IOUtils.newline(contentHandler);
 
             for(final ComponentContainer comp : metaData.getComponents()) {
@@ -152,7 +174,7 @@ public class MetaTypeIO {
             }
 
             // end wrapper element
-            contentHandler.endElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME);
+            contentHandler.endElement(namespace, METADATA_ELEMENT, METADATA_ELEMENT_QNAME);
             IOUtils.newline(contentHandler);
             contentHandler.endPrefixMapping(PREFIX);
             contentHandler.endDocument();