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 2007/08/14 16:30:11 UTC

svn commit: r565771 - in /felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin: SCRDescriptorMojo.java om/Component.java om/metatype/MetaData.java xml/MetaTypeIO.java

Author: cziegeler
Date: Tue Aug 14 07:30:10 2007
New Revision: 565771

URL: http://svn.apache.org/viewvc?view=rev&rev=565771
Log:
Separate meta type information from descriptors and make metatype file name configurable.

Added:
    felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java   (with props)
Modified:
    felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptorMojo.java
    felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/Component.java
    felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/MetaTypeIO.java

Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptorMojo.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptorMojo.java?view=diff&rev=565771&r1=565770&r2=565771
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptorMojo.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptorMojo.java Tue Aug 14 07:30:10 2007
@@ -32,6 +32,7 @@
 import org.apache.felix.sandbox.scrplugin.om.metatype.AttributeDefinition;
 import org.apache.felix.sandbox.scrplugin.om.metatype.Designate;
 import org.apache.felix.sandbox.scrplugin.om.metatype.MTObject;
+import org.apache.felix.sandbox.scrplugin.om.metatype.MetaData;
 import org.apache.felix.sandbox.scrplugin.om.metatype.OCD;
 import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription;
 import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescriptorManager;
@@ -80,6 +81,13 @@
      */
     private String finalName;
 
+    /**
+     * Name of the generated meta type file.
+     *
+     * @parameter default-value="metatype.xml"
+     */
+    private String metaTypeName;
+
     public void execute() throws MojoExecutionException, MojoFailureException {
         this.getLog().debug("Starting SCRDescriptorMojo....");
 
@@ -92,14 +100,15 @@
 
         final Components components = new Components();
         final Components abstractComponents = new Components();
-        boolean hasMetaTypeInfo = false;
+        final MetaData metaData = new MetaData();
+        metaData.setLocalization("metatype");
 
         for (int i = 0; i < javaSources.length; i++) {
             this.getLog().debug("Testing source " + javaSources[i].getName());
             final JavaTag tag = javaSources[i].getTagByName(Constants.COMPONENT);
             if (tag != null) {
                 this.getLog().debug("Processing service class " + javaSources[i].getName());
-                final Component comp = this.createComponent(javaSources[i]);
+                final Component comp = this.createComponent(javaSources[i], metaData);
                 if (comp != null) {
                     if ( comp.isAbstract() ) {
                         this.getLog().debug("Adding abstract descriptor " + comp);
@@ -107,9 +116,6 @@
                     } else {
                         this.getLog().debug("Adding descriptor " + comp);
                         components.addComponent(comp);
-                        if ( comp.getOcd() != null ) {
-                            hasMetaTypeInfo = true;
-                        }
                     }
                 } else {
                     hasFailures = true;
@@ -129,7 +135,7 @@
             adFile.getParentFile().mkdirs();
             ComponentDescriptorIO.write(abstractComponents, adFile);
         } else {
-            this.getLog().debug("No abstract SCR Descriptors found in project");
+            this.getLog().debug("No abstract SCR Descriptors found in project.");
             // remove file
             if ( adFile.exists() ) {
                 this.getLog().debug("Removing obsolete abstract service descriptor " + adFile);
@@ -139,13 +145,13 @@
 
         // terminate if there is nothing else to write
         if (components.getComponents().isEmpty()) {
-            this.getLog().debug("No SCR Descriptors found in project");
+            this.getLog().debug("No SCR Descriptors found in project.");
             return;
         }
 
         // check file name
         if (StringUtils.isEmpty(this.finalName)) {
-            this.getLog().error("Descriptor file name must not be empty");
+            this.getLog().error("Descriptor file name must not be empty.");
             return;
         }
 
@@ -158,11 +164,17 @@
 
         ComponentDescriptorIO.write(components, descriptorFile);
 
+        // check file name
+        if (StringUtils.isEmpty(this.metaTypeName)) {
+            this.getLog().error("Meta type file name must not be empty.");
+            return;
+        }
+
         // create metatype information
-        File mtFile = new File(this.outputDirectory, "OSGI-INF" + File.separator + "metatype" + File.separator + "metatype.xml");
+        File mtFile = new File(this.outputDirectory, "OSGI-INF" + File.separator + "metatype" + File.separator + this.metaTypeName);
         mtFile.getParentFile().mkdirs();
-        if ( hasMetaTypeInfo ) {
-            MetaTypeIO.write(components, mtFile);
+        if ( metaData.getDescriptors().size() > 0 ) {
+            MetaTypeIO.write(metaData, mtFile);
         } else {
             if ( mtFile.exists() ) {
                 mtFile.delete();
@@ -192,7 +204,7 @@
      * @return The generated component descriptor or null if any error occurs.
      * @throws MojoExecutionException
      */
-    protected Component createComponent(JavaClassDescription description)
+    protected Component createComponent(JavaClassDescription description, MetaData metaData)
     throws MojoExecutionException {
 
         final JavaTag componentTag = description.getTagByName(Constants.COMPONENT);
@@ -201,7 +213,7 @@
         // set implementation
         component.setImplementation(new Implementation(description.getName()));
 
-        this.doComponent(componentTag, component);
+        final OCD ocd = this.doComponent(componentTag, component, metaData);
 
         boolean inherited = this.getBoolean(componentTag, Constants.COMPONENT_INHERIT, false);
         boolean serviceFactory = this.doServices(description.getTagsByName(Constants.SERVICE, inherited), component, description);
@@ -211,7 +223,7 @@
         final JavaTag[] properties = description.getTagsByName(Constants.PROPERTY, inherited);
         if (properties != null && properties.length > 0) {
             for (int i=0; i < properties.length; i++) {
-                this.doProperty(properties[i], null, component);
+                this.doProperty(properties[i], null, component, ocd);
             }
         }
 
@@ -234,7 +246,7 @@
 
                 tag = fields[i].getTagByName(Constants.PROPERTY);
                 if (tag != null) {
-                    this.doProperty(tag, fields[i].getInitializationExpression(), component);
+                    this.doProperty(tag, fields[i].getInitializationExpression(), component, ocd);
                 }
             }
 
@@ -264,7 +276,7 @@
      * @param tag
      * @param component
      */
-    protected void doComponent(JavaTag tag, Component component) {
+    protected OCD doComponent(JavaTag tag, Component component, MetaData metaData) {
 
         // check if this is an abstract definition
         final String abstractType = tag.getNamedParameter(Constants.COMPONENT_ABSTRACT);
@@ -284,7 +296,7 @@
         if ( hasMetaType ) {
             // ocd
             final OCD ocd = new OCD();
-            component.setOcd(ocd);
+            metaData.addOCD(ocd);
             ocd.setId(component.getName());
             String ocdName = tag.getNamedParameter(Constants.COMPONENT_LABEL);
             if ( ocdName == null ) {
@@ -298,13 +310,15 @@
             ocd.setDescription(ocdDescription);
             // designate
             final Designate designate = new Designate();
-            component.setDesignate(designate);
+            metaData.addDesignate(designate);
             designate.setPid(component.getName());
             // designate.object
             final MTObject mtobject = new MTObject();
             designate.setObject(mtobject);
             mtobject.setOcdref(component.getName());
+            return ocd;
         }
+        return null;
     }
 
     /**
@@ -357,7 +371,7 @@
      * @param defaultName
      * @param component
      */
-    protected void doProperty(JavaTag property, String defaultName, Component component) {
+    protected void doProperty(JavaTag property, String defaultName, Component component, OCD ocd) {
         String name = property.getNamedParameter(Constants.PROPERTY_NAME);
         if (StringUtils.isEmpty(name) && defaultName!= null) {
             name = defaultName.trim();
@@ -391,8 +405,7 @@
             final boolean isPrivate = this.getBoolean(property, Constants.PROPERTY_PRIVATE, false);
             // if this is a public property and the component is generating metatype info
             // store the information!
-            if ( !isPrivate && component.getOcd() != null ) {
-                final OCD ocd = component.getOcd();
+            if ( !isPrivate && ocd != null ) {
                 final AttributeDefinition ad = new AttributeDefinition();
                 ocd.getProperties().add(ad);
                 ad.setId(prop.getName());

Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/Component.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/Component.java?view=diff&rev=565771&r1=565770&r2=565771
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/Component.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/Component.java Tue Aug 14 07:30:10 2007
@@ -22,8 +22,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.felix.sandbox.scrplugin.om.metatype.Designate;
-import org.apache.felix.sandbox.scrplugin.om.metatype.OCD;
 import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription;
 import org.apache.felix.sandbox.scrplugin.tags.JavaMethod;
 import org.apache.felix.sandbox.scrplugin.tags.JavaParameter;
@@ -66,10 +64,6 @@
 
     protected boolean serviceFactory;
 
-    protected OCD ocd;
-
-    protected Designate designate;
-
     /**
      * Default constructor.
      */
@@ -293,21 +287,5 @@
         if (!"org.osgi.service.component.ComponentContext".equals(param.getType())) {
             warnings.add(this.getMessage("Activation method " + methodName + " has wrong argument type " + param.getType()));
         }
-    }
-
-    public OCD getOcd() {
-        return this.ocd;
-    }
-
-    public void setOcd(OCD ocd) {
-        this.ocd = ocd;
-    }
-
-    public Designate getDesignate() {
-        return this.designate;
-    }
-
-    public void setDesignate(Designate designate) {
-        this.designate = designate;
     }
 }

Added: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java?view=auto&rev=565771
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java (added)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java Tue Aug 14 07:30:10 2007
@@ -0,0 +1,49 @@
+/*
+ * 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.sandbox.scrplugin.om.metatype;
+
+import java.util.List;
+import java.util.ArrayList;
+
+public class MetaData {
+
+    protected String localization;
+
+    protected List descriptors = new ArrayList();
+
+    public String getLocalization() {
+        return this.localization;
+    }
+
+    public void setLocalization(String localization) {
+        this.localization = localization;
+    }
+
+    public List getDescriptors() {
+        return this.descriptors;
+    }
+
+    public void addOCD(OCD ocd) {
+        this.descriptors.add(ocd);
+    }
+
+    public void addDesignate(Designate d) {
+        this.descriptors.add(d);
+    }
+}

Propchange: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/MetaData.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/MetaTypeIO.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/MetaTypeIO.java?view=diff&rev=565771&r1=565770&r2=565771
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/MetaTypeIO.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/MetaTypeIO.java Tue Aug 14 07:30:10 2007
@@ -32,11 +32,10 @@
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 
-import org.apache.felix.sandbox.scrplugin.om.Component;
-import org.apache.felix.sandbox.scrplugin.om.Components;
 import org.apache.felix.sandbox.scrplugin.om.metatype.AttributeDefinition;
 import org.apache.felix.sandbox.scrplugin.om.metatype.Designate;
 import org.apache.felix.sandbox.scrplugin.om.metatype.MTObject;
+import org.apache.felix.sandbox.scrplugin.om.metatype.MetaData;
 import org.apache.felix.sandbox.scrplugin.om.metatype.OCD;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.xml.sax.ContentHandler;
@@ -73,7 +72,7 @@
     protected static final String AD_ELEMENT = "AD";
     protected static final String AD_ELEMENT_QNAME = PREFIX + ':' + AD_ELEMENT;
 
-    public static void write(Components components, File file)
+    public static void write(MetaData metaData, File file)
     throws MojoExecutionException {
         try {
             FileWriter writer = new FileWriter(file);
@@ -85,7 +84,7 @@
             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
             transformerHandler.setResult(new StreamResult(writer));
 
-            generateXML(components, transformerHandler);
+            generateXML(metaData, transformerHandler);
         } catch (TransformerException e) {
             throw new MojoExecutionException("Unable to write xml to " + file, e);
         } catch (SAXException e) {
@@ -97,27 +96,28 @@
 
     /**
      * Generate the xml top level element and start streaming
-     * the components.
-     * @param components
+     * the meta data.
+     * @param metaData
      * @param contentHandler
      * @throws SAXException
      */
-    protected static void generateXML(Components components, ContentHandler contentHandler)
+    protected static void generateXML(MetaData metaData, ContentHandler contentHandler)
     throws SAXException {
         contentHandler.startDocument();
         contentHandler.startPrefixMapping(PREFIX, NAMESPACE_URI);
 
         final AttributesImpl ai = new AttributesImpl();
-        addAttribute(ai, "localization", "metatype");
+        addAttribute(ai, "localization", metaData.getLocalization());
 
         contentHandler.startElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME, ai);
 
-        final Iterator i = components.getComponents().iterator();
+        final Iterator i = metaData.getDescriptors().iterator();
         while ( i.hasNext() ) {
-            final Component component = (Component)i.next();
-            if ( component.getOcd() != null ) {
-                generateXML(component.getOcd(), contentHandler);
-                generateXML(component.getDesignate(), contentHandler);
+            final Object obj = i.next();
+            if ( obj instanceof OCD ) {
+                generateXML((OCD)obj, contentHandler);
+            } else {
+                generateXML((Designate)obj, contentHandler);
             }
         }
         // end wrapper element