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);