Add support for properties.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@965722 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
08f6c248d0
commit
c857c88725
5 changed files with 96 additions and 11 deletions
|
|
@ -61,8 +61,9 @@ public class JSONRPCBindingInvoker implements Invoker {
|
|||
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 implements Invoker {
|
|||
//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
|
||||
|
|
|
|||
|
|
@ -22,10 +22,12 @@ package org.apache.tuscany.sca.implementation.python.provider;
|
|||
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 implements ImplementationProvider {
|
|||
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 implements ImplementationProvider {
|
|||
}
|
||||
}));
|
||||
}
|
||||
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() {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -20,12 +20,16 @@ package org.apache.tuscany.sca.implementation.python;
|
|||
|
||||
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 extends ImplementationImpl {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue