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 15:45:37 UTC
svn commit: r565751 - in /felix/sandbox/cziegeler/maven-scr-plugin: ./
src/main/java/org/apache/felix/sandbox/scrplugin/
src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/
src/main/java/org/apache/felix/sandbox/scrplugin/tags/ src/main/java/...
Author: cziegeler
Date: Tue Aug 14 06:45:36 2007
New Revision: 565751
URL: http://svn.apache.org/viewvc?view=rev&rev=565751
Log:
Finish refactoring - use unified om and remove dependency to xstream by self generating/reading xml.
Added:
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Constants.java
- copied, changed from r562420, felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptor.java
Removed:
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/AbstractDescriptorElement.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Property.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Reference.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptor.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Service.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/XMLWriter.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/om/metatype/Definitions.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Component.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Components.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Implementation.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Interface.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Property.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Reference.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/Service.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/XMLHandler.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/resources/
Modified:
felix/sandbox/cziegeler/maven-scr-plugin/pom.xml
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/tags/JavaClassDescriptorManager.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaTag.java
felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/ComponentDescriptorIO.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/pom.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/pom.xml?view=diff&rev=565751&r1=565750&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/pom.xml (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/pom.xml Tue Aug 14 06:45:36 2007
@@ -63,11 +63,6 @@
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
- <dependency>
- <groupId>com.thoughtworks.xstream</groupId>
- <artifactId>xstream</artifactId>
- <version>1.2.2</version>
- </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
Copied: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Constants.java (from r562420, felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptor.java)
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Constants.java?view=diff&rev=565751&p1=felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptor.java&r1=562420&p2=felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Constants.java&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/SCRDescriptor.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/Constants.java Tue Aug 14 06:45:36 2007
@@ -18,21 +18,12 @@
*/
package org.apache.felix.sandbox.scrplugin;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription;
-import org.apache.felix.sandbox.scrplugin.tags.JavaMethod;
-import org.apache.felix.sandbox.scrplugin.tags.JavaParameter;
-import org.apache.felix.sandbox.scrplugin.tags.JavaTag;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.logging.Log;
+import java.io.File;
/**
- * Model: scr base descriptor
+ * Constants
*/
-public class SCRDescriptor extends AbstractDescriptorElement {
+public class Constants {
public static final String COMPONENT = "scr.component";
@@ -94,345 +85,10 @@
public static final String REFERENCE_UNDBIND = "unbind";
- private String name;
+ public static final String ABSTRACT_DESCRIPTOR_FILENAME = "scrinfo.xml";
- private String label;
+ public static final String ABSTRACT_DESCRIPTOR_RELATIVE_PATH = "OSGI-INF" + File.separator + "scr-plugin" + File.separator + ABSTRACT_DESCRIPTOR_FILENAME;
- private String description;
+ public static final String ABSTRACT_DESCRIPTOR_ARCHIV_PATH = "OSGI-INF/scr-plugin/" + ABSTRACT_DESCRIPTOR_FILENAME;
- private boolean enabled;
-
- private String factory;
-
- private boolean immediate;
-
- private String implClass;
-
- private boolean serviceFactory;
-
- private boolean hasMetaType;
-
- private boolean isAbstract;
-
- // map of properties
- private Set properties = new TreeSet();
-
- // list of service interfaces
- private Set services = new TreeSet();
-
- // list of service references
- private Set references = new TreeSet();
-
- SCRDescriptor(Log log, JavaTag tag) {
- super(log, tag);
-
- // whether metatype information is to generated for the component
- String metaType = tag.getNamedParameter(COMPONENT_METATYPE);
- this.hasMetaType = metaType == null || "yes".equalsIgnoreCase(metaType)
- || "true".equalsIgnoreCase(metaType);
- // check if this is an abstract definition
- String abstractType = tag.getNamedParameter(COMPONENT_ABSTRACT);
- this.isAbstract = (abstractType == null ? false : "yes".equalsIgnoreCase(abstractType) || "true".equalsIgnoreCase(abstractType));
- }
-
- boolean isAbstract() {
- return this.isAbstract;
- }
-
- // validates the descriptor and returns an array of issues or null
- boolean validate() throws MojoExecutionException {
-
- JavaClassDescription javaClass = this.tag.getJavaClassDescription();
- if (javaClass == null) {
- this.log("Tag not declared in a Java Class");
- return false;
- }
-
- boolean valid = true;
-
- // if the service is abstract, we do not validate everything
- if ( !this.isAbstract ) {
- // ensure non-abstract, public class
- if (!javaClass.isPublic()) {
- this.log("Class must be public");
- valid = false;
- }
- if (javaClass.isAbstract() || javaClass.isInterface()) {
- this.log("Class must be concrete class (not abstract or interface)");
- valid = false;
- }
-
- // check activate and deactivate methods
- this.checkActivationMethod(javaClass, "activate");
- this.checkActivationMethod(javaClass, "deactivate");
-
- // ensure public default constructor
- boolean constructorFound = true;
- JavaMethod[] methods = javaClass.getMethods();
- for (int i = 0; methods != null && i < methods.length; i++) {
- if (methods[i].isConstructor()) {
- // if public default, succeed
- if (methods[i].isPublic()
- && (methods[i].getParameters() == null || methods[i].getParameters().length == 0)) {
- constructorFound = true;
- break;
- }
-
- // non-public/non-default constructor found, must have explicit
- constructorFound = false;
- }
- }
- if (!constructorFound) {
- this.log("Class must have public default constructor");
- valid = false;
- }
-
- // verify properties
- for (Iterator pi = this.getProperties(); pi.hasNext();) {
- Property prop = (Property) pi.next();
- valid &= prop.validate();
- }
-
- // verify services
- for (Iterator si = this.getServices(); si.hasNext();) {
- Service service = (Service) si.next();
- valid &= service.validate();
- }
-
- // serviceFactory must not be true for immediate of component factory
- if (this.isServiceFactory() && this.isImmediate() && this.getFactory() != null) {
- this.log("Component must not be a ServiceFactory, if immediate and/or component factory");
- valid = false;
- }
-
- // verify references
- for (Iterator ri = this.getReferences(); ri.hasNext();) {
- Reference ref = (Reference) ri.next();
- valid &= ref.validate();
- }
- }
- return valid;
- }
-
- private void checkActivationMethod(JavaClassDescription javaClass, String methodName) {
- JavaMethod[] methods = javaClass.getMethods();
- JavaMethod activation = null;
- for (int i=0; i < methods.length; i++) {
- // ignore method not matching the name
- if (!methodName.equals(methods[i].getName())) {
- continue;
- }
-
- // if the method has the correct parameter type, check protected
- JavaParameter[] params = methods[i].getParameters();
- if (params == null || params.length != 1) {
- continue;
- }
-
- // this might be considered, if it is an overload, drop out of check
- if (activation != null) {
- return;
- }
-
- // consider this method for further checks
- activation = methods[i];
- }
-
- // no activation method found
- if (activation == null) {
- return;
- }
-
- // check protected
- if (activation.isPublic()) {
- this.warn("Activation method " + activation.getName() + " should be declared protected");
- } else if (!activation.isProtected()) {
- this.warn("Activation method " + activation.getName() + " has wrong qualifier, public or protected required");
- }
-
- // check paramter (we know there is exactly one)
- JavaParameter param = activation.getParameters()[0];
- if (!"org.osgi.service.component.ComponentContext".equals(param.getType())) {
- this.warn("Activation method " + methodName + " has wrong argument type " + param.getType());
- }
- }
-
- void generate(XMLWriter xw) {
- xw.printElementStart("component", true);
- xw.printAttribute("name", this.getName());
- if (!this.isEnabled())
- xw.printAttribute("enabled", String.valueOf(this.isEnabled()));
- if (this.getFactory() != null) xw.printAttribute("factory", this.getFactory());
- xw.printAttribute("immediate", String.valueOf(this.isImmediate()));
- xw.printElementStartClose(false);
-
- xw.indent();
-
- xw.printElementStart("implementation", true);
- xw.printAttribute("class", this.getImplClass());
- xw.printElementStartClose(true);
-
- // properties
- for (Iterator pi = this.getProperties(); pi.hasNext();) {
- ((Property) pi.next()).generate(xw);
- }
-
- // services
- Iterator si = this.getServices();
- if (si.hasNext()) {
- xw.printElementStart("service", this.isServiceFactory());
- if (this.isServiceFactory()) {
- xw.printAttribute("servicefactory", "true");
- xw.printElementStartClose(false);
- }
- xw.indent();
- while (si.hasNext()) {
- ((Service) si.next()).generate(xw);
- }
- xw.outdent();
- xw.printElementEnd("service");
- }
-
- // references
- for (Iterator ri = this.getReferences(); ri.hasNext();) {
- ((Reference) ri.next()).generate(xw);
- }
-
- xw.outdent();
- xw.printElementEnd("component");
- }
-
- void generateMetaTypeInfo(XMLWriter xw) {
-
- // if there is no metatype, we return early
- if (!this.hasMetaType) {
- return;
- }
-
- xw.printElementStart("OCD", true);
- xw.printAttribute("id", this.getName());
-
- if (this.getLabel() != null) {
- xw.printAttribute("name", this.getLabel());
- } else {
- // use the name as a localizable key by default
- xw.printAttribute("name", "%" + this.getName() + ".name");
- }
-
- if (this.getDescription() != null) {
- xw.printAttribute("description", this.getDescription());
- } else {
- // use the name as a localizable key by default
- xw.printAttribute("description", "%" + this.getName() + ".description");
- }
-
- xw.printElementStartClose(false);
-
- // properties
- for (Iterator pi = this.getProperties(); pi.hasNext();) {
- ((Property) pi.next()).generateMetaTypeInfo(xw);
- }
-
- xw.printElementEnd("OCD");
-
- xw.printElementStart("Designate", true);
- xw.printAttribute("pid", this.getName());
- xw.printElementStartClose(false);
-
- xw.printElementStart("Object", true);
- xw.printAttribute("ocdref", this.getName());
- xw.printElementStartClose(true);
-
- xw.printElementEnd("Designate");
- }
-
- // ---------- Setters and Getters for the properties -----------------------
-
- public boolean isEnabled() {
- return this.enabled;
- }
-
- void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public String getFactory() {
- return this.factory;
- }
-
- void setFactory(String factory) {
- this.factory = factory;
- }
-
- public boolean isImmediate() {
- return this.immediate;
- }
-
- void setImmediate(boolean immediate) {
- this.immediate = immediate;
- }
-
- public String getImplClass() {
- return this.implClass;
- }
-
- void setImplClass(String implClass) {
- this.implClass = implClass;
- }
-
- public String getName() {
- return this.name;
- }
-
- void setName(String name) {
- this.name = name;
- }
-
- String getLabel() {
- return this.label;
- }
-
- void setLabel(String label) {
- this.label = label;
- }
-
- String getDescription() {
- return this.description;
- }
-
- void setDescription(String description) {
- this.description = description;
- }
-
- public Iterator getProperties() {
- return this.properties.iterator();
- }
-
- void addProperty(Property property) {
- this.properties.add(property);
- }
-
- public Iterator getReferences() {
- return this.references.iterator();
- }
-
- void addReference(Reference reference) {
- this.references.add(reference);
- }
-
- public boolean isServiceFactory() {
- return this.serviceFactory;
- }
-
- void setServiceFactory(boolean serviceFactory) {
- this.serviceFactory = serviceFactory;
- }
-
- public Iterator getServices() {
- return this.services.iterator();
- }
-
- void addService(Service service) {
- this.services.add(service);
- }
}
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=565751&r1=565750&r2=565751
==============================================================================
--- 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 06:45:36 2007
@@ -19,8 +19,6 @@
package org.apache.felix.sandbox.scrplugin;
import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -40,12 +38,12 @@
import org.apache.felix.sandbox.scrplugin.tags.JavaField;
import org.apache.felix.sandbox.scrplugin.tags.JavaTag;
import org.apache.felix.sandbox.scrplugin.xml.ComponentDescriptorIO;
+import org.apache.felix.sandbox.scrplugin.xml.MetaTypeIO;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.StringUtils;
/**
@@ -90,44 +88,32 @@
JavaClassDescriptorManager jManager = new JavaClassDescriptorManager(this.getLog(),
this.project);
// iterate through all source classes and check for component tag
- final List descriptors = new ArrayList();
- final List abstractDescriptors = new ArrayList();
final JavaClassDescription[] javaSources = jManager.getSourceDescriptions();
- // test the new om?
- boolean testNewOM = false;
final Components components = new Components();
final Components abstractComponents = new Components();
+ boolean hasMetaTypeInfo = false;
for (int i = 0; i < javaSources.length; i++) {
this.getLog().debug("Testing source " + javaSources[i].getName());
- final JavaTag tag = javaSources[i].getTagByName(SCRDescriptor.COMPONENT);
+ final JavaTag tag = javaSources[i].getTagByName(Constants.COMPONENT);
if (tag != null) {
this.getLog().debug("Processing service class " + javaSources[i].getName());
- final SCRDescriptor descriptor = this.createSCRDescriptor(javaSources[i]);
- if (descriptor != null) {
- if ( descriptor.isAbstract() ) {
- this.getLog().debug("Adding abstract descriptor " + descriptor);
- abstractDescriptors.add(descriptor);
+ final Component comp = this.createComponent(javaSources[i]);
+ if (comp != null) {
+ if ( comp.isAbstract() ) {
+ this.getLog().debug("Adding abstract descriptor " + comp);
+ abstractComponents.addComponent(comp);
} else {
- this.getLog().debug("Adding descriptor " + descriptor);
- descriptors.add(descriptor);
+ this.getLog().debug("Adding descriptor " + comp);
+ components.addComponent(comp);
+ if ( comp.getOcd() != null ) {
+ hasMetaTypeInfo = true;
+ }
}
} else {
hasFailures = true;
}
- if ( testNewOM ) {
- final Component comp = this.createComponent(javaSources[i]);
- if (comp != null) {
- if ( comp.isAbstract() ) {
- this.getLog().debug("Adding abstract descriptor " + descriptor);
- abstractComponents.addComponent(comp);
- } else {
- this.getLog().debug("Adding descriptor " + descriptor);
- components.addComponent(comp);
- }
- }
- }
}
}
@@ -136,82 +122,51 @@
throw new MojoFailureException("SCR Descriptor parsing had failures (see log)");
}
- jManager.writeAbstractDescriptorsFile(abstractDescriptors, this.outputDirectory);
+ // if we have abstract descriptors, write them
+ final File adFile = new File(this.outputDirectory, Constants.ABSTRACT_DESCRIPTOR_RELATIVE_PATH);
+ if ( !abstractComponents.getComponents().isEmpty() ) {
+ this.getLog().info("Writing abstract service descriptor " + adFile + " with " + components.getComponents().size() + " entries.");
+ adFile.getParentFile().mkdirs();
+ ComponentDescriptorIO.write(abstractComponents, adFile);
+ } else {
+ this.getLog().debug("No abstract SCR Descriptors found in project");
+ // remove file
+ if ( adFile.exists() ) {
+ this.getLog().debug("Removing obsolete abstract service descriptor " + adFile);
+ adFile.delete();
+ }
+ }
- // terminate if there is nothing to write
- if (descriptors.isEmpty()) {
- this.getLog().info("No SCR Descriptors found in project");
+ // terminate if there is nothing else to write
+ if (components.getComponents().isEmpty()) {
+ this.getLog().debug("No SCR Descriptors found in project");
return;
}
- // finally the descriptors have to be written ....
+ // check file name
if (StringUtils.isEmpty(this.finalName)) {
this.getLog().error("Descriptor file name must not be empty");
return;
}
+ // finally the descriptors have to be written ....
File descriptorFile = new File(new File(this.outputDirectory, "OSGI-INF"), this.finalName);
descriptorFile.getParentFile().mkdirs(); // ensure parent dir
- this.getLog().info("Generating " + descriptors.size()
+ this.getLog().info("Generating " + components.getComponents().size()
+ " Service Component Descriptors to " + descriptorFile);
- FileOutputStream descriptorStream = null;
- XMLWriter xw = null;
- try {
- if ( testNewOM ) {
- ComponentDescriptorIO.write(components, descriptorFile);
- } else {
- descriptorStream = new FileOutputStream(descriptorFile);
- xw = new XMLWriter(descriptorStream);
-
- for (Iterator di=descriptors.iterator(); di.hasNext(); ) {
- SCRDescriptor sd = (SCRDescriptor) di.next();
- sd.generate(xw);
- }
- }
-
- } catch (IOException ioe) {
- hasFailures = true;
- this.getLog().error("Cannot write descriptor to " + descriptorFile, ioe);
- throw new MojoFailureException("Failed to write descriptor to " + descriptorFile);
- } finally {
- IOUtil.close(xw);
- IOUtil.close(descriptorStream);
-
- // remove the descriptor file in case of write failure
- if (hasFailures) {
- descriptorFile.delete();
- }
- }
+ ComponentDescriptorIO.write(components, descriptorFile);
// create metatype information
File mtFile = new File(this.outputDirectory, "OSGI-INF" + File.separator + "metatype" + File.separator + "metatype.xml");
mtFile.getParentFile().mkdirs();
-
- xw = null;
- descriptorStream = null;
- try {
- descriptorStream = new FileOutputStream(mtFile);
- xw = new XMLWriter(descriptorStream);
-
- xw.printElementStart("MetaData", true);
- xw.printAttribute("localization", "metatype");
- xw.printElementStartClose(false);
-
- for (Iterator di=descriptors.iterator(); di.hasNext(); ) {
- SCRDescriptor sd = (SCRDescriptor) di.next();
- sd.generateMetaTypeInfo(xw);
- }
-
- xw.printElementEnd("MetaData");
-
- } catch (IOException ioe) {
- this.getLog().error("Cannot write meta type descriptor", ioe);
- throw new MojoFailureException("Failed to write meta type descriptor");
- } finally {
- IOUtil.close(xw);
- IOUtil.close(descriptorStream);
+ if ( hasMetaTypeInfo ) {
+ MetaTypeIO.write(components, mtFile);
+ } else {
+ if ( mtFile.exists() ) {
+ mtFile.delete();
+ }
}
// now add the descriptor file to the maven resources
@@ -231,45 +186,6 @@
this.project.getProperties().setProperty("Service-Component", "OSGI-INF/" + this.finalName);
}
- private SCRDescriptor createSCRDescriptor(JavaClassDescription description)
- throws MojoExecutionException {
-
- final JavaTag component = description.getTagByName(SCRDescriptor.COMPONENT);
- final SCRDescriptor sd = new SCRDescriptor(this.getLog(), component);
- sd.setImplClass(description.getName());
-
- boolean inherited = this.getBoolean(component, SCRDescriptor.COMPONENT_INHERIT, false);
-
- this.doComponent(component, sd);
-
- boolean serviceFactory = this.doServices(description.getTagsByName(SCRDescriptor.SERVICE, inherited), sd, description);
- sd.setServiceFactory(serviceFactory);
-
- this.doProperties(description.getTagsByName(SCRDescriptor.PROPERTY, inherited), sd);
-
- this.doReferences(description.getTagsByName(SCRDescriptor.REFERENCE, inherited), sd);
-
- do {
- JavaField[] fields = description.getFields();
- for (int i=0; fields != null && i < fields.length; i++) {
- JavaTag tag = fields[i].getTagByName(SCRDescriptor.REFERENCE);
- if (tag != null) {
- this.doReference(tag, fields[i].getName(), sd);
- }
-
- tag = fields[i].getTagByName(SCRDescriptor.PROPERTY);
- if (tag != null) {
- this.doProperty(tag, fields[i].getInitializationExpression(), sd);
- }
- }
-
- description = description.getSuperClass();
- } while (inherited && description != null);
-
- // return nothing if validation fails
- return sd.validate() ? sd : null;
- }
-
/**
* Create a component for the java class description.
* @param description
@@ -279,7 +195,7 @@
protected Component createComponent(JavaClassDescription description)
throws MojoExecutionException {
- final JavaTag componentTag = description.getTagByName(SCRDescriptor.COMPONENT);
+ final JavaTag componentTag = description.getTagByName(Constants.COMPONENT);
final Component component = new Component(componentTag);
// set implementation
@@ -287,12 +203,12 @@
this.doComponent(componentTag, component);
- boolean inherited = this.getBoolean(componentTag, SCRDescriptor.COMPONENT_INHERIT, false);
- boolean serviceFactory = this.doServices(description.getTagsByName(SCRDescriptor.SERVICE, inherited), component, description);
+ boolean inherited = this.getBoolean(componentTag, Constants.COMPONENT_INHERIT, false);
+ boolean serviceFactory = this.doServices(description.getTagsByName(Constants.SERVICE, inherited), component, description);
component.setServiceFactory(serviceFactory);
// properties
- final JavaTag[] properties = description.getTagsByName(SCRDescriptor.PROPERTY, inherited);
+ 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);
@@ -300,7 +216,7 @@
}
// references
- final JavaTag[] references = description.getTagsByName(SCRDescriptor.REFERENCE, inherited);
+ final JavaTag[] references = description.getTagsByName(Constants.REFERENCE, inherited);
if (references != null || references.length > 0) {
for (int i=0; i < references.length; i++) {
this.doReference(references[i], null, component);
@@ -311,12 +227,12 @@
do {
JavaField[] fields = description.getFields();
for (int i=0; fields != null && i < fields.length; i++) {
- JavaTag tag = fields[i].getTagByName(SCRDescriptor.REFERENCE);
+ JavaTag tag = fields[i].getTagByName(Constants.REFERENCE);
if (tag != null) {
this.doReference(tag, fields[i].getName(), component);
}
- tag = fields[i].getTagByName(SCRDescriptor.PROPERTY);
+ tag = fields[i].getTagByName(Constants.PROPERTY);
if (tag != null) {
this.doProperty(tag, fields[i].getInitializationExpression(), component);
}
@@ -351,18 +267,18 @@
protected void doComponent(JavaTag tag, Component component) {
// check if this is an abstract definition
- final String abstractType = tag.getNamedParameter(SCRDescriptor.COMPONENT_ABSTRACT);
+ final String abstractType = tag.getNamedParameter(Constants.COMPONENT_ABSTRACT);
component.setAbstract((abstractType == null ? false : "yes".equalsIgnoreCase(abstractType) || "true".equalsIgnoreCase(abstractType)));
- String name = tag.getNamedParameter(SCRDescriptor.COMPONENT_NAME);
+ String name = tag.getNamedParameter(Constants.COMPONENT_NAME);
component.setName(StringUtils.isEmpty(name) ? component.getImplementation().getClassame() : name);
- component.setEnabled(Boolean.valueOf(this.getBoolean(tag, SCRDescriptor.COMPONENT_ENABLED, true)));
- component.setFactory(tag.getNamedParameter(SCRDescriptor.COMPONENT_FACTORY));
- component.setImmediate(Boolean.valueOf(this.getBoolean(tag, SCRDescriptor.COMPONENT_IMMEDIATE, true)));
+ component.setEnabled(Boolean.valueOf(this.getBoolean(tag, Constants.COMPONENT_ENABLED, true)));
+ component.setFactory(tag.getNamedParameter(Constants.COMPONENT_FACTORY));
+ component.setImmediate(Boolean.valueOf(this.getBoolean(tag, Constants.COMPONENT_IMMEDIATE, true)));
// whether metatype information is to generated for the component
- final String metaType = tag.getNamedParameter(SCRDescriptor.COMPONENT_METATYPE);
+ final String metaType = tag.getNamedParameter(Constants.COMPONENT_METATYPE);
final boolean hasMetaType = metaType == null || "yes".equalsIgnoreCase(metaType)
|| "true".equalsIgnoreCase(metaType);
if ( hasMetaType ) {
@@ -370,12 +286,12 @@
final OCD ocd = new OCD();
component.setOcd(ocd);
ocd.setId(component.getName());
- String ocdName = tag.getNamedParameter(SCRDescriptor.COMPONENT_LABEL);
+ String ocdName = tag.getNamedParameter(Constants.COMPONENT_LABEL);
if ( ocdName == null ) {
ocdName = "%" + component.getName() + ".name";
}
ocd.setName(ocdName);
- String ocdDescription = tag.getNamedParameter(SCRDescriptor.COMPONENT_DESCRIPTION);
+ String ocdDescription = tag.getNamedParameter(Constants.COMPONENT_DESCRIPTION);
if ( ocdDescription == null ) {
ocdDescription = "%" + component.getName() + ".description";
}
@@ -410,7 +326,7 @@
component.setService(service);
boolean serviceFactory = false;
for (int i=0; i < services.length; i++) {
- String name = services[i].getNamedParameter(SCRDescriptor.SERVICE_INTERFACE);
+ String name = services[i].getNamedParameter(Constants.SERVICE_INTERFACE);
if (StringUtils.isEmpty(name)) {
while (description != null) {
@@ -430,120 +346,19 @@
service.addInterface(interf);
}
- serviceFactory |= this.getBoolean(services[i], SCRDescriptor.SERVICE_FACTORY, false);
+ serviceFactory |= this.getBoolean(services[i], Constants.SERVICE_FACTORY, false);
}
return serviceFactory;
}
- private void doComponent(JavaTag comp, SCRDescriptor sd) {
- String name = comp.getNamedParameter(SCRDescriptor.COMPONENT_NAME);
- sd.setName(StringUtils.isEmpty(name) ? sd.getImplClass() : name);
-
- sd.setEnabled(this.getBoolean(comp, SCRDescriptor.COMPONENT_ENABLED, true));
- sd.setFactory(comp.getNamedParameter(SCRDescriptor.COMPONENT_FACTORY));
- sd.setImmediate(this.getBoolean(comp, SCRDescriptor.COMPONENT_IMMEDIATE,
- true));
-
- sd.setLabel(comp.getNamedParameter(SCRDescriptor.COMPONENT_LABEL));
- sd.setDescription(comp.getNamedParameter(SCRDescriptor.COMPONENT_DESCRIPTION));
- }
-
- private boolean doServices(JavaTag[] services, SCRDescriptor sd, JavaClassDescription description)
- throws MojoExecutionException {
- // no services, hence certainly no service factory
- if (services == null || services.length == 0) {
- return false;
- }
-
- boolean serviceFactory = false;
- for (int i=0; i < services.length; i++) {
- String name = services[i].getNamedParameter(SCRDescriptor.SERVICE_INTERFACE);
- if (StringUtils.isEmpty(name)) {
-
- while (description != null) {
- JavaClassDescription[] interfaces = description.getImplementedInterfaces();
- for (int j=0; interfaces != null && j < interfaces.length; j++) {
- Service service = new Service(this.getLog(), services[i]);
- service.setInterfaceName(interfaces[j].getName());
- sd.addService(service);
- }
-
- // try super class
- description = description.getSuperClass();
- }
- } else {
- Service service = new Service(this.getLog(), services[i]);
- service.setInterfaceName(name);
- sd.addService(service);
- }
-
- serviceFactory |= this.getBoolean(services[i], SCRDescriptor.SERVICE_FACTORY, false);
- }
-
- return serviceFactory;
- }
-
- private void doProperties(JavaTag[] properties, SCRDescriptor sd) {
- if (properties == null || properties.length == 0) {
- return;
- }
-
- for (int i=0; i < properties.length; i++) {
- this.doProperty(properties[i], null, sd);
- }
- }
-
- private void doProperty(JavaTag property, String defaultName, SCRDescriptor sd) {
- String name = property.getNamedParameter(SCRDescriptor.PROPERTY_NAME);
- if (StringUtils.isEmpty(name) && defaultName!= null) {
- name = defaultName.trim();
- if (name.startsWith("\"")) name = name.substring(1);
- if (name.endsWith("\"")) name = name.substring(0, name.length()-1);
- }
-
- if (!StringUtils.isEmpty(name)) {
- Property prop = new Property(this.getLog(), property);
- prop.setName(name);
- prop.setLabel(property.getNamedParameter(SCRDescriptor.PROPERTY_LABEL));
- prop.setDescription(property.getNamedParameter(SCRDescriptor.PROPERTY_DESCRIPTION));
- prop.setValue(property.getNamedParameter(SCRDescriptor.PROPERTY_VALUE));
- prop.setType(property.getNamedParameter(SCRDescriptor.PROPERTY_TYPE));
- prop.setPrivateProperty(this.getBoolean(property,
- SCRDescriptor.PROPERTY_PRIVATE, prop.isPrivateProperty()));
-
- // set optional multivalues, cardinailty might be overwritten by setValues !!
- prop.setCardinality(property.getNamedParameter(SCRDescriptor.PROPERTY_CARDINALITY));
- prop.setValues(property.getNamedParameterMap());
-
- // check options
- String[] parameters = property.getParameters();
- Map options = null;
- for (int j=0; j < parameters.length; j++) {
- if (SCRDescriptor.PROPERTY_OPTIONS.equals(parameters[j])) {
- options = new LinkedHashMap();
- } else if (options != null) {
- String optionLabel = parameters[j];
- String optionValue = (j < parameters.length-2) ? parameters[j+2] : null;
- if (optionValue != null) {
- options.put(optionLabel, optionValue);
- }
- j += 2;
- }
- }
- prop.setOptions(options);
-
- sd.addProperty(prop);
- }
- }
-
/**
* @param property
* @param defaultName
* @param component
*/
protected void doProperty(JavaTag property, String defaultName, Component component) {
- String name = property.getNamedParameter(SCRDescriptor.PROPERTY_NAME);
+ String name = property.getNamedParameter(Constants.PROPERTY_NAME);
if (StringUtils.isEmpty(name) && defaultName!= null) {
name = defaultName.trim();
if (name.startsWith("\"")) name = name.substring(1);
@@ -553,8 +368,8 @@
if (!StringUtils.isEmpty(name)) {
org.apache.felix.sandbox.scrplugin.om.Property prop = new org.apache.felix.sandbox.scrplugin.om.Property(property);
prop.setName(name);
- prop.setType(property.getNamedParameter(SCRDescriptor.PROPERTY_TYPE));
- final String value = property.getNamedParameter(SCRDescriptor.PROPERTY_VALUE);
+ prop.setType(property.getNamedParameter(Constants.PROPERTY_TYPE));
+ final String value = property.getNamedParameter(Constants.PROPERTY_VALUE);
if ( value != null ) {
prop.setValue(value);
} else {
@@ -573,7 +388,7 @@
}
}
- final boolean isPrivate = this.getBoolean(property, SCRDescriptor.PROPERTY_PRIVATE, false);
+ 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 ) {
@@ -583,18 +398,18 @@
ad.setId(prop.getName());
ad.setType(prop.getType());
- String adName = property.getNamedParameter(SCRDescriptor.PROPERTY_LABEL);
+ String adName = property.getNamedParameter(Constants.PROPERTY_LABEL);
if ( adName == null ) {
adName = "%" + prop.getName() + ".name";
}
ad.setName(adName);
- String adDesc = property.getNamedParameter(SCRDescriptor.PROPERTY_DESCRIPTION);
+ String adDesc = property.getNamedParameter(Constants.PROPERTY_DESCRIPTION);
if ( adDesc == null ) {
adDesc = "%" + prop.getName() + ".description";
}
ad.setDescription(adDesc);
// set optional multivalues, cardinality might be overwritten by setValues !!
- final String cValue = property.getNamedParameter(SCRDescriptor.PROPERTY_CARDINALITY);
+ final String cValue = property.getNamedParameter(Constants.PROPERTY_CARDINALITY);
if (cValue != null) {
if ("-".equals(cValue)) {
// unlimited vector
@@ -617,7 +432,7 @@
String[] parameters = property.getParameters();
Map options = null;
for (int j=0; j < parameters.length; j++) {
- if (SCRDescriptor.PROPERTY_OPTIONS.equals(parameters[j])) {
+ if (Constants.PROPERTY_OPTIONS.equals(parameters[j])) {
options = new LinkedHashMap();
} else if (options != null) {
String optionLabel = parameters[j];
@@ -641,13 +456,13 @@
* @param component
*/
protected void doReference(JavaTag reference, String defaultName, Component component) {
- String name = reference.getNamedParameter(SCRDescriptor.REFERENCE_NAME);
+ String name = reference.getNamedParameter(Constants.REFERENCE_NAME);
if (StringUtils.isEmpty(name)) {
name = defaultName;
}
// ensure interface
- String type = reference.getNamedParameter(SCRDescriptor.REFERENCE_INTERFACE);
+ String type = reference.getNamedParameter(Constants.REFERENCE_INTERFACE);
if (StringUtils.isEmpty(type)) {
if ( reference.getField() != null ) {
type = reference.getField().getType();
@@ -658,56 +473,19 @@
org.apache.felix.sandbox.scrplugin.om.Reference ref = new org.apache.felix.sandbox.scrplugin.om.Reference(reference);
ref.setName(name);
ref.setInterfacename(type);
- ref.setCardinality(reference.getNamedParameter(SCRDescriptor.REFERENCE_CARDINALITY));
- ref.setPolicy(reference.getNamedParameter(SCRDescriptor.REFERENCE_POLICY));
- ref.setTarget(reference.getNamedParameter(SCRDescriptor.REFERENCE_TARGET));
+ ref.setCardinality(reference.getNamedParameter(Constants.REFERENCE_CARDINALITY));
+ ref.setPolicy(reference.getNamedParameter(Constants.REFERENCE_POLICY));
+ ref.setTarget(reference.getNamedParameter(Constants.REFERENCE_TARGET));
String value;
- value = reference.getNamedParameter(SCRDescriptor.REFERENCE_BIND);
+ value = reference.getNamedParameter(Constants.REFERENCE_BIND);
if ( value != null ) {
ref.setBind(value);
}
- value = reference.getNamedParameter(SCRDescriptor.REFERENCE_UNDBIND);
+ value = reference.getNamedParameter(Constants.REFERENCE_UNDBIND);
if ( value != null ) {
ref.setUnbind(value);
}
component.addReference(ref);
- }
- }
-
- private void doReferences(JavaTag[] references, SCRDescriptor sd) {
- if (references == null || references.length == 0) {
- return;
- }
-
- for (int i=0; i < references.length; i++) {
- this.doReference(references[i], null, sd);
- }
- }
-
- private void doReference(JavaTag reference, String defaultName, SCRDescriptor sd) {
- String name = reference.getNamedParameter(SCRDescriptor.REFERENCE_NAME);
- if (StringUtils.isEmpty(name)) {
- name = defaultName;
- }
-
- // ensure interface
- String type = reference.getNamedParameter(SCRDescriptor.REFERENCE_INTERFACE);
- if (StringUtils.isEmpty(type)) {
- if ( reference.getField() != null ) {
- type = reference.getField().getType();
- }
- }
-
- if (!StringUtils.isEmpty(name)) {
- Reference ref = new Reference(this.getLog(), reference);
- ref.setName(name);
- ref.setInterface(type);
- ref.setCardinality(reference.getNamedParameter(SCRDescriptor.REFERENCE_CARDINALITY));
- ref.setPolicy(reference.getNamedParameter(SCRDescriptor.REFERENCE_POLICY));
- ref.setTarget(reference.getNamedParameter(SCRDescriptor.REFERENCE_TARGET));
- ref.setBind(reference.getNamedParameter(SCRDescriptor.REFERENCE_BIND));
- ref.setUnbind(reference.getNamedParameter(SCRDescriptor.REFERENCE_UNDBIND));
- sd.addReference(ref);
}
}
Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/JavaClassDescriptorManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/JavaClassDescriptorManager.java?view=diff&rev=565751&r1=565750&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/JavaClassDescriptorManager.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/JavaClassDescriptorManager.java Tue Aug 14 06:45:36 2007
@@ -34,18 +34,12 @@
import java.util.jar.JarFile;
import java.util.jar.Manifest;
-import org.apache.felix.sandbox.scrplugin.Property;
-import org.apache.felix.sandbox.scrplugin.Reference;
-import org.apache.felix.sandbox.scrplugin.SCRDescriptor;
-import org.apache.felix.sandbox.scrplugin.Service;
+import org.apache.felix.sandbox.scrplugin.Constants;
+import org.apache.felix.sandbox.scrplugin.om.Component;
+import org.apache.felix.sandbox.scrplugin.om.Components;
import org.apache.felix.sandbox.scrplugin.tags.cl.ClassLoaderJavaClassDescription;
import org.apache.felix.sandbox.scrplugin.tags.qdox.QDoxJavaClassDescription;
-import org.apache.felix.sandbox.scrplugin.xml.Component;
import org.apache.felix.sandbox.scrplugin.xml.ComponentDescriptorIO;
-import org.apache.felix.sandbox.scrplugin.xml.Components;
-import org.apache.felix.sandbox.scrplugin.xml.Implementation;
-import org.apache.felix.sandbox.scrplugin.xml.Interface;
-import org.apache.felix.sandbox.scrplugin.xml.XMLHandler;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.plugin.MojoExecutionException;
@@ -63,12 +57,6 @@
*/
public class JavaClassDescriptorManager {
- public static final String ABSTRACT_DESCRIPTOR_FILENAME = "scrinfo.xml";
-
- public static final String ABSTRACT_DESCRIPTOR_RELATIVE_PATH = "OSGI-INF" + File.separator + "scr-plugin" + File.separator + ABSTRACT_DESCRIPTOR_FILENAME;
-
- public static final String ABSTRACT_DESCRIPTOR_ARCHIV_PATH = "OSGI-INF/scr-plugin/" + ABSTRACT_DESCRIPTOR_FILENAME;
-
protected static final String SERVICE_COMPONENT = "Service-Component";
/** The sources read by qdox. */
@@ -80,9 +68,6 @@
/** The classloader used to compile the classes. */
protected final ClassLoader classloader;
- /** The xml handler to read and write the service descriptors. */
- protected final XMLHandler xmlHandler = new XMLHandler();
-
/** A cache containing the java class descriptions hashed by classname. */
protected final Map javaClassDescriptions = new HashMap();
@@ -153,7 +138,7 @@
}
this.log.debug("Trying to get scrinfo from artifact " + artifact);
try {
- final File scrInfoFile = this.getFile(artifact, ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
+ final File scrInfoFile = this.getFile(artifact, Constants.ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
if ( scrInfoFile != null ) {
components.addAll(this.parseServiceComponentDescriptor(artifact, scrInfoFile).getComponents());
} else {
@@ -192,125 +177,6 @@
}
/**
- * Create the abstract descriptors file or delete it of no abstract descriptors are available.
- * @param abstractDescriptors
- */
- public void writeAbstractDescriptorsFile(List abstractDescriptors, File outputDirectory)
- throws MojoExecutionException {
- try {
- // if we have abstract descriptors, write them first
- final File adFile = new File(outputDirectory, ABSTRACT_DESCRIPTOR_RELATIVE_PATH);
- if ( !abstractDescriptors.isEmpty() ) {
- this.getLog().info("Writing abstract service descriptor " + adFile + " with " + abstractDescriptors.size() + " entries.");
- final Components container = new Components();
- final Iterator i = abstractDescriptors.iterator();
- while ( i.hasNext() ) {
- final SCRDescriptor current = (SCRDescriptor) i.next();
- // component
- final Component component = new Component();
- // enabled and immediate do not make sense for abstract components
- //component.setEnabled(Boolean.valueOf(current.isEnabled()));
- //component.setImmediate(Boolean.valueOf(current.isImmediate()));
- component.setName(current.getName());
- // do we support abstract factories or should we throw an exception? (TODO)
- component.setFactory(current.getFactory());
-
- // implementation
- final Implementation impl = new Implementation();
- impl.setClassname(current.getImplClass());
- component.setImplementation(impl);
-
- // properties
- final Iterator pI = current.getProperties();
- while ( pI.hasNext() ) {
- final Property p = (Property)pI.next();
- final org.apache.felix.sandbox.scrplugin.xml.Property prop = new org.apache.felix.sandbox.scrplugin.xml.Property();
- prop.setName(p.getName());
- if ( !"String".equals(p.getType())) {
- prop.setType(p.getType());
- }
- if (p.getValue() instanceof List) {
- final StringBuffer buffer = new StringBuffer();
- List values = (List) p.getValue();
- for (Iterator vi = values.iterator(); vi.hasNext();) {
- buffer.append(vi.next()).append('\n');
- }
- } else if (p.getValue() != null) {
- prop.setValue(p.getValue().toString());
- }
- component.getProperties().add(prop);
- }
-
- // services
- final Iterator sI = current.getServices();
- if (sI.hasNext()) {
- final org.apache.felix.sandbox.scrplugin.xml.Service srvc = new org.apache.felix.sandbox.scrplugin.xml.Service();
- component.setService(srvc);
- if ( current.isServiceFactory() ) {
- srvc.setServicefactory("true");
- }
- while (sI.hasNext()) {
- final Service s = (Service)sI.next();
- final Interface interf = new Interface();
- interf.setInterfacename(s.getInterfaceName());
- srvc.getInterfaces().add(interf);
- }
- }
-
- // references
- final Iterator rI = current.getReferences();
- while ( rI.hasNext() ) {
- final Reference r = (Reference)rI.next();
- final org.apache.felix.sandbox.scrplugin.xml.Reference ref = new org.apache.felix.sandbox.scrplugin.xml.Reference();
- ref.setName(r.getName());
- ref.setInterfacename(r.getInterfaceName());
- ref.setTarget(r.getTarget());
- ref.setCardinality(r.getCardinality());
- ref.setPolicy(r.getPolicy());
- ref.setBind(r.getBind());
- ref.setUnbind(r.getUnbind());
-
- component.getReferences().add(ref);
- }
-
- container.getComponents().add(component);
- }
- adFile.getParentFile().mkdirs();
- this.xmlHandler.write(adFile, container);
- } else {
- // remove file
- if ( adFile.exists() ) {
- this.getLog().debug("Removing obsolete abstract service descriptor " + adFile);
- adFile.delete();
- }
- }
- } catch (IOException ioe) {
- throw new MojoExecutionException("Failed to write scr-plugin scrinfo.xml", ioe);
- }
- }
-
- /**
- * Create the abstract descriptors file or delete it of no abstract descriptors are available.
- * @param abstractDescriptors
- */
- public void writeAbstractDescriptorFile(org.apache.felix.sandbox.scrplugin.om.Components components, File outputDirectory)
- throws MojoExecutionException {
- // if we have abstract descriptors, write them
- final File adFile = new File(outputDirectory, ABSTRACT_DESCRIPTOR_RELATIVE_PATH);
- if ( !components.getComponents().isEmpty() ) {
- this.getLog().info("Writing abstract service descriptor " + adFile + " with " + components.getComponents().size() + " entries.");
- adFile.getParentFile().mkdirs();
- ComponentDescriptorIO.write(components, adFile);
- } else {
- // remove file
- if ( adFile.exists() ) {
- this.getLog().debug("Removing obsolete abstract service descriptor " + adFile);
- adFile.delete();
- }
- }
- }
-
- /**
* Read the service component description.
* @param artifact
* @param entry
@@ -330,7 +196,7 @@
protected Components parseServiceComponentDescriptor(Artifact artifact, File file)
throws IOException, MojoExecutionException {
this.log.debug("Parsing " + file);
- final Components list = this.xmlHandler.read(file);
+ final Components list = ComponentDescriptorIO.read(file);
return list;
}
Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java?view=diff&rev=565751&r1=565750&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java Tue Aug 14 06:45:36 2007
@@ -24,14 +24,14 @@
import java.util.Arrays;
import java.util.List;
-import org.apache.felix.sandbox.scrplugin.SCRDescriptor;
+import org.apache.felix.sandbox.scrplugin.Constants;
+import org.apache.felix.sandbox.scrplugin.om.Component;
+import org.apache.felix.sandbox.scrplugin.om.Reference;
import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription;
import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescriptorManager;
import org.apache.felix.sandbox.scrplugin.tags.JavaField;
import org.apache.felix.sandbox.scrplugin.tags.JavaMethod;
import org.apache.felix.sandbox.scrplugin.tags.JavaTag;
-import org.apache.felix.sandbox.scrplugin.xml.Component;
-import org.apache.felix.sandbox.scrplugin.xml.Reference;
import org.apache.maven.plugin.MojoExecutionException;
/**
@@ -128,11 +128,11 @@
throws MojoExecutionException {
JavaTag[] javaTags = EMPTY_TAGS;
if ( this.component != null ) {
- if ( SCRDescriptor.SERVICE.equals(name) ) {
+ if ( Constants.SERVICE.equals(name) ) {
- } else if ( SCRDescriptor.PROPERTY.equals(name) ) {
+ } else if ( Constants.PROPERTY.equals(name) ) {
- } else if ( SCRDescriptor.REFERENCE.equals(name) ) {
+ } else if ( Constants.REFERENCE.equals(name) ) {
if ( this.component.getReferences().size() > 0 ) {
javaTags = new JavaTag[this.component.getReferences().size()];
for(int i=0; i<this.component.getReferences().size(); i++) {
Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaTag.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaTag.java?view=diff&rev=565751&r1=565750&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaTag.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/tags/cl/ClassLoaderJavaTag.java Tue Aug 14 06:45:36 2007
@@ -21,11 +21,11 @@
import java.util.HashMap;
import java.util.Map;
-import org.apache.felix.sandbox.scrplugin.SCRDescriptor;
+import org.apache.felix.sandbox.scrplugin.Constants;
+import org.apache.felix.sandbox.scrplugin.om.Reference;
import org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription;
import org.apache.felix.sandbox.scrplugin.tags.JavaField;
import org.apache.felix.sandbox.scrplugin.tags.JavaTag;
-import org.apache.felix.sandbox.scrplugin.xml.Reference;
/**
* <code>ClassLoaderJavaTag.java</code>...
@@ -58,7 +58,7 @@
*/
public String getName() {
if ( this.reference != null ) {
- return SCRDescriptor.REFERENCE;
+ return Constants.REFERENCE;
}
return null;
}
@@ -80,13 +80,13 @@
public Map getNamedParameterMap() {
if ( this.reference != null ) {
final Map map = new HashMap();
- map.put(SCRDescriptor.REFERENCE_BIND, this.reference.getBind());
- map.put(SCRDescriptor.REFERENCE_CARDINALITY, this.reference.getCardinality());
- map.put(SCRDescriptor.REFERENCE_INTERFACE, this.reference.getInterfacename());
- map.put(SCRDescriptor.REFERENCE_NAME, this.reference.getName());
- map.put(SCRDescriptor.REFERENCE_POLICY, this.reference.getPolicy());
- map.put(SCRDescriptor.REFERENCE_TARGET, this.reference.getTarget());
- map.put(SCRDescriptor.REFERENCE_UNDBIND, this.reference.getUnbind());
+ map.put(Constants.REFERENCE_BIND, this.reference.getBind());
+ map.put(Constants.REFERENCE_CARDINALITY, this.reference.getCardinality());
+ map.put(Constants.REFERENCE_INTERFACE, this.reference.getInterfacename());
+ map.put(Constants.REFERENCE_NAME, this.reference.getName());
+ map.put(Constants.REFERENCE_POLICY, this.reference.getPolicy());
+ map.put(Constants.REFERENCE_TARGET, this.reference.getTarget());
+ map.put(Constants.REFERENCE_UNDBIND, this.reference.getUnbind());
return map;
}
return null;
Modified: felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/ComponentDescriptorIO.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/ComponentDescriptorIO.java?view=diff&rev=565751&r1=565750&r2=565751
==============================================================================
--- felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/ComponentDescriptorIO.java (original)
+++ felix/sandbox/cziegeler/maven-scr-plugin/src/main/java/org/apache/felix/sandbox/scrplugin/xml/ComponentDescriptorIO.java Tue Aug 14 06:45:36 2007
@@ -38,7 +38,10 @@
import org.apache.felix.sandbox.scrplugin.om.Component;
import org.apache.felix.sandbox.scrplugin.om.Components;
import org.apache.felix.sandbox.scrplugin.om.Implementation;
+import org.apache.felix.sandbox.scrplugin.om.Interface;
import org.apache.felix.sandbox.scrplugin.om.Property;
+import org.apache.felix.sandbox.scrplugin.om.Reference;
+import org.apache.felix.sandbox.scrplugin.om.Service;
import org.apache.maven.plugin.MojoExecutionException;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -86,7 +89,7 @@
private static final SAXTransformerFactory FACTORY = (SAXTransformerFactory) TransformerFactory.newInstance();
- public static org.apache.felix.sandbox.scrplugin.om.Components read(File file)
+ public static Components read(File file)
throws MojoExecutionException {
try {
final Transformer transformer = FACTORY.newTransformer();
@@ -107,7 +110,7 @@
* @param file
* @throws MojoExecutionException
*/
- public static void write(org.apache.felix.sandbox.scrplugin.om.Components components, File file)
+ public static void write(Components components, File file)
throws MojoExecutionException {
try {
FileWriter writer = new FileWriter(file);
@@ -211,7 +214,7 @@
* @param contentHandler
* @throws SAXException
*/
- protected static void generateXML(org.apache.felix.sandbox.scrplugin.om.Service service, ContentHandler contentHandler)
+ protected static void generateXML(Service service, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
addAttribute(ai, "servicefactory", service.getServicefactory());
@@ -235,7 +238,7 @@
protected static void generateXML(Interface interf, ContentHandler contentHandler)
throws SAXException {
final AttributesImpl ai = new AttributesImpl();
- addAttribute(ai, "interface", interf.getInterfaceame());
+ addAttribute(ai, "interface", interf.getInterfacename());
contentHandler.startElement(NAMESPACE_URI, ComponentDescriptorIO.INTERFACE, ComponentDescriptorIO.INTERFACE_QNAME, ai);
contentHandler.endElement(NAMESPACE_URI, ComponentDescriptorIO.INTERFACE, ComponentDescriptorIO.INTERFACE_QNAME);
}
@@ -324,7 +327,7 @@
protected Component currentComponent;
/** The current service. */
- protected org.apache.felix.sandbox.scrplugin.om.Service currentService;
+ protected Service currentService;
/** Pending property. */
protected Property pendingProperty;
@@ -396,19 +399,19 @@
} else if (localName.equals(SERVICE)) {
- this.currentService = new org.apache.felix.sandbox.scrplugin.om.Service();
+ this.currentService = new Service();
this.currentService.setServicefactory(attributes.getValue("servicefactory"));
this.currentComponent.setService(this.currentService);
} else if (localName.equals(INTERFACE)) {
- final org.apache.felix.sandbox.scrplugin.om.Interface interf = new org.apache.felix.sandbox.scrplugin.om.Interface();
+ final Interface interf = new Interface();
this.currentService.addInterface(interf);
interf.setInterfacename(attributes.getValue("interface"));
} else if (localName.equals(REFERENCE)) {
- org.apache.felix.sandbox.scrplugin.om.Reference ref = new org.apache.felix.sandbox.scrplugin.om.Reference();
+ final Reference ref = new Reference();
ref.setName(attributes.getValue("name"));
ref.setInterfacename(attributes.getValue("interface"));
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=565751&r1=565750&r2=565751
==============================================================================
--- 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 06:45:36 2007
@@ -19,25 +19,30 @@
package org.apache.felix.sandbox.scrplugin.xml;
import java.io.File;
-import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
+import java.util.Iterator;
+import java.util.Map;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import org.apache.commons.io.IOUtils;
-import org.apache.felix.sandbox.scrplugin.om.metatype.Definitions;
+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.OCD;
import org.apache.maven.plugin.MojoExecutionException;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
-import com.thoughtworks.xstream.XStream;
/**
* <code>MetaType</code>
@@ -47,68 +52,163 @@
*/
public class MetaTypeIO {
- protected final XStream xstream;
+ private static final SAXTransformerFactory FACTORY = (SAXTransformerFactory) TransformerFactory.newInstance();
- public MetaTypeIO() {
- this.xstream = new XStream();
- this.xstream.setMode(XStream.NO_REFERENCES);
-
- this.xstream.alias("OCD", org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class);
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "id");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "name");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "description");
-
- this.xstream.alias("AD", org.apache.felix.sandbox.scrplugin.om.metatype.AttributeDefinition.class);
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.AttributeDefinition.class, "id");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.AttributeDefinition.class, "type");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "name");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "description");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "cardinality");
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.OCD.class, "defaultValue");
-
- this.xstream.alias("Designate", org.apache.felix.sandbox.scrplugin.om.metatype.Designate.class);
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.Designate.class, "pid");
-
- this.xstream.alias("Object", org.apache.felix.sandbox.scrplugin.om.metatype.MTObject.class);
- this.xstream.useAttributeFor(org.apache.felix.sandbox.scrplugin.om.metatype.MTObject.class, "ocdref");
- }
-
- public Definitions read(File file) throws IOException, MojoExecutionException {
- Writer buffer = new StringWriter();
- final TransformerFactory factory = TransformerFactory.newInstance();
- Transformer transformer;
+ public static final String NAMESPACE_URI = "http://www.osgi.org/xmlns/metatype/v1.0.0";
+
+ public static final String PREFIX = "metatype";
+
+ protected static final String METADATA_ELEMENT = "MetaData";
+ protected static final String METADATA_ELEMENT_QNAME = PREFIX + ':' + METADATA_ELEMENT;
+
+ protected static final String OCD_ELEMENT = "OCD";
+ protected static final String OCD_ELEMENT_QNAME = PREFIX + ':' + OCD_ELEMENT;
+
+ protected static final String DESIGNATE_ELEMENT = "Designate";
+ protected static final String DESIGNATE_ELEMENT_QNAME = PREFIX + ':' + DESIGNATE_ELEMENT;
+
+ protected static final String OBJECT_ELEMENT = "Object";
+ protected static final String OBJECT_ELEMENT_QNAME = PREFIX + ':' + OBJECT_ELEMENT;
+
+ 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)
+ throws MojoExecutionException {
try {
- IOUtils.copy(new FileReader(file), buffer);
- String xmlDoc = buffer.toString();
- buffer = new StringWriter();
- int pos = xmlDoc.indexOf("?>");
- if ( pos > 0 ) {
- xmlDoc = xmlDoc.substring(pos+2);
- }
- xmlDoc = "<components>" + xmlDoc + "</components>";
- transformer = factory.newTransformer(new StreamSource(this.getClass().getResourceAsStream("/org/apache/felix/sandbox/scrplugin/xml/read.xsl")));
- transformer.setOutputProperty(OutputKeys.INDENT, "no");
- transformer.transform(new StreamSource(new StringReader(xmlDoc)), new StreamResult(buffer));
- return (Definitions)this.xstream.fromXML(new StringReader(buffer.toString()));
+ FileWriter writer = new FileWriter(file);
+ final TransformerHandler transformerHandler = FACTORY.newTransformerHandler();
+ final Transformer transformer = transformerHandler.getTransformer();
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
+ transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformerHandler.setResult(new StreamResult(writer));
+
+ generateXML(components, transformerHandler);
} catch (TransformerException e) {
- throw new MojoExecutionException("Unable to read xml.", e);
+ throw new MojoExecutionException("Unable to write xml to " + file, e);
+ } catch (SAXException e) {
+ throw new MojoExecutionException("Unable to generate xml for " + file, e);
+ } catch (IOException e) {
+ throw new MojoExecutionException("Unable to write xml to " + file, e);
}
}
- public void write(File file, Definitions defs)
- throws IOException, MojoExecutionException {
- Writer buffer = new StringWriter();
- this.xstream.toXML(defs, buffer);
+ /**
+ * Generate the xml top level element and start streaming
+ * the components.
+ * @param components
+ * @param contentHandler
+ * @throws SAXException
+ */
+ protected static void generateXML(Components components, ContentHandler contentHandler)
+ throws SAXException {
+ contentHandler.startDocument();
+ contentHandler.startPrefixMapping(PREFIX, NAMESPACE_URI);
+
+ final AttributesImpl ai = new AttributesImpl();
+ addAttribute(ai, "localization", "metatype");
+
+ contentHandler.startElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME, ai);
+
+ final Iterator i = components.getComponents().iterator();
+ while ( i.hasNext() ) {
+ final Component component = (Component)i.next();
+ if ( component.getOcd() != null ) {
+ generateXML(component.getOcd(), contentHandler);
+ generateXML(component.getDesignate(), contentHandler);
+ }
+ }
+ // end wrapper element
+ contentHandler.endElement(NAMESPACE_URI, METADATA_ELEMENT, METADATA_ELEMENT_QNAME);
+ contentHandler.endPrefixMapping(PREFIX);
+ contentHandler.endDocument();
+ }
- final TransformerFactory factory = TransformerFactory.newInstance();
- Transformer transformer;
- try {
- transformer = factory.newTransformer(new StreamSource(this.getClass().getResourceAsStream("/org/apache/felix/sandbox/scrplugin/xml/write.xsl")));
- transformer.setOutputProperty(OutputKeys.INDENT, "no");
+ protected static void generateXML(OCD ocd, ContentHandler contentHandler)
+ throws SAXException {
+ final AttributesImpl ai = new AttributesImpl();
+ addAttribute(ai, "id", ocd.getId());
+ addAttribute(ai, "name", ocd.getName());
+ addAttribute(ai, "description", ocd.getDescription());
+ contentHandler.startElement(NAMESPACE_URI, OCD_ELEMENT, OCD_ELEMENT_QNAME, ai);
+
+ final Iterator i = ocd.getProperties().iterator();
+ while ( i.hasNext() ) {
+ final AttributeDefinition ad = (AttributeDefinition) i.next();
+ generateXML(ad, contentHandler);
+ }
- transformer.transform(new StreamSource(new StringReader(buffer.toString())), new StreamResult(new FileWriter(file)));
- } catch (TransformerException e) {
- throw new MojoExecutionException("Unable to write xml.", e);
+ contentHandler.endElement(NAMESPACE_URI, OCD_ELEMENT, OCD_ELEMENT_QNAME);
+ }
+
+ protected static void generateXML(AttributeDefinition ad, ContentHandler contentHandler)
+ throws SAXException {
+ final AttributesImpl ai = new AttributesImpl();
+ addAttribute(ai, "id", ad.getId());
+ addAttribute(ai, "type", ad.getType());
+ if ( ad.getDefaultMultiValue() != null ) {
+ final StringBuffer buf = new StringBuffer();
+ for(int i=0; i<ad.getDefaultMultiValue().length; i++) {
+ if ( i > 0 ) {
+ buf.append(',');
+ }
+ buf.append(ad.getDefaultMultiValue()[i]);
+ }
+ addAttribute(ai, "default", buf);
+ } else {
+ addAttribute(ai, "default", ad.getDefaultValue());
+ }
+ addAttribute(ai, "name", ad.getName());
+ addAttribute(ai, "description", ad.getDescription());
+ addAttribute(ai, "cardinality", ad.getCardinality());
+ contentHandler.startElement(NAMESPACE_URI, AD_ELEMENT, AD_ELEMENT_QNAME, ai);
+
+ if (ad.getOptions() != null) {
+ for (Iterator oi=ad.getOptions().entrySet().iterator(); oi.hasNext(); ) {
+ final Map.Entry entry = (Map.Entry) oi.next();
+ ai.clear();
+ addAttribute(ai, "value", String.valueOf(entry.getKey()));
+ addAttribute(ai, "label", String.valueOf(entry.getValue()));
+ contentHandler.startElement(NAMESPACE_URI, "Option", PREFIX + ':' + "Option", ai);
+ }
}
+
+ contentHandler.endElement(NAMESPACE_URI, AD_ELEMENT, AD_ELEMENT_QNAME);
}
+
+ protected static void generateXML(Designate designate, ContentHandler contentHandler)
+ throws SAXException {
+ final AttributesImpl ai = new AttributesImpl();
+ addAttribute(ai, "pid", designate.getPid());
+ contentHandler.startElement(NAMESPACE_URI, DESIGNATE_ELEMENT, DESIGNATE_ELEMENT_QNAME, ai);
+
+ generateXML(designate.getObject(), contentHandler);
+
+ contentHandler.endElement(NAMESPACE_URI, DESIGNATE_ELEMENT, DESIGNATE_ELEMENT_QNAME);
+ }
+
+ protected static void generateXML(MTObject obj, ContentHandler contentHandler)
+ throws SAXException {
+ final AttributesImpl ai = new AttributesImpl();
+ addAttribute(ai, "ocdref", obj.getOcdref());
+ contentHandler.startElement(NAMESPACE_URI, OBJECT_ELEMENT, OBJECT_ELEMENT_QNAME, ai);
+ contentHandler.endElement(NAMESPACE_URI, OBJECT_ELEMENT, OBJECT_ELEMENT_QNAME);
+ }
+
+ /**
+ * Helper method to add an attribute.
+ * This implementation adds a new attribute with the given name
+ * and value. Before adding the value is checked for non-null.
+ * @param ai The attributes impl receiving the additional attribute.
+ * @param name The name of the attribute.
+ * @param value The value of the attribute.
+ */
+ protected static void addAttribute(AttributesImpl ai, String name, Object value) {
+ if ( value != null ) {
+ ai.addAttribute("", name, name, "CDATA", value.toString());
+ }
+ }
+
}