You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/03/15 00:48:16 UTC

svn commit: r518384 - in /incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test: java/org/apache/tuscany/assembly/reader/ java/org/apache/tuscany/assembly/reader/util/ java/org/apache/tuscany/assembly/writer/ resources/

Author: jsdelfino
Date: Wed Mar 14 16:48:15 2007
New Revision: 518384

URL: http://svn.apache.org/viewvc?view=rev&rev=518384
Log:
Added support for reference target, adjusted references to the SCA 1.0 spec, added a print utility class to help print model instances.

Added:
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java   (with props)
Modified:
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ComponentTypeHandler.java
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/CompositeHandler.java
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ReadTestCase.java
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/writer/ComponentTypeWriter.java
    incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/resources/Calculator.composite

Modified: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ComponentTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ComponentTypeHandler.java?view=diff&rev=518384&r1=518383&r2=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ComponentTypeHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ComponentTypeHandler.java Wed Mar 14 16:48:15 2007
@@ -20,6 +20,7 @@
 package org.apache.tuscany.assembly.reader;
 
 import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.ComponentService;
 import org.apache.tuscany.assembly.model.ComponentType;
 import org.apache.tuscany.assembly.model.Property;
 import org.apache.tuscany.assembly.model.Reference;
@@ -61,6 +62,12 @@
                 reference = factory.createReference();
                 reference.setName(getString(attr, "name"));
 
+                //TODO support multivalued attribute
+            	ComponentService target = factory.createComponentService();
+            	target.setUndefined(true);
+            	target.setName(getString(attr, "target"));
+            	reference.getTargets().add(target);
+            	
             } else if ("property".equals(name)) {
                 property = factory.createProperty();
                 readProperty(property, attr);

Modified: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/CompositeHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/CompositeHandler.java?view=diff&rev=518384&r1=518383&r2=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/CompositeHandler.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/CompositeHandler.java Wed Mar 14 16:48:15 2007
@@ -28,6 +28,7 @@
 import org.apache.tuscany.assembly.model.CompositeReference;
 import org.apache.tuscany.assembly.model.CompositeService;
 import org.apache.tuscany.assembly.model.Property;
+import org.apache.tuscany.assembly.model.Wire;
 import org.apache.tuscany.assembly.reader.util.BaseHandler;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
@@ -49,6 +50,7 @@
     private ComponentProperty componentProperty;
     private CompositeService compositeService;
     private CompositeReference compositeReference;
+    private Wire wire;
 
     public CompositeHandler(AssemblyFactory factory, XMLReader reader) {
         super(factory, reader);
@@ -71,15 +73,33 @@
                 } else {
                     compositeService = factory.createCompositeService();
                     compositeService.setName(getString(attr, "name"));
+
+                    ComponentService promoted = factory.createComponentService();
+                	promoted.setUndefined(true);
+                	promoted.setName(getString(attr, "promote"));
+                	compositeService.setPromotedService(promoted);
                 }
 
             } else if ("reference".equals(name)) {
                 if (component != null) {
                     componentReference = factory.createComponentReference();
                     componentReference.setName(getString(attr, "name"));
+
+                    //TODO support multivalued attribute
+                	ComponentService target = factory.createComponentService();
+                	target.setUndefined(true);
+                	target.setName(getString(attr, "target"));
+                	componentReference.getTargets().add(target);
+                    
                 } else {
                     compositeReference = factory.createCompositeReference();
                     compositeReference.setName(getString(attr, "name"));
+
+                    //TODO support multivalued attribute
+                    ComponentReference promoted = factory.createComponentReference();
+                	promoted.setUndefined(true);
+                	promoted.setName(getString(attr, "promote"));
+                	compositeReference.getPromotedReferences().add(promoted);
                 }
 
             } else if ("property".equals(name)) {
@@ -95,14 +115,27 @@
                 component = factory.createComponent();
                 component.setName(getString(attr, "name"));
                 component.setConstrainingType(getConstrainingType(attr));
+                
+            } else if ("wire".equals(name)) {
+            	wire = factory.createWire();
+            	
+            	ComponentReference source = factory.createComponentReference();
+            	source.setUndefined(true);
+            	source.setName(getString(attr, "source"));
+            	wire.setSource(source);
+            	
+            	ComponentService target = factory.createComponentService();
+            	target.setUndefined(true);
+            	target.setName(getString(attr, "target"));
+            	wire.setTarget(target);
             }
         }
     }
 
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        if ("composite".equals(localName)) {
+    public void endElement(String uri, String name, String qname) throws SAXException {
+        if ("composite".equals(name)) {
 
-        } else if ("service".equals(localName)) {
+        } else if ("service".equals(name)) {
 
             if (component != null) {
                 component.getServices().add(componentService);
@@ -112,7 +145,7 @@
                 compositeService = null;
             }
 
-        } else if ("reference".equals(localName)) {
+        } else if ("reference".equals(name)) {
 
             if (component != null) {
                 component.getReferences().add(componentReference);
@@ -122,7 +155,7 @@
                 compositeReference = null;
             }
 
-        } else if ("property".equals(localName)) {
+        } else if ("property".equals(name)) {
 
             if (component != null) {
                 component.getProperties().add(componentProperty);
@@ -132,10 +165,13 @@
                 property = null;
             }
 
-        } else if ("component".equals(localName)) {
-
+        } else if ("component".equals(name)) {
             composite.getComponents().add(component);
             component = null;
+
+        } else if ("wire".equals(name)) {
+            composite.getWires().add(wire);
+            wire= null;
 
         }
     }

Modified: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ReadTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ReadTestCase.java?view=diff&rev=518384&r1=518383&r2=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ReadTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/ReadTestCase.java Wed Mar 14 16:48:15 2007
@@ -25,6 +25,7 @@
 
 import org.apache.tuscany.assembly.model.AssemblyFactory;
 import org.apache.tuscany.assembly.model.impl.AssemblyFactoryImpl;
+import org.apache.tuscany.assembly.reader.util.PrintUtil;
 import org.xml.sax.InputSource;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.XMLReaderFactory;
@@ -38,13 +39,14 @@
 
     AssemblyFactory factory;
     XMLReader reader;
-
+    
     public void setUp() throws Exception {
         factory = new AssemblyFactoryImpl();
 
         reader = XMLReaderFactory.createXMLReader();
         reader.setFeature("http://xml.org/sax/features/namespaces", true);
         reader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
+        
     }
 
     public void tearDown() throws Exception {
@@ -58,6 +60,8 @@
         reader.setContentHandler(handler);
         reader.parse(new InputSource(is));
         assertNotNull(handler.getComponentType());
+        
+        new PrintUtil(System.out).print(handler.getComponentType());
     }
 
     public void testReadConstrainingType() throws Exception {
@@ -66,7 +70,15 @@
         reader.setContentHandler(handler);
         reader.parse(new InputSource(is));
         assertNotNull(handler.getConstrainingType());
+
+        new PrintUtil(System.out).print(handler.getConstrainingType());
     }
+    
+    public static void main(String[] args) throws Exception {
+		ReadTestCase tc = new ReadTestCase();
+		tc.setUp();
+		tc.testReadComposite();
+	}
 
     public void testReadComposite() throws Exception {
         InputStream is = getClass().getClassLoader().getResourceAsStream("Calculator.composite");
@@ -74,6 +86,8 @@
         reader.setContentHandler(handler);
         reader.parse(new InputSource(is));
         assertNotNull(handler.getComposite());
+
+        new PrintUtil(System.out).print(handler.getComposite());
     }
 
 }

Added: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java?view=auto&rev=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java (added)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java Wed Mar 14 16:48:15 2007
@@ -0,0 +1,110 @@
+/*
+ * 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.assembly.reader.util;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A simple print utility class to help print the assembly model.
+ *
+ *  @version $Rev$ $Date$
+ */
+public class PrintUtil {
+	
+	PrintWriter out;
+	Set<Object> objs = new HashSet<Object>();
+	int level;
+	
+	public PrintUtil(OutputStream out) {
+		this.out = new PrintWriter(new OutputStreamWriter(out), true);
+	}
+	
+	void indent(int level) {
+		for (int i=0; i<level; i++) {
+			out.print("  ");
+		}
+	}
+	
+	public void print(Object obj) {
+		if (objs.contains(obj)) {
+			indent(level);
+			out.println(obj.getClass().getName()+"@"+System.identityHashCode(obj));
+		}
+		else {
+			objs.add(obj);
+			try {
+				indent(level);
+				out.println(obj.getClass().getSimpleName() + " {");
+				BeanInfo bi = Introspector.getBeanInfo(obj.getClass());
+				for (PropertyDescriptor pd: bi.getPropertyDescriptors()) {
+					try {
+						Object pv = pd.getReadMethod().invoke(obj);
+						if (pv != null) {
+							if (pv instanceof List) {
+								if (!((List)pv).isEmpty()) {
+									level++;
+									indent(level);
+									out.println(pd.getName() + "= [");
+									for (Object e: (List)pv) {
+										level++;
+										print(e);
+										level--;
+									}
+									indent(level);
+									out.println( " ]");
+									level--;
+								}
+							}
+							else {
+								Class<?> pvc = pv.getClass();
+								if (pvc.isPrimitive() || pvc.getName().startsWith("java.") || pvc.getName().startsWith("javax.")) {
+									if (!pd.getName().equals("class")) {
+										if (!(Boolean.FALSE.equals(pv))) {
+											indent(level+1);
+											out.println(pd.getName() + "=" + pv);
+										}
+									}
+								} else {
+									level++;
+									print(pv);
+									level--;
+								}
+							}
+						}
+					} catch (Exception e) {}
+				}
+				indent(level);
+				out.println("}");
+			} catch (IntrospectionException e) {
+				indent(level);
+				out.println(e);
+			}
+		}
+	}
+
+}

Propchange: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/reader/util/PrintUtil.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/writer/ComponentTypeWriter.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/writer/ComponentTypeWriter.java?view=diff&rev=518384&r1=518383&r2=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/writer/ComponentTypeWriter.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/java/org/apache/tuscany/assembly/writer/ComponentTypeWriter.java Wed Mar 14 16:48:15 2007
@@ -54,8 +54,11 @@
     	}
     	
     	for (Reference reference: componentType.getReferences()) {
+    		//TODO handle multivalued target attribute
+    		String target = reference.getTargets().isEmpty()? null: reference.getTargets().get(0).getName();
     		out.startElement(sca10, "reference", "reference", attrs(
-    			new Attr("name", reference.getName())
+    			new Attr("name", reference.getName()),
+    			new Attr("target", target)
     		));
     	}
     	

Modified: incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/resources/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/resources/Calculator.composite?view=diff&rev=518384&r1=518383&r2=518384
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/resources/Calculator.composite (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/scdl/src/test/resources/Calculator.composite Wed Mar 14 16:48:15 2007
@@ -21,17 +21,16 @@
 	xmlns:calc="http://sample.calculator"
 	name="calc:Calculator">
 
-    <service name="CalculatorService">
+    <service name="CalculatorService" promote="CalculatorServiceComponent">
         <interface.java interface="calculator.CalculatorService"/>
-        <reference>CalculatorServiceComponent</reference>
     </service>
 
     <component name="CalculatorServiceComponent">
 		<implementation.java class="calculator.CalculatorServiceImpl"/>
-        <reference name="addService">AddServiceComponent</reference>
-        <reference name="subtractService">SubtractServiceComponent</reference>
-        <reference name="multiplyService">MultiplyServiceComponent</reference>
-        <reference name="divideService">DivideServiceComponent</reference>
+        <reference name="addService" target="AddServiceComponent"/>
+        <reference name="subtractService" target="SubtractServiceComponent"/>
+        <reference name="multiplyService" target="MultiplyServiceComponent"/>
+        <reference name="divideService" target="DivideServiceComponent"/>
     </component>
 
     <component name="AddServiceComponent">



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org