You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/03/10 19:05:07 UTC

svn commit: r752196 - in /tuscany/java/sca/modules/implementation-osgi/src: main/java/org/apache/tuscany/sca/implementation/osgi/ main/java/org/apache/tuscany/sca/implementation/osgi/xml/ main/resources/META-INF/services/ test/java/org/apache/tuscany/s...

Author: rfeng
Date: Tue Mar 10 18:05:00 2009
New Revision: 752196

URL: http://svn.apache.org/viewvc?rev=752196&view=rev
Log:
Add the OSGiProperty processor

Added:
    tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java   (with props)
Modified:
    tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java
    tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java
    tuscany/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
    tuscany/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java

Modified: tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java?rev=752196&r1=752195&r2=752196&view=diff
==============================================================================
--- tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java (original)
+++ tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementation.java Tue Mar 10 18:05:00 2009
@@ -37,7 +37,6 @@
     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();
 

Modified: tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java?rev=752196&r1=752195&r2=752196&view=diff
==============================================================================
--- tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java (original)
+++ tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java Tue Mar 10 18:05:00 2009
@@ -25,7 +25,8 @@
  * <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();
 

Added: tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java?rev=752196&view=auto
==============================================================================
--- tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java (added)
+++ tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java Tue Mar 10 18:05:00 2009
@@ -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
+    }
+}

Propchange: tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor?rev=752196&r1=752195&r2=752196&view=diff
==============================================================================
--- tuscany/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor (original)
+++ tuscany/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor Tue Mar 10 18:05:00 2009
@@ -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

Modified: tuscany/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java?rev=752196&r1=752195&r2=752196&view=diff
==============================================================================
--- tuscany/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java (original)
+++ tuscany/java/sca/modules/implementation-osgi/src/test/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiReadImplTestCase.java Tue Mar 10 18:05:00 2009
@@ -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.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 @@
 
     }
 
+    @Test
     public void testReadComposite() throws Exception {
         InputStream is = getClass().getClassLoader().getResourceAsStream("osgitest.composite");
         XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
@@ -78,6 +84,7 @@
         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 @@
         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 @@
         compositeBuilder.build(composite, null, null);
     }
 
+    @Test
     public void testReadOSGiImplementation() throws Exception {
 
         String str =