summaryrefslogtreecommitdiffstats
path: root/java/sca/modules
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2008-09-18 14:54:01 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2008-09-18 14:54:01 +0000
commit76c424d8d41248ba25f5e14400723f826a6e5fd0 (patch)
tree9a21153f230b8c2489773a735d8f1dafc166617c /java/sca/modules
parent27e63932d20286ec3783ff23099e92b73bd78620 (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.java49
-rw-r--r--java/sca/modules/sca-api/src/main/java/org/osoa/sca/ComponentContext.java24
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);
}