diff options
author | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-18 14:54:01 +0000 |
---|---|---|
committer | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-18 14:54:01 +0000 |
commit | 76c424d8d41248ba25f5e14400723f826a6e5fd0 (patch) | |
tree | 9a21153f230b8c2489773a735d8f1dafc166617c /java/sca/modules | |
parent | 27e63932d20286ec3783ff23099e92b73bd78620 (diff) |
TUSCANY-2281 provide a api to allow service references to be retrieved for references where the multiplicity >1. Thanks to Daniel Stucky for the patch.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@696666 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules')
-rw-r--r-- | java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextImpl.java | 49 | ||||
-rw-r--r-- | java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java | 24 |
2 files changed, 73 insertions, 0 deletions
diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextImpl.java index ed01a509d2..2bcf13f679 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextImpl.java @@ -21,6 +21,8 @@ package org.apache.tuscany.sca.core.context; import java.io.IOException; import java.io.Reader; import java.io.Writer; +import java.util.Collection; +import java.util.ArrayList; import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Binding; @@ -107,6 +109,14 @@ public class ComponentContextImpl implements RuntimeComponentContext { try { for (ComponentReference ref : component.getReferences()) { if (referenceName.equals(ref.getName())) { + /* ******************** Contribution for issue TUSCANY-2281 ******************** */ + Multiplicity multiplicity = ref.getMultiplicity(); + if( multiplicity == Multiplicity.ZERO_N || multiplicity == Multiplicity.ONE_N) + { + throw new IllegalArgumentException("Reference " + referenceName + " has multiplicity " + multiplicity); + } + /* ******************** Contribution for issue TUSCANY-2281 ******************** */ + return getServiceReference(businessInterface, (RuntimeComponentReference)ref, null); } } @@ -400,4 +410,43 @@ public class ComponentContextImpl implements RuntimeComponentContext { public void write(RuntimeComponentReference reference, Writer writer) throws IOException { compositeActivator.getComponentContextHelper().write(component, reference, writer); } + + /* ******************** Contribution for issue TUSCANY-2281 ******************** */ + + /** + * @see ComponentContext#getServices(Class<B>, String) + */ + public <B> Collection<B> getServices(Class<B> businessInterface, String referenceName) { + ArrayList<B> services = new ArrayList<B>(); + Collection<ServiceReference<B>> serviceRefs = getServiceReferences(businessInterface, referenceName); + for (ServiceReference<B> serviceRef : serviceRefs) { + services.add(serviceRef.getService()); + } + return services; + } + + /** + * @see ComponentContext#getServiceReferences(Class<B>, String) + */ + public <B> Collection<ServiceReference<B>> getServiceReferences(Class<B> businessInterface, String referenceName) { + try { + for (ComponentReference ref : component.getReferences()) { + if (referenceName.equals(ref.getName())) { + ArrayList<ServiceReference<B>> serviceRefs = new ArrayList<ServiceReference<B>>(); + for(Binding binding : ref.getBindings()) + { + serviceRefs.add( getServiceReference(businessInterface, (RuntimeComponentReference) ref, binding) ); + } + return serviceRefs; + } + } + throw new ServiceRuntimeException("Reference not found: " + referenceName); + } catch (ServiceRuntimeException e) { + throw e; + } catch (Exception e) { + throw new ServiceRuntimeException(e.getMessage(), e); + } + } + /* ******************** Contribution for issue TUSCANY-2281 ******************** */ + } diff --git a/java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java b/java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java index 616d4c6338..044deeb632 100644 --- a/java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java +++ b/java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java @@ -18,6 +18,8 @@ */ package org.osoa.sca; +import java.util.Collection; + /** * Interface providing programmatic access to a component's SCA context as an alternative to injection. * It provides access to reference and property values for the component and provides a mechanism for @@ -106,4 +108,26 @@ public interface ComponentContext { * @return the SCA request context; may be null */ RequestContext getRequestContext(); + + + /* ******************** Contribution for issue TUSCANY-2281 ******************** */ + + /** + * Returns a Collection of typed service proxies for a business interface type and a reference name. + * @param businessInterface the interface that will be used to invoke the service + * @param referenceName the name of the reference + * @param <B> the Java type of the business interface for the reference + * @return a Collection of objects that implements the business interface + */ + <B> Collection<B> getServices(Class<B> businessInterface, String referenceName); + + + /** + * Returns a Collection of typed service reference for a business interface type and a reference name. + * @param businessInterface the interface that will be used to invoke the service + * @param referenceName the name of the reference + * @param <B> the Java type of the business interface for the reference + * @return a Collection of objects that implements the business interface + */ + <B> Collection<ServiceReference<B>> getServiceReferences(Class<B> businessInterface, String referenceName); } |