Author: jsdelfino
Date: Tue Jul 20 04:36:16 2010
New Revision: 965722

URL: http://svn.apache.org/viewvc?rev=965722&view=rev
Log:
Add support for properties.

Added:
    
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonProperty.java
Modified:
    
tuscany/sandbox/sebastien/java/dynamic/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
    
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/java/org/apache/tuscany/sca/implementation/python/provider/PythonImplementationProvider.java
    
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/resources/invoker.py
    
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonImplementation.java

Modified: 
tuscany/sandbox/sebastien/java/dynamic/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/sebastien/java/dynamic/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java?rev=965722&r1=965721&r2=965722&view=diff
==============================================================================
--- 
tuscany/sandbox/sebastien/java/dynamic/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
 (original)
+++ 
tuscany/sandbox/sebastien/java/dynamic/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
 Tue Jul 20 04:36:16 2010
@@ -61,8 +61,9 @@ public class JSONRPCBindingInvoker imple
             String requestId = "1";
             post = new HttpPost(uri);
 
-            String req; 
-            if 
(!msg.getOperation().getWrapper().getDataBinding().equals(JSONDataBinding.NAME))
 {
+            final String db = msg.getOperation().getWrapper().getDataBinding();
+            String req;
+            if (!db.equals(JSONDataBinding.NAME)) {
                
 
                 JSONObject jsonRequest = null;;
@@ -97,7 +98,7 @@ public class JSONRPCBindingInvoker imple
                 //success 
                 try {
                        String entityResponse = 
EntityUtils.toString(response.getEntity());                     
-                    if 
(!msg.getOperation().getWrapper().getDataBinding().equals(JSONDataBinding.NAME))
 {
+                    if (!db.equals(JSONDataBinding.NAME)) {
                         JSONObject jsonResponse = new 
JSONObject(entityResponse);
 
                            //check requestId

Modified: 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/java/org/apache/tuscany/sca/implementation/python/provider/PythonImplementationProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/java/org/apache/tuscany/sca/implementation/python/provider/PythonImplementationProvider.java?rev=965722&r1=965721&r2=965722&view=diff
==============================================================================
--- 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/java/org/apache/tuscany/sca/implementation/python/provider/PythonImplementationProvider.java
 (original)
+++ 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/java/org/apache/tuscany/sca/implementation/python/provider/PythonImplementationProvider.java
 Tue Jul 20 04:36:16 2010
@@ -22,10 +22,12 @@ package org.apache.tuscany.sca.implement
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.tuscany.sca.assembly.ComponentProperty;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.core.invocation.ProxyFactory;
 import org.apache.tuscany.sca.implementation.python.PythonEval;
 import org.apache.tuscany.sca.implementation.python.PythonImplementation;
+import org.apache.tuscany.sca.implementation.python.PythonProperty;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.provider.ImplementationProvider;
@@ -65,7 +67,7 @@ class PythonImplementationProvider imple
        python.exec("from invoker import *");
        
        final List<PyObject> px = new ArrayList<PyObject>();
-       for (ComponentReference r: component.getReferences()) {
+       for (final ComponentReference r: component.getReferences()) {
                final PythonEval pe = pxFactory.createProxy(PythonEval.class, 
(RuntimeEndpointReference)r.getEndpointReferences().get(0));
             px.add(Py.java2py(new PythonEval() {
                @Override
@@ -75,9 +77,19 @@ class PythonImplementationProvider imple
                }
             }));
        }
+       final List<PyObject> pr = new ArrayList<PyObject>();
+       for (final ComponentProperty p: component.getProperties()) {
+               final String v = String.valueOf(p.getValue()); 
+            pr.add(Py.java2py(new PythonProperty() {
+                               @Override
+                               public String eval() {
+                       return v;
+                               }
+                       }));
+       }
 
        PyObject mkc = python.get("mkcomponent");
-       callable = mkc.__call__(new PyString(component.getName()), new 
PyString(implementation.getScript()), new PyTuple(px.toArray(new PyObject[0])));
+       callable = mkc.__call__(new PyString(component.getName()), new 
PyString(implementation.getScript()), new PyTuple(px.toArray(new PyObject[0])), 
new PyTuple(pr.toArray(new PyObject[0])));
     }
 
     public void stop() {

Modified: 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/resources/invoker.py
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/resources/invoker.py?rev=965722&r1=965721&r2=965722&view=diff
==============================================================================
--- 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/resources/invoker.py
 (original)
+++ 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python-runtime/src/main/resources/invoker.py
 Tue Jul 20 04:36:16 2010
@@ -52,19 +52,37 @@ def mkproxies(jpx):
         return ()
     return cons(proxy(car(jpx)), mkproxies(cdr(jpx)))
 
+class prop:
+    def __init__(self, jpy):
+        self.jpy = jpy
+
+    def __call__(self):
+        # Eval the property
+        res = self.jpy.eval()
+        return res
+
+def __repr__(self):
+    return repr((jpy,))
+
+def mkprops(jpy):
+    if isNil(jpy):
+        return ()
+    return cons(prop(car(jpy)), mkprops(cdr(jpy)))
+
 # Make a callable component
 class component:
-    def __init__(self, name, impl, jpx):
+    def __init__(self, name, impl, jpx, jpy):
         self.name = name
         self.impl = impl[0:len(impl) - 3]
         self.mod = __import__(self.impl)
         self.proxies = mkproxies(jpx)
+        self.props = mkprops(jpy)
 
     def __call__(self, func, *args):
-        return self.mod.__getattribute__(func)(*(args + self.proxies))
+        return self.mod.__getattribute__(func)(*(args + self.proxies + 
self.props))
 
     def __repr__(self):
-        return repr((self.name, self.impl, self.mod, self.svcs, self.refs, 
self.props, self.proxies))
+        return repr((self.name, self.impl, self.mod, self.props, self.proxies))
 
 # Converts the args received in a JSON request to a list of key value pairs
 def jsonArgs(a):
@@ -84,6 +102,7 @@ def apply(jsreq, comp):
     return jsonResult(jid, v)[0]
 
 # Make a component that can be called with a JSON function request
-def mkcomponent(name, impl, jpx):
-    comp = component(name, impl, jpx)
+def mkcomponent(name, impl, jpx, jpy):
+    comp = component(name, impl, jpx, jpy)
     return lambda jsreq: apply(jsreq, comp)
+

Modified: 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonImplementation.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonImplementation.java?rev=965722&r1=965721&r2=965722&view=diff
==============================================================================
--- 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonImplementation.java
 (original)
+++ 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonImplementation.java
 Tue Jul 20 04:36:16 2010
@@ -20,12 +20,16 @@ package org.apache.tuscany.sca.implement
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.assembly.Property;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
+import org.apache.tuscany.sca.assembly.impl.PropertyImpl;
 import org.apache.tuscany.sca.assembly.impl.ReferenceImpl;
 import org.apache.tuscany.sca.assembly.impl.ServiceImpl;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
  * The model representing a Python implementation in an SCA assembly.
@@ -79,5 +83,21 @@ public class PythonImplementation extend
        final Reference nr = new DynReference();
        getReferences().add(nr);
        return nr;
-    }    
+    }
+    
+    public Property getProperty(final String n) {
+       final Property p = super.getProperty(n);
+       if (p != null)
+               return p;
+       class DynProperty extends PropertyImpl {
+               public DynProperty() {
+               setName(n);
+               setDataType(new DataTypeImpl<XMLType>(null, String.class, 
String.class, XMLType.UNKNOWN));
+               setXSDType(new QName("http://www.w3.org/2001/XMLSchema";, 
"string"));
+                       }
+       }
+       final Property np = new DynProperty();
+       getProperties().add(np);
+       return np;
+    }
 }

Added: 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonProperty.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonProperty.java?rev=965722&view=auto
==============================================================================
--- 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonProperty.java
 (added)
+++ 
tuscany/sandbox/sebastien/java/dynamic/modules/implementation-python/src/main/java/org/apache/tuscany/sca/implementation/python/PythonProperty.java
 Tue Jul 20 04:36:16 2010
@@ -0,0 +1,33 @@
+/*
+ * 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.python;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+
+/**
+ * Python component property evaluation interface.
+ * 
+ * @version $Rev$ $Date$
+ */
+...@remotable
+public interface PythonProperty {
+
+       public String eval();
+}


Reply via email to