summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/node-api/src/main
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2010-04-15 08:01:56 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2010-04-15 08:01:56 +0000
commita43994bff0d9017a72f7d41453e762969282f5df (patch)
tree69647fe0f749fbba0be4963afdd24a368d04a433 /sca-java-2.x/trunk/modules/node-api/src/main
parenta9c9465252877dcfd64f972e0fc4db0460d4c048 (diff)
Start adding support for configureing the runtime (NodeFactory) via some properties. Also add the init method to NodeFactory class so you don't have to cast it to a NodeFactoryImpl
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@934322 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/node-api/src/main')
-rw-r--r--sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java102
1 files changed, 85 insertions, 17 deletions
diff --git a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
index e4df78ffde..d7b487a688 100644
--- a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
+++ b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
@@ -21,17 +21,19 @@ package org.apache.tuscany.sca.node;
import static org.apache.tuscany.sca.node.ContributionLocationHelper.getContributionLocations;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -193,27 +195,91 @@ public abstract class NodeFactory extends DefaultNodeConfigurationFactory {
}
return nodeFactory;
}
+
+ protected Properties properties;
public static NodeFactory newInstance(Properties properties) {
- Map<String, Map<String, String>> attributes = new HashMap<String, Map<String,String>>();
- for (String key : properties.stringPropertyNames()) {
- int i = key.lastIndexOf('.');
- String mk, m2k;
- if (i > -1) {
- mk = key.substring(0, i);
- m2k = key.substring(i+1);
- } else {
- mk = "system";
- m2k = key;
+ NodeFactory nodeFactory = null;
+ try {
+ Class<?> factoryClass = getFactoryImplClass();
+ nodeFactory = (NodeFactory)factoryClass.newInstance();
+ nodeFactory.properties = properties;
+ } catch (Exception e) {
+ throw new ServiceRuntimeException(e);
+ }
+ return nodeFactory;
+ }
+
+ public static NodeFactory newInstance(String configURI) {
+ Properties properties;
+ if (configURI == null || configURI.length() < 1) {
+ properties = new Properties();
+ } else if (configURI.startsWith("properties:")) {
+ try {
+ properties = loadProperties(configURI);
+ } catch (IOException e) {
+ throw new ServiceRuntimeException(e);
}
- Map<String,String> m2 = attributes.get(mk);
- if (m2 == null) {
- m2 = new HashMap<String, String>();
- attributes.put(mk, m2);
+ } else if (configURI.startsWith("uri:")) {
+ properties = parseConfigURI(configURI);
+ } else {
+ properties = new Properties();
+ properties.setProperty("configURI", configURI);
+ }
+ return newInstance(properties);
+ }
+
+ /**
+ * Parse the config URI into a Properties object.
+ * The config URI has the following format:
+ * uri:<domainName>?name=value&...
+ */
+ private static Properties parseConfigURI(String configURI) {
+ Properties properties = new Properties();
+ // TODO:
+ return properties;
+ }
+
+ /**
+ * load the properties from external URL or a relative file
+ * properties:<url to properties file>
+ */
+ private static Properties loadProperties(String configURI) throws IOException {
+
+ String remaining = URI.create(configURI).getSchemeSpecificPart();
+ Properties properties = new Properties();
+ File file = new File(remaining);
+
+ InputStream inputStream = null;
+ if (file.exists()) {
+ inputStream = new FileInputStream(file);
+ } else {
+ URL url = null;
+ try {
+ url = new URL(remaining);
+ } catch (MalformedURLException e) {
+ inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(remaining);
+ if (inputStream == null) {
+ throw new IOException("File does not exist: " + remaining + ", could not be found on the classpath and is not a valid URL: " + e);
+ }
+ }
+ if (inputStream == null && url != null) {
+ inputStream = url.openStream();
}
- m2.put(m2k, properties.getProperty(key));
}
- return newInstance(attributes);
+ if (inputStream != null) {
+ properties.load(inputStream);
+ inputStream.close();
+ }
+
+ // append any system properties?
+ try {
+ Properties systemProperties = System.getProperties();
+ properties.putAll(systemProperties);
+ } catch (Exception e) {
+ // ignore security exception
+ }
+ return properties;
}
/**
@@ -523,4 +589,6 @@ public abstract class NodeFactory extends DefaultNodeConfigurationFactory {
public abstract NodeConfiguration loadConfiguration(InputStream xml, URL base);
public abstract <T> T getExtensionPointRegistry();
+
+ public abstract void init();
}