![JAR search and dependency download from the Maven repository](/logo.png)
org.apache.tuscany.sca.runtime.DomainRegistryURI Maven / Gradle / Ivy
The newest version!
/*
* 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.runtime;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Utility to parse the config uri string.
*
* tuscany:[domainName]?listen=[port|ip:port]]&password=abc&multicast=[off|port|ip:port]&remotes=ip:port,ip:port,...
* listen - defines the local bind address and port, it defaults to all network interfaces on port 14820 and if that port in use it will try incrementing by one till a free port is found.
* password - is the password other nodes must use to connect to this domain. The default is 'tuscany'.
* multicast - defines if multicast discovery is used and if so what multicast ip group and port is used.
* The default is multicast is off if remotes= is specified (only for now due to a Hazelcast limitation that is planned to be fixed),
* otherwise if remotes= is not specified then multicast defaults to 224.5.12.10:51482
* remotes - a list of ipAddress:port for remote nodes
*
* @tuscany.spi.extension.asclient
*
*/
public class DomainRegistryURI {
private String domainName = "default";
private String bindAddress = null; // null means all network adapters
private int listenPort = 14820;
private String password = "tuscany";
private boolean multicastDisabled = false;
private String multicastAddress = "224.5.12.10";
private int multicastPort = 51482;
private List remotes = new ArrayList();
private String uri;
public DomainRegistryURI(String uri) {
this.uri = uri;
parseURI(uri);
}
private void parseURI(String uri) {
if (uri.startsWith("tuscanyclient:")) {
uri = uri.replace("tuscanyclient:", "tuscany:");
}
if (!uri.startsWith("tuscany:")) {
throw new IllegalArgumentException("Config URI must start with 'tuscany:'");
}
// make it a URI so java.net.URI can be used to parse it
int i = uri.indexOf(":");
if (uri.charAt("tuscany:".length()) != '/') {
uri = uri.replaceFirst(":", ":/");
}
if (uri.charAt("tuscany:".length()+1) != '/') {
uri = uri.replaceFirst(":/", "://");
}
URI configURI = URI.create(uri);
this.domainName = configURI.getHost();
String query = configURI.getQuery();
if (query != null && query.length() > 0) {
String[] params = query.split("&");
Map paramMap = new HashMap();
for (String param : params) {
paramMap.put(param.split("=")[0], param.split("=")[1]);
}
for (String name : paramMap.keySet()) {
String value = paramMap.get(name);
if ("listen".equals(name)) {
if (value.indexOf(":") == -1) {
this.listenPort = Integer.parseInt(value);
} else {
String[] addr = value.split(":");
this.bindAddress = addr[0];
this.listenPort = Integer.parseInt(addr[1]);
}
} else if ("multicast".equals(name)) {
if ("off".equalsIgnoreCase(value)) {
this.multicastDisabled = true;
} else {
if (value.indexOf(":") == -1) {
this.multicastAddress = value;
} else {
String[] addr = value.split(":");
this.multicastAddress = addr[0];
this.multicastPort = Integer.parseInt(addr[1]);
}
}
} else if ("password".equals(name)) {
this.password = value;
} else if ("remotes".equals(name)) {
String[] ips = value.split(",");
for (String ip : ips) {
if (ip.indexOf(":") == -1) {
remotes.add(ip + ":14820");
} else {
remotes.add(ip);
}
}
if (paramMap.containsKey("multicast")) {
// throw new IllegalArgumentException("Cannot have multicast and remotes (for now)");
} else {
this.multicastDisabled = true;
}
}
}
}
}
public String getDomainName() {
return domainName;
}
public String getBindAddress() {
return bindAddress;
}
public int getListenPort() {
return listenPort;
}
public String getPassword() {
return password;
}
public boolean isMulticastDisabled() {
return multicastDisabled;
}
public String getMulticastAddress() {
return multicastAddress;
}
public int getMulticastPort() {
return multicastPort;
}
public List getRemotes() {
return remotes;
}
public String toString() {
return uri;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy