summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/extensibility/src
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-02-13 01:19:32 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-02-13 01:19:32 +0000
commitc11d800db46ab42e99d7837427dd07dccaffc66a (patch)
tree3f2c5ec0e5f0a6f6e46c2a01bad010450ecaa80e /sca-java-2.x/trunk/modules/extensibility/src
parent788e5e52292aad11f345c247b418386138976cea (diff)
Start to make extension points/extensions configurable from NodeFactory/ServiceDiscovery
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@909678 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/extensibility/src')
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java45
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java14
2 files changed, 58 insertions, 1 deletions
diff --git a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
index ea3cf6d74f..00a037b4ed 100644
--- a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
+++ b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
@@ -24,12 +24,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.tuscany.sca.extensibility.impl.ClassLoaderDelegate;
import org.apache.tuscany.sca.extensibility.impl.LDAPFilter;
/**
@@ -44,6 +45,7 @@ public final class ServiceDiscovery implements ServiceDiscoverer {
private final static Logger logger = Logger.getLogger(ServiceDiscovery.class.getName());
private final static ServiceDiscovery INSTANCE = new ServiceDiscovery();
+ private final Map<String, Map<String, String>> serviceAttributes = new HashMap<String, Map<String, String>>();
private ServiceDiscoverer discoverer;
private ServiceDiscovery() {
@@ -98,6 +100,15 @@ public final class ServiceDiscovery implements ServiceDiscoverer {
public Collection<ServiceDeclaration> getServiceDeclarations(String name, boolean byRanking) throws IOException {
Collection<ServiceDeclaration> declarations = getServiceDiscoverer().getServiceDeclarations(name);
+ // Check if any of the service declarations has attributes that are overrided
+ if (!serviceAttributes.isEmpty()) {
+ for (ServiceDeclaration declaration : declarations) {
+ Map<String, String> attrs = getAttributes(name);
+ if (attrs != null) {
+ declaration.getAttributes().putAll(attrs);
+ }
+ }
+ }
if (!byRanking) {
return declarations;
}
@@ -237,5 +248,37 @@ public final class ServiceDiscovery implements ServiceDiscoverer {
public ClassLoader getContextClassLoader() {
return discoverer.getContextClassLoader();
}
+
+ /**
+ * Set the attributes for a given service type
+ * @param serviceType
+ * @param attributes
+ */
+ public void setAttribute(String serviceType, Map<String, String> attributes) {
+ serviceAttributes.put(serviceType, attributes);
+ }
+
+ /**
+ * Set an attribute to the given value for a service type
+ * @param serviceType The service type
+ * @param attribute The attribute name
+ * @param value The attribute value
+ */
+ public void setAttribute(String serviceType, String attribute, String value) {
+ Map<String, String> attributes = serviceAttributes.get(serviceType);
+ if (attributes == null) {
+ attributes = new HashMap<String, String>();
+ serviceAttributes.put(serviceType, attributes);
+ }
+ attributes.put(attribute, value);
+ }
+ /**
+ * Return a map of attributes for a given service type
+ * @param serviceType
+ * @return
+ */
+ public Map<String, String> getAttributes(String serviceType) {
+ return serviceAttributes.get(serviceType);
+ }
}
diff --git a/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java b/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java
index 7a2f680d16..e13a47cc1b 100644
--- a/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java
+++ b/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java
@@ -65,6 +65,20 @@ public class ServiceDiscoveryTestCase {
Assert.assertEquals("org.apache.tuscany.sca.extensibility.test.Test2Impl", sd1.getClassName());
Assert.assertEquals("org.apache.tuscany.sca.extensibility.test.TestImpl", sd2.getClassName());
}
+
+ @Test
+ /**
+ * Test if the external attributes override the one in the META-INF/services/<SPI>
+ */
+ public void testAttributes() throws Exception {
+ ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance(new ContextClassLoaderServiceDiscoverer());
+ serviceDiscovery.setAttribute(TestInterface.class.getName(), "attr", "value");
+ serviceDiscovery.setAttribute(TestInterface.class.getName(), "attr1", "value1");
+ for (ServiceDeclaration sd : serviceDiscovery.getServiceDeclarations(TestInterface.class)) {
+ Assert.assertEquals("value1", sd.getAttributes().get("attr1"));
+ Assert.assertEquals("value", sd.getAttributes().get("attr"));
+ }
+ }
@Test
public void testFilter() throws Exception {