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 2012/08/31 09:37:46 UTC

svn commit: r1379336 - in /felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin: ./ helper/ om/metatype/ xml/

Author: cziegeler
Date: Fri Aug 31 07:37:45 2012
New Revision: 1379336

URL: http://svn.apache.org/viewvc?rev=1379336&view=rev
Log:
FELIX-3641 :  Option to generate separate descriptor files 

Removed:
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/MTObject.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/MetaData.java
Modified:
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/Designate.java
    felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java

Modified: felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java?rev=1379336&r1=1379335&r2=1379336&view=diff
==============================================================================
--- felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java (original)
+++ felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java Fri Aug 31 07:37:45 2012
@@ -46,13 +46,10 @@ import org.apache.felix.scrplugin.helper
 import org.apache.felix.scrplugin.helper.Validator;
 import org.apache.felix.scrplugin.om.metatype.AttributeDefinition;
 import org.apache.felix.scrplugin.om.metatype.Designate;
-import org.apache.felix.scrplugin.om.metatype.MTObject;
-import org.apache.felix.scrplugin.om.metatype.MetaData;
 import org.apache.felix.scrplugin.om.metatype.OCD;
 import org.apache.felix.scrplugin.xml.ComponentDescriptorIO;
 import org.apache.felix.scrplugin.xml.MetaTypeIO;
 import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.metatype.MetaTypeService;
 
 /**
  * The <code>SCRDescriptorGenerator</code> class does the hard work of
@@ -152,10 +149,6 @@ public class SCRDescriptorGenerator {
         this.scanner = new ClassScanner(logger, iLog, project, aProcessor);
         final List<ClassDescription> scannedDescriptions = scanner.scanSources();
 
-        // setup metadata
-        final MetaData metaData = new MetaData();
-        metaData.setLocalization(MetaTypeService.METATYPE_DOCUMENTS_LOCATION + "/metatype");
-
         final List<ComponentContainer> processedContainers = new ArrayList<ComponentContainer>();
         for (final ClassDescription desc : scannedDescriptions) {
             this.logger.debug("Processing component class " + desc.getSource());
@@ -166,7 +159,7 @@ public class SCRDescriptorGenerator {
                              " Check the annotations and merge the definitions to a single definition.",
                                 desc.getSource());
             } else {
-                final ComponentContainer container = this.createComponent(desc, metaData, iLog);
+                final ComponentContainer container = this.createComponent(desc, iLog);
                 if (container.getComponentDescription().getSpecVersion() != null) {
                     if ( specVersion == null ) {
                         specVersion = container.getComponentDescription().getSpecVersion();
@@ -275,7 +268,7 @@ public class SCRDescriptorGenerator {
         // create result and generate files
         final Result result = new Result();
 
-        result.setMetatypeFiles(MetaTypeIO.generateDescriptors(metaData, this.options, this.logger));
+        result.setMetatypeFiles(MetaTypeIO.generateDescriptors(module, this.options, this.logger));
         result.setScrFiles(ComponentDescriptorIO.generateDescriptorFiles(module, this.options, logger));
 
         return result;
@@ -285,7 +278,6 @@ public class SCRDescriptorGenerator {
      * Create the SCR objects based on the descriptions
      */
     private ComponentContainer createComponent(final ClassDescription desc,
-                    final MetaData metaData,
                     final IssueLog iLog) {
         final ComponentDescription componentDesc = desc.getDescription(ComponentDescription.class);
 
@@ -294,12 +286,14 @@ public class SCRDescriptorGenerator {
             componentDesc.setSpecVersion(SpecVersion.VERSION_1_2);
         }
 
+        final ComponentContainer container = new ComponentContainer(desc, componentDesc);
+
         // Create metatype (if required)
         final OCD ocd;
         if ( !componentDesc.isAbstract() && componentDesc.isCreateMetatype() ) {
             // OCD
             ocd = new OCD();
-            metaData.addOCD( ocd );
+            container.setOCD( ocd );
             ocd.setId( componentDesc.getName() );
             if ( componentDesc.getLabel() != null ) {
                 ocd.setName( componentDesc.getLabel() );
@@ -314,7 +308,7 @@ public class SCRDescriptorGenerator {
 
             // Designate
             final Designate designate = new Designate();
-            metaData.addDesignate( designate );
+            container.setDesignate( designate );
             designate.setPid( componentDesc.getName() );
 
             // Factory pid
@@ -326,16 +320,10 @@ public class SCRDescriptorGenerator {
                         + " should not set metatype factory pid.", desc.getSource() );
                 }
             }
-            // MTObject
-            final MTObject mtobject = new MTObject();
-            designate.setObject( mtobject );
-            mtobject.setOcdref( componentDesc.getName() );
         } else {
             ocd = null;
         }
 
-        final ComponentContainer container = new ComponentContainer(desc, componentDesc);
-
         ClassDescription current = desc;
         boolean inherit;
         do {

Modified: felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java?rev=1379336&r1=1379335&r2=1379336&view=diff
==============================================================================
--- felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java (original)
+++ felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java Fri Aug 31 07:37:45 2012
@@ -26,6 +26,8 @@ import org.apache.felix.scrplugin.descri
 import org.apache.felix.scrplugin.description.PropertyDescription;
 import org.apache.felix.scrplugin.description.ReferenceDescription;
 import org.apache.felix.scrplugin.description.ServiceDescription;
+import org.apache.felix.scrplugin.om.metatype.Designate;
+import org.apache.felix.scrplugin.om.metatype.OCD;
 
 
 /**
@@ -54,6 +56,12 @@ public class ComponentContainer {
     /** All properties. */
     private final Map<String, PropertyDescription> allProperties = new LinkedHashMap<String, PropertyDescription>();
 
+    /** Metatype: OCD. */
+    private OCD ocd;
+
+    /** Metatype: Designate. */
+    private Designate designate;
+
     /**
      * Create a new component container
      * @param classDescription     Class description
@@ -123,4 +131,20 @@ public class ComponentContainer {
                         + ", serviceDescription=" + serviceDescription + ", allReferences=" + allReferences + ", allProperties="
                         + allProperties + "]";
     }
+
+    public OCD getOCD() {
+        return ocd;
+    }
+
+    public void setOCD(final OCD ocd) {
+        this.ocd = ocd;
+    }
+
+    public Designate getDesignate() {
+        return designate;
+    }
+
+    public void setDesignate(final Designate designate) {
+        this.designate = designate;
+    }
 }

Modified: felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/Designate.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/Designate.java?rev=1379336&r1=1379335&r2=1379336&view=diff
==============================================================================
--- felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/Designate.java (original)
+++ felix/trunk/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/om/metatype/Designate.java Fri Aug 31 07:37:45 2012
@@ -24,8 +24,6 @@ public class Designate {
 
     protected String factoryPid;
 
-    protected MTObject object;
-
     public String getPid() {
         return this.pid;
     }
@@ -41,12 +39,4 @@ public class Designate {
     public void setFactoryPid(String pid) {
         this.factoryPid = pid;
     }
-
-    public MTObject getObject() {
-        return this.object;
-    }
-
-    public void setObject(MTObject object) {
-        this.object = object;
-    }
 }

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=1379336&r1=1379335&r2=1379336&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 Aug 31 07:37:45 2012
@@ -27,12 +27,13 @@ import java.util.Map;
 import org.apache.felix.scrplugin.Log;
 import org.apache.felix.scrplugin.Options;
 import org.apache.felix.scrplugin.SCRDescriptorException;
+import org.apache.felix.scrplugin.helper.ComponentContainer;
+import org.apache.felix.scrplugin.helper.DescriptionContainer;
 import org.apache.felix.scrplugin.helper.StringUtils;
 import org.apache.felix.scrplugin.om.metatype.AttributeDefinition;
 import org.apache.felix.scrplugin.om.metatype.Designate;
-import org.apache.felix.scrplugin.om.metatype.MTObject;
-import org.apache.felix.scrplugin.om.metatype.MetaData;
 import org.apache.felix.scrplugin.om.metatype.OCD;
+import org.osgi.service.metatype.MetaTypeService;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
@@ -70,30 +71,42 @@ public class MetaTypeIO {
     private static final String OPTION_ELEMENT = "Option";
     private static final String OPTION_ELEMENT_QNAME = OPTION_ELEMENT;
 
-    public static List<String> generateDescriptors(final MetaData metaData, final Options options, final Log logger)
+    public static List<String> generateDescriptors(final DescriptionContainer module,
+                    final Options options,
+                    final Log logger)
     throws SCRDescriptorException {
+        int metatypeCount = 0;
+        for(final ComponentContainer component : module.getComponents()) {
+            if ( component.getOCD() != null ) {
+                metatypeCount++;
+            }
+        }
         // write meta type info if there is a file name
         if (!StringUtils.isEmpty(options.getMetaTypeName())) {
-            final String path = "OSGI-INF" + File.separator + "metatype" + File.separator + options.getMetaTypeName();
-            final File mtFile = new File(options.getOutputDirectory(), path);
-            final int size = metaData.getOCDs().size() + metaData.getDesignates().size();
-            if (size > 0) {
-                logger.info("Generating " + size + " MetaType Descriptors to " + mtFile);
+            final File parentDir = new File(options.getOutputDirectory(), "OSGI-INF");
+            final File mtDir = new File(parentDir, "metatype");
+
+            final File mtFile = new File(mtDir, options.getMetaTypeName());
+
+            if (metatypeCount > 0) {
+                logger.info("Generating " + metatypeCount + " MetaType Descriptors to " + mtFile);
                 mtFile.getParentFile().mkdirs();
-                MetaTypeIO.write(metaData, mtFile);
-                return Collections.singletonList(path.replace(File.separatorChar, '/'));
+                MetaTypeIO.write(module, mtFile);
+                return Collections.singletonList(parentDir.getName() + '/' + mtDir.getName() + '/' + mtFile.getName());
             }
             if (mtFile.exists()) {
                 mtFile.delete();
             }
 
         } else {
-            logger.info("Meta type file name is not set: meta type info is not written.");
+            if ( metatypeCount > 0 ) {
+                logger.info("Meta type file name is not set: meta type info is not written.");
+            }
         }
         return null;
     }
 
-    private static void write(final MetaData metaData, final File file)
+    private static void write(final DescriptionContainer metaData, final File file)
     throws SCRDescriptorException {
         try {
             generateXML(metaData, IOUtils.getSerializer(file));
@@ -109,22 +122,22 @@ public class MetaTypeIO {
      * @param contentHandler
      * @throws SAXException
      */
-    private static void generateXML(final MetaData metaData, final ContentHandler contentHandler)
+    private static void generateXML(final DescriptionContainer metaData, final ContentHandler contentHandler)
     throws SAXException {
         contentHandler.startDocument();
         contentHandler.startPrefixMapping(PREFIX, NAMESPACE_URI);
 
         final AttributesImpl ai = new AttributesImpl();
-        IOUtils.addAttribute(ai, "localization", metaData.getLocalization());
+        IOUtils.addAttribute(ai, "localization", MetaTypeService.METATYPE_DOCUMENTS_LOCATION + "/metatype");
 
         contentHandler.startElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME, ai);
         IOUtils.newline(contentHandler);
 
-        for(final OCD ocd : metaData.getOCDs()) {
-            generateXML(ocd, contentHandler);
-        }
-        for(final Designate d : metaData.getDesignates()) {
-            generateXML(d, contentHandler);
+        for(final ComponentContainer comp : metaData.getComponents()) {
+            if ( comp.getOCD() != null ) {
+                generateXML(comp.getOCD(), contentHandler);
+                generateXML(comp.getDesignate(), contentHandler);
+            }
         }
 
         // end wrapper element
@@ -199,7 +212,7 @@ public class MetaTypeIO {
         IOUtils.newline(contentHandler);
     }
 
-    private static void generateXML(Designate designate, ContentHandler contentHandler)
+    private static void generateXML(final Designate designate, final ContentHandler contentHandler)
     throws SAXException {
         final AttributesImpl ai = new AttributesImpl();
         IOUtils.addAttribute(ai, "pid", designate.getPid());
@@ -208,17 +221,17 @@ public class MetaTypeIO {
         contentHandler.startElement(INNER_NAMESPACE_URI, DESIGNATE_ELEMENT, DESIGNATE_ELEMENT_QNAME, ai);
         IOUtils.newline(contentHandler);
 
-        generateXML(designate.getObject(), contentHandler);
+        generateObjectXML(designate, contentHandler);
 
         IOUtils.indent(contentHandler, 1);
         contentHandler.endElement(INNER_NAMESPACE_URI, DESIGNATE_ELEMENT, DESIGNATE_ELEMENT_QNAME);
         IOUtils.newline(contentHandler);
     }
 
-    private static void generateXML(MTObject obj, ContentHandler contentHandler)
+    private static void generateObjectXML(final Designate obj, final ContentHandler contentHandler)
     throws SAXException {
         final AttributesImpl ai = new AttributesImpl();
-        IOUtils.addAttribute(ai, "ocdref", obj.getOcdref());
+        IOUtils.addAttribute(ai, "ocdref", obj.getPid());
         IOUtils.indent(contentHandler, 2);
         contentHandler.startElement(INNER_NAMESPACE_URI, OBJECT_ELEMENT, OBJECT_ELEMENT_QNAME, ai);
         contentHandler.endElement(INNER_NAMESPACE_URI, OBJECT_ELEMENT, OBJECT_ELEMENT_QNAME);