FELIX-3641 : Option to generate separate descriptor files
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1379329 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
index 11a2a26..38aa7ca 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
@@ -18,9 +18,7 @@
*/
package org.apache.felix.scrplugin;
-import java.io.File;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -274,32 +272,11 @@
throw new SCRDescriptorFailureException("SCR Descriptor parsing had failures (see log)");
}
+ // create result and generate files
final Result result = new Result();
- // write meta type info if there is a file name
- if (!StringUtils.isEmpty(this.options.getMetaTypeName())) {
- final String path = "OSGI-INF" + File.separator + "metatype" + File.separator + this.options.getMetaTypeName();
- final File mtFile = new File(this.options.getOutputDirectory(), path);
- final int size = metaData.getOCDs().size() + metaData.getDesignates().size();
- if (size > 0) {
- this.logger.info("Generating " + size + " MetaType Descriptors to " + mtFile);
- mtFile.getParentFile().mkdirs();
- MetaTypeIO.write(metaData, mtFile);
- result.setMetatypeFiles(Collections.singletonList(path.replace(File.separatorChar, '/')));
- } else {
- if (mtFile.exists()) {
- mtFile.delete();
- }
- }
- } else {
- this.logger.info("Meta type file name is not set: meta type info is not written.");
- }
-
- // check descriptor file
- final List<String> descriptorFiles = ComponentDescriptorIO.generateDescriptorFiles(module, this.options, logger);
- if ( descriptorFiles != null ) {
- result.setScrFiles(descriptorFiles);
- }
+ result.setMetatypeFiles(MetaTypeIO.generateDescriptors(metaData, this.options, this.logger));
+ result.setScrFiles(ComponentDescriptorIO.generateDescriptorFiles(module, this.options, logger));
return result;
}
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
index 84b2ee2..b4d2d10 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
@@ -19,10 +19,15 @@
package org.apache.felix.scrplugin.xml;
import java.io.File;
+import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
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.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;
@@ -41,31 +46,54 @@
*/
public class MetaTypeIO {
- public static final String NAMESPACE_URI = "http://www.osgi.org/xmlns/metatype/v1.0.0";
+ private static final String NAMESPACE_URI = "http://www.osgi.org/xmlns/metatype/v1.0.0";
- public static final String INNER_NAMESPACE_URI = "";
+ private static final String INNER_NAMESPACE_URI = "";
- public static final String PREFIX = "metatype";
+ private static final String PREFIX = "metatype";
- protected static final String METADATA_ELEMENT = "MetaData";
- protected static final String METADATA_ELEMENT_QNAME = PREFIX + ':' + METADATA_ELEMENT;
+ private static final String METADATA_ELEMENT = "MetaData";
+ private static final String METADATA_ELEMENT_QNAME = PREFIX + ':' + METADATA_ELEMENT;
- protected static final String OCD_ELEMENT = "OCD";
- protected static final String OCD_ELEMENT_QNAME = OCD_ELEMENT;
+ private static final String OCD_ELEMENT = "OCD";
+ private static final String OCD_ELEMENT_QNAME = OCD_ELEMENT;
- protected static final String DESIGNATE_ELEMENT = "Designate";
- protected static final String DESIGNATE_ELEMENT_QNAME = DESIGNATE_ELEMENT;
+ private static final String DESIGNATE_ELEMENT = "Designate";
+ private static final String DESIGNATE_ELEMENT_QNAME = DESIGNATE_ELEMENT;
- protected static final String OBJECT_ELEMENT = "Object";
- protected static final String OBJECT_ELEMENT_QNAME = OBJECT_ELEMENT;
+ private static final String OBJECT_ELEMENT = "Object";
+ private static final String OBJECT_ELEMENT_QNAME = OBJECT_ELEMENT;
- protected static final String AD_ELEMENT = "AD";
- protected static final String AD_ELEMENT_QNAME = AD_ELEMENT;
+ private static final String AD_ELEMENT = "AD";
+ private static final String AD_ELEMENT_QNAME = AD_ELEMENT;
- protected static final String OPTION_ELEMENT = "Option";
- protected static final String OPTION_ELEMENT_QNAME = OPTION_ELEMENT;
+ private static final String OPTION_ELEMENT = "Option";
+ private static final String OPTION_ELEMENT_QNAME = OPTION_ELEMENT;
- public static void write(final MetaData metaData, final File file)
+ public static List<String> generateDescriptors(final MetaData metaData, final Options options, final Log logger)
+ throws SCRDescriptorException {
+ // 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);
+ mtFile.getParentFile().mkdirs();
+ MetaTypeIO.write(metaData, mtFile);
+ return Collections.singletonList(path.replace(File.separatorChar, '/'));
+ }
+ if (mtFile.exists()) {
+ mtFile.delete();
+ }
+
+ } else {
+ 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)
throws SCRDescriptorException {
try {
generateXML(metaData, IOUtils.getSerializer(file));
@@ -81,7 +109,7 @@
* @param contentHandler
* @throws SAXException
*/
- protected static void generateXML(MetaData metaData, ContentHandler contentHandler)
+ private static void generateXML(final MetaData metaData, final ContentHandler contentHandler)
throws SAXException {
contentHandler.startDocument();
contentHandler.startPrefixMapping(PREFIX, NAMESPACE_URI);
@@ -106,7 +134,7 @@
contentHandler.endDocument();
}
- protected static void generateXML(OCD ocd, ContentHandler contentHandler)
+ private static void generateXML(OCD ocd, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
IOUtils.addAttribute(ai, "id", ocd.getId());
@@ -129,7 +157,7 @@
IOUtils.newline(contentHandler);
}
- protected static void generateXML(AttributeDefinition ad, ContentHandler contentHandler)
+ private static void generateXML(AttributeDefinition ad, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
IOUtils.addAttribute(ai, "id", ad.getId());
@@ -171,7 +199,7 @@
IOUtils.newline(contentHandler);
}
- protected static void generateXML(Designate designate, ContentHandler contentHandler)
+ private static void generateXML(Designate designate, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
IOUtils.addAttribute(ai, "pid", designate.getPid());
@@ -187,7 +215,7 @@
IOUtils.newline(contentHandler);
}
- protected static void generateXML(MTObject obj, ContentHandler contentHandler)
+ private static void generateXML(MTObject obj, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
IOUtils.addAttribute(ai, "ocdref", obj.getOcdref());