diff options
Diffstat (limited to '')
5 files changed, 139 insertions, 11 deletions
diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java index 88181e2d91..4551821f5a 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java @@ -37,7 +37,6 @@ public interface OSGiImplementation extends Implementation, Extensible { String BUNDLE_SYMBOLICNAME = "bundleSymbolicName"; String BUNDLE_VERSION = "bundleVersion"; QName IMPLEMENTATION_OSGI = new QName(SCA11_TUSCANY_NS, "implementation.osgi"); - QName PROPERTY_QNAME = OSGiProperty.OSGI_PROPERTY_QNAME; String getBundleSymbolicName(); diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java index 6d33f66afc..8509e866ef 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java @@ -25,7 +25,8 @@ import javax.xml.namespace.QName; * <tuscany:osgi.property> */ public interface OSGiProperty { - QName OSGI_PROPERTY_QNAME = new QName(OSGiImplementation.SCA11_TUSCANY_NS, "osgi.property"); + String NAME = "name"; + QName PROPERTY_QNAME = new QName(OSGiImplementation.SCA11_TUSCANY_NS, "osgi.property"); String getValue(); diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java new file mode 100644 index 0000000000..5a8f5c4694 --- /dev/null +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java @@ -0,0 +1,105 @@ +/* + * 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.tuscany.sca.implementation.osgi.xml; + +import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; +import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; +import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.NAME; +import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.PROPERTY_QNAME; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import org.apache.tuscany.sca.contribution.processor.ContributionResolveException; +import org.apache.tuscany.sca.contribution.processor.ContributionWriteException; +import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; +import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.implementation.osgi.OSGiImplementationFactory; +import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; +import org.apache.tuscany.sca.monitor.Monitor; + +/** + * A processor for <tuscany:osgi.property> + */ +public class OSGiPropertyProcessor implements StAXArtifactProcessor<OSGiProperty> { + private OSGiImplementationFactory factory; + private Monitor monitor; + + public OSGiPropertyProcessor(FactoryExtensionPoint modelFactories, Monitor monitor) { + this.monitor = monitor; + this.factory = modelFactories.getFactory(OSGiImplementationFactory.class); + } + + public OSGiProperty read(XMLStreamReader reader) throws XMLStreamException { + int event = reader.getEventType(); + OSGiProperty prop = null; + while (true) { + switch (event) { + case START_ELEMENT: + QName name = reader.getName(); + if (PROPERTY_QNAME.equals(name)) { + prop = factory.createOSGiProperty(); + prop.setName(reader.getAttributeValue(null, NAME)); + // After the following call, the reader will be positioned at END_ELEMENT + String text = reader.getElementText(); + if (text != null) { + text = text.trim(); + } + prop.setValue(text); + return prop; + } + break; + case END_ELEMENT: + name = reader.getName(); + if (PROPERTY_QNAME.equals(name)) { + return prop; + } + break; + } + if (reader.hasNext()) { + event = reader.next(); + } else { + return prop; + } + } + } + + public QName getArtifactType() { + return PROPERTY_QNAME; + } + + public void write(OSGiProperty model, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException { + writer.writeStartElement(PROPERTY_QNAME.getNamespaceURI(), PROPERTY_QNAME.getLocalPart()); + writer.writeAttribute(NAME, model.getName()); + writer.writeCharacters(model.getValue()); + writer.writeEndElement(); + } + + public Class<OSGiProperty> getModelType() { + return OSGiProperty.class; + } + + public void resolve(OSGiProperty model, ModelResolver resolver) throws ContributionResolveException { + // TODO: To be implemented + } +} diff --git a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor index 31c557157a..c9ee094d9b 100644 --- a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor +++ b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor @@ -18,3 +18,4 @@ # Implementation class for the artifact processor extension org.apache.tuscany.sca.implementation.osgi.xml.OSGiImplementationProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#implementation.osgi,model=org.apache.tuscany.sca.implementation.osgi.OSGiImplementation org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsProcessor;qname=http://www.osgi.org/xmlns/sd/v1.0.0#service-descriptions;model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions +org.apache.tuscany.sca.implementation.osgi.xml.OSGiPropertyProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#osgi.property,model=org.apache.tuscany.sca.implementation.osgi.OSGiProperty diff --git a/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java b/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java index 0e834dc1c3..32fbd4021b 100644 --- a/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java +++ b/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java @@ -19,14 +19,16 @@ package org.apache.tuscany.sca.implementation.osgi.xml; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.io.ByteArrayInputStream; import java.io.InputStream; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; -import junit.framework.TestCase; - import org.apache.tuscany.sca.assembly.ComponentType; import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; @@ -38,23 +40,26 @@ import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtens import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; import org.apache.tuscany.sca.implementation.osgi.OSGiImplementation; +import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; import org.apache.tuscany.sca.implementation.osgi.test.OSGiTestBundles; import org.apache.tuscany.sca.implementation.osgi.test.OSGiTestImpl; import org.apache.tuscany.sca.implementation.osgi.test.OSGiTestInterface; +import org.junit.BeforeClass; +import org.junit.Test; /** * Test reading OSGi implementations. * * @version $Rev$ $Date$ */ -public class OSGiReadImplTestCase extends TestCase { +public class OSGiReadImplTestCase { - private XMLInputFactory inputFactory; - private StAXArtifactProcessor<Object> staxProcessor; - private CompositeBuilder compositeBuilder; + private static XMLInputFactory inputFactory; + private static StAXArtifactProcessor<Object> staxProcessor; + private static CompositeBuilder compositeBuilder; - @Override - public void setUp() throws Exception { + @BeforeClass + public static void setUp() throws Exception { DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry(); inputFactory = XMLInputFactory.newInstance(); StAXArtifactProcessorExtensionPoint staxProcessors = @@ -69,6 +74,7 @@ public class OSGiReadImplTestCase extends TestCase { } + @Test public void testReadComposite() throws Exception { InputStream is = getClass().getClassLoader().getResourceAsStream("osgitest.composite"); XMLStreamReader reader = inputFactory.createXMLStreamReader(is); @@ -78,6 +84,7 @@ public class OSGiReadImplTestCase extends TestCase { compositeBuilder.build(composite, null, null); } + @Test public void testReadAndResolveComposite() throws Exception { InputStream is = getClass().getClassLoader().getResourceAsStream("osgitest.composite"); XMLStreamReader reader = inputFactory.createXMLStreamReader(is); @@ -87,7 +94,21 @@ public class OSGiReadImplTestCase extends TestCase { is = getClass().getClassLoader().getResourceAsStream("bundle.componentType"); reader = inputFactory.createXMLStreamReader(is); ComponentType componentType = (ComponentType)staxProcessor.read(reader); - + + assertEquals(1, componentType.getServices().size()); + Object prop1 = componentType.getServices().get(0).getExtensions().get(1); + assertTrue(prop1 instanceof OSGiProperty); + OSGiProperty osgiProp1 = (OSGiProperty) prop1; + assertEquals("1", osgiProp1.getValue()); + assertEquals("prop1", osgiProp1.getName()); + + assertEquals(4, componentType.getReferences().size()); + Object prop2 = componentType.getReferences().get(0).getExtensions().get(2); + assertTrue(prop2 instanceof OSGiProperty); + OSGiProperty osgiProp2 = (OSGiProperty) prop2; + assertEquals("ABC", osgiProp2.getValue()); + assertEquals("prop2", osgiProp2.getName()); + ModelResolver resolver = new TestModelResolver(getClass().getClassLoader()); staxProcessor.resolve(componentType, resolver); resolver.addModel(componentType); @@ -97,6 +118,7 @@ public class OSGiReadImplTestCase extends TestCase { compositeBuilder.build(composite, null, null); } + @Test public void testReadOSGiImplementation() throws Exception { String str = |