summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/host-corba/src/main
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-08 17:05:57 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-08 17:05:57 +0000
commit85f5a5467d5b5f1f44da7e7c4ae296ef8ffe2e5e (patch)
tree4d41da84603a804a0ae054788f8dd3f92f930521 /java/sca/modules/host-corba/src/main
parentf49952065d71aa654749f214ee4df7740bed1cbc (diff)
Refactor the CorbanameURL and fix the corbaname parsing issue on Linux
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@674882 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/host-corba/src/main')
-rw-r--r--java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java92
-rw-r--r--java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java66
-rw-r--r--java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java186
3 files changed, 193 insertions, 151 deletions
diff --git a/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java b/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
index 965ab2beec..c12980523b 100644
--- a/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
+++ b/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
@@ -19,48 +19,31 @@
package org.apache.tuscany.sca.host.corba;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
/**
* Various utilities for host-corba
*/
public class CorbaHostUtils {
- public static String DEFAULT_NAME_SERVICE = "NameService";
- public static String DEFAULT_HOST = "localhost";
- public static int DEFAULT_PORT = 900;
-
/**
* Tests if given URI is valid corbaname string
* @param uri
* @return
*/
public static boolean isValidCorbanameURI(String uri) {
- return uri != null && uri.startsWith("corbaname") && uri.contains("#") && uri.indexOf('#') < uri.length() - 1;
+ return uri != null && uri.startsWith("corbaname:") && uri.contains("#") && uri.indexOf('#') < uri.length() - 1;
}
/**
* Creates corbaname URI basing on given parameters
- *
- * @param name
* @param host
* @param port
+ * @param name
+ *
* @return
*/
- public static String createCorbanameURI(String name, String host, int port) {
- String portStr = null;
- if (port > 0) {
- portStr = Integer.toString(port);
- } else {
- portStr = "";
- }
- if (host == null) {
- host = "";
- }
- return "corbaname::" + host + ":" + portStr + "#" + name;
+ public static String createCorbanameURI(String host, int port, String name) {
+ return new CorbanameURL(host, port, name).toString();
}
/**
@@ -69,69 +52,8 @@ public class CorbaHostUtils {
* @param uri
* @return
*/
- public static CorbanameDetails getServiceDetails(String uri) {
- CorbanameDetails details = new CorbanameDetails();
- StringTokenizer hashTokenizer = new StringTokenizer(uri, "#");
- if (hashTokenizer.countTokens() == 2) {
- String serviceLocation = hashTokenizer.nextToken();
- String servicePath = hashTokenizer.nextToken();
- StringTokenizer pathDisc = new StringTokenizer(servicePath, "/");
- List<String> namePath = new ArrayList<String>();
- while (pathDisc.hasMoreTokens()) {
- namePath.add(pathDisc.nextToken());
- }
- details.setNamePath(namePath);
- StringTokenizer slashTokenizer = new StringTokenizer(serviceLocation, "/");
- String serviceHost = slashTokenizer.nextToken();
- String nameService = null;
- if (slashTokenizer.hasMoreTokens()) {
- nameService = slashTokenizer.nextToken();
- } else {
- nameService = DEFAULT_NAME_SERVICE;
- }
- details.setNameService(nameService);
- StringTokenizer colonTokenizer = new StringTokenizer(serviceHost, ":", true);
- if (colonTokenizer.countTokens() > 0 && colonTokenizer.nextToken().equals("corbaname")) {
- String host = null;
- int port = 0;
- try {
- colonTokenizer.nextToken();
- String methodPart = colonTokenizer.nextToken();
- if (!methodPart.equals(":")) {
- colonTokenizer.nextToken();
- }
- host = colonTokenizer.nextToken();
- if (host.equals(":")) {
- // no host provided, no need to get another ":"
- host = DEFAULT_HOST;
- } else {
- // host provided, so another ":" should be read
- colonTokenizer.nextToken();
- }
- try {
- port = Integer.parseInt(colonTokenizer.nextToken());
- } catch (Exception e) {
- port = DEFAULT_PORT;
- }
- } catch (NoSuchElementException e) {
- } finally {
- if (host == null) {
- // parsing failed - user didn't provide host
- host = DEFAULT_HOST;
- }
- if (port == 0) {
- // parsing failed - user didn't provide port
- port = DEFAULT_PORT;
- }
- }
- details.setHost(host);
- details.setPort(port);
- } else {
- throw new IllegalArgumentException("Given corbaname URI does not begin with 'corbaname'");
- }
- } else {
- throw new IllegalArgumentException("Given corbaname is missing hash separator");
- }
+ public static CorbanameURL getServiceDetails(String uri) {
+ CorbanameURL details = new CorbanameURL(uri);
return details;
}
diff --git a/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java b/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java
deleted file mode 100644
index ba95c31e5f..0000000000
--- a/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tuscany.sca.host.corba;
-
-import java.util.List;
-
-/**
- * Holds corbaname URI details
- */
-public class CorbanameDetails {
-
- private String host;
- private int port;
- private String nameService;
- private List<String> namePath;
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public String getNameService() {
- return nameService;
- }
-
- public void setNameService(String nameService) {
- this.nameService = nameService;
- }
-
- public List<String> getNamePath() {
- return namePath;
- }
-
- public void setNamePath(List<String> namePath) {
- this.namePath = namePath;
- }
-
-}
diff --git a/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java b/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
new file mode 100644
index 0000000000..ddfc51ca98
--- /dev/null
+++ b/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.corba;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Holds corbaname URI details
+ */
+public class CorbanameURL {
+ public static String DEFAULT_PROTOCOL = "iiop";
+ public static String DEFAULT_VERSION = "";
+ public static String DEFAULT_NAME_SERVICE = "NameService";
+ public static String DEFAULT_HOST = "localhost";
+ public static int DEFAULT_PORT = 2809;
+
+ private String protocol = "";
+ private String version = "";
+ private String host;
+ private int port;
+ private String nameService;
+ private List<String> namePath;
+
+ public CorbanameURL(String host, int port, String namePath, String nameService) {
+ super();
+ this.host = host == null ? DEFAULT_HOST : host;
+ this.port = port <= 0 ? DEFAULT_PORT : port;
+ this.namePath = parseName(namePath);
+ this.nameService = nameService == null ? DEFAULT_NAME_SERVICE : nameService;
+ }
+
+ public CorbanameURL(String host, int port, String namePath) {
+ this(host, port, namePath, DEFAULT_NAME_SERVICE);
+ }
+
+ public CorbanameURL(String url) {
+ if (url == null || (!url.startsWith("corbaname"))) {
+ throw new IllegalArgumentException("Malformed corbaname URL: " + url);
+ }
+ try {
+ url = URLDecoder.decode(url, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new IllegalArgumentException(e);
+ }
+ String[] parts = url.split("#");
+ if (parts.length == 2) {
+ String serviceLocation = parts[0];
+ String servicePath = parts[1];
+ namePath = parseName(servicePath);
+
+ parts = serviceLocation.split("/");
+ if (parts.length == 2) {
+ nameService = parts[1];
+ } else {
+ nameService = DEFAULT_NAME_SERVICE;
+ }
+
+ parts = parts[0].split(":");
+
+ if (parts.length >= 2) {
+ protocol = parts[1];
+ }
+ if (parts.length >= 3) {
+ version = parts[2];
+ String[] strs = version.split("@");
+ if (strs.length == 2) {
+ version = strs[0];
+ host = strs[1];
+ } else {
+ version = "";
+ host = strs[0];
+ }
+ }
+ if (host == null || "".equals(host)) {
+ host = DEFAULT_HOST;
+ }
+ if (parts.length >= 4 && !"".equals(parts[3])) {
+ port = Integer.parseInt(parts[3]);
+ } else {
+ port = DEFAULT_PORT;
+ }
+ } else {
+ throw new IllegalArgumentException("Malformed corbaname URL: " + url);
+ }
+ }
+
+ private static List<String> parseName(String name) {
+ try {
+ name = URLDecoder.decode(name, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new IllegalArgumentException(e);
+ }
+ String[] names = name.split("/");
+ return Arrays.asList(names);
+ }
+
+ public String getProtocol() {
+ return protocol;
+ }
+
+ public void setProtocol(String protocol) {
+ this.protocol = protocol;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+ public String getNameService() {
+ return nameService;
+ }
+
+ public void setNameService(String nameService) {
+ this.nameService = nameService;
+ }
+
+ public List<String> getNamePath() {
+ return namePath;
+ }
+
+ public void setNamePath(List<String> namePath) {
+ this.namePath = namePath;
+ }
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("corbaname:");
+ buf.append(protocol).append(":");
+ if (version != null && !"".equals(version)) {
+ buf.append(version).append("@");
+ }
+ buf.append(host).append(":").append(port);
+ buf.append("/").append(nameService);
+ buf.append("#");
+ if (namePath != null) {
+ for (int i = 0; i < namePath.size(); i++) {
+ buf.append(namePath.get(i));
+ if (i < namePath.size() - 1) {
+ buf.append("/");
+ }
+ }
+ }
+ return buf.toString();
+ }
+
+}