From 36436b71b9977d6b5940cb6285d5335708ef9bfa Mon Sep 17 00:00:00 2001 From: lresende Date: Sat, 21 Nov 2009 07:55:20 +0000 Subject: Moving 1.x tags git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@882851 13f79535-47bb-0310-9956-ffa450edef68 --- .../js/context/JavaScriptComponentContext.java | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 sca-java-1.x/tags/java-stable-20060304/sca/container.js/src/main/java/org/apache/tuscany/container/js/context/JavaScriptComponentContext.java (limited to 'sca-java-1.x/tags/java-stable-20060304/sca/container.js/src/main/java/org/apache/tuscany/container/js/context/JavaScriptComponentContext.java') diff --git a/sca-java-1.x/tags/java-stable-20060304/sca/container.js/src/main/java/org/apache/tuscany/container/js/context/JavaScriptComponentContext.java b/sca-java-1.x/tags/java-stable-20060304/sca/container.js/src/main/java/org/apache/tuscany/container/js/context/JavaScriptComponentContext.java new file mode 100644 index 0000000000..8a4db7eb44 --- /dev/null +++ b/sca-java-1.x/tags/java-stable-20060304/sca/container.js/src/main/java/org/apache/tuscany/container/js/context/JavaScriptComponentContext.java @@ -0,0 +1,161 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed 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.container.js.context; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.tuscany.container.js.rhino.RhinoScript; +import org.apache.tuscany.core.context.AbstractContext; +import org.apache.tuscany.core.context.CoreRuntimeException; +import org.apache.tuscany.core.context.LifecycleEventListener; +import org.apache.tuscany.core.context.QualifiedName; +import org.apache.tuscany.core.context.SimpleComponentContext; +import org.apache.tuscany.core.context.TargetException; +import org.apache.tuscany.core.invocation.spi.ProxyCreationException; +import org.apache.tuscany.core.invocation.spi.ProxyFactory; + +public class JavaScriptComponentContext extends AbstractContext implements SimpleComponentContext { + + private Map services; + + private RhinoScript rhinoInvoker; + + private Map properties; + + private Map sourceProxyFactories; + + private Map targetProxyFactories; + + private Object instance; + + public JavaScriptComponentContext(String name, Map services, Map properties, + Map sourceProxyFactories, Map targetProxyFactories, RhinoScript invoker) { + super(name); + assert (services != null) : "No service interface mapping specified"; + assert (properties != null) : "No properties specified"; + this.services = services; + this.properties = properties; + this.rhinoInvoker = invoker; + this.sourceProxyFactories = sourceProxyFactories; + this.targetProxyFactories = targetProxyFactories; + } + + public Object getInstance(QualifiedName qName) throws TargetException { + return getInstance(qName, true); + } + + public synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException { + String portName=qName.getPortName(); + ProxyFactory targetFactory; + if (portName!=null) { + targetFactory = targetProxyFactories.get(portName); + } else { + //FIXME The port name is null here, either locateService needs more information (the expected interface) to + // select the correct port, or we need to return a factory that matches the whole set of services exposed by + // the component. + targetFactory = targetProxyFactories.values().iterator().next(); + } + if (targetFactory == null) { + TargetException e = new TargetException("Target service not found"); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw e; + } + try { + Object proxy = targetFactory.createProxy(); //createProxy(new Class[] { iface }); + notifyListeners(notify); + return proxy; + } catch (ProxyCreationException e) { + TargetException te = new TargetException("Error returning target", e); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw te; + } + } + + public Object getImplementationInstance() throws TargetException { + return getImplementationInstance(true); + } + + public Object getImplementationInstance(boolean notify) throws TargetException { + rhinoInvoker.updateScriptScope(properties); // create prop values + return rhinoInvoker; + } + +// private Object createProxy(Class[] ifaces) throws ProxyCreationException { +// // final RhinoInvoker rhinoInvoker = implementation.getRhinoInvoker().copy(); +// rhinoInvoker.updateScriptScope(properties); // create prop values +// final Map refs = createInvocationContext(); +// InvocationHandler ih = new InvocationHandler() { +// public Object invoke(Object proxy, Method method, Object[] args) { +// return rhinoInvoker.invoke(method.getName(), args, method.getReturnType(), refs); +// // return rhinoInvoker.invoke(method.getName(), args, method.getReturnType(),createInvocationContext()); +// } +// }; +// return Proxy.newProxyInstance(ifaces[0].getClassLoader(), ifaces, ih); +// } + + private void notifyListeners(boolean notify) { + if (notify) { + for (Iterator iter = contextListener.iterator(); iter.hasNext();) { + LifecycleEventListener listener = (LifecycleEventListener) iter.next(); + listener.onInstanceCreate(this); + } + } + } + + /** + * Creates a map containing any properties and their values + */ + // private Map createPropertyValues() { + // Map context = new HashMap(); + // List configuredProperties = component.getConfiguredProperties(); + // if (configuredProperties != null) { + // for (ConfiguredProperty property : configuredProperties) { + // context.put(property.getProperty().getName(), property.getValue()); + // } + // } + // return context; + // } + /** + * Creates a map containing any ServiceReferences + */ + private Map createInvocationContext() throws ProxyCreationException { + Map context = new HashMap(); + for (Map.Entry entry : sourceProxyFactories.entrySet()) { + context.put(entry.getKey(), entry.getValue().createProxy()); + } + return context; + } + + public boolean isEagerInit() { + return false; + } + + public boolean isDestroyable() { + return false; + } + + public void start() throws CoreRuntimeException { + } + + public void stop() throws CoreRuntimeException { + } + +} -- cgit v1.2.3