From ba79133f08b3d06dd1475ed0a88aabc45689255a Mon Sep 17 00:00:00 2001 From: antelder Date: Wed, 17 Nov 2010 13:26:10 +0000 Subject: Get the Shell invoke function working and add a services command to show the available services git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1036030 13f79535-47bb-0310-9956-ffa450edef68 --- .../core/assembly/impl/RuntimeComponentImpl.java | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'sca-java-2.x/trunk/modules/core') diff --git a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentImpl.java b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentImpl.java index 6032005b9a..a71c823c11 100644 --- a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentImpl.java +++ b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentImpl.java @@ -22,6 +22,9 @@ package org.apache.tuscany.sca.core.assembly.impl; import java.util.ArrayList; import java.util.List; +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.assembly.CompositeService; import org.apache.tuscany.sca.assembly.impl.ComponentImpl; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.contribution.resolver.ResolverExtension; @@ -31,6 +34,8 @@ import org.apache.tuscany.sca.provider.ImplementationProvider; import org.apache.tuscany.sca.provider.PolicyProvider; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentContext; +import org.oasisopen.sca.ServiceReference; +import org.oasisopen.sca.ServiceRuntimeException; /** * @version $Rev$ $Date$ @@ -108,4 +113,46 @@ public class RuntimeComponentImpl extends ComponentImpl implements RuntimeCompon public String toString() { return getName(); } + + @Override + public ServiceReference getServiceReference(Class businessInterface, String serviceName) { + RuntimeComponentContext componentContext = null; + + // If the component is a composite, then we need to find the + // non-composite component that provides the requested service + if (getImplementation() instanceof Composite) { + for (ComponentService componentService : getServices()) { + String bindingName = null; + if (serviceName != null) { + int index = serviceName.indexOf('/'); + if (index != -1) { + bindingName = serviceName.substring(index + 1); + serviceName = serviceName.substring(0, index); + } + } + if (serviceName == null || serviceName.equals(componentService.getName())) { + CompositeService compositeService = (CompositeService)componentService.getService(); + if (compositeService != null) { + componentContext = + ((RuntimeComponent)compositeService.getPromotedComponent()).getComponentContext(); + serviceName = compositeService.getPromotedService().getName(); + if (bindingName != null) { + serviceName = serviceName + "/" + bindingName; + } + return componentContext.createSelfReference(businessInterface, serviceName); + } + break; + } + } + // No matching service found + throw new ServiceRuntimeException("Composite service not found: " + serviceName); + } else { + componentContext = getComponentContext(); + if (serviceName != null) { + return componentContext.createSelfReference(businessInterface, serviceName); + } else { + return componentContext.createSelfReference(businessInterface); + } + } + } } -- cgit v1.2.3