package org.infinispan.cli.connection.jmx.remoting;
import static org.infinispan.cli.util.Utils.nullIfEmpty;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.infinispan.cli.connection.jmx.AbstractJMXUrl;
public abstract class JMXRemotingUrl extends AbstractJMXUrl {
public JMXRemotingUrl(String connectionString) {
if (connectionString.length() == 0) {
hostname = "localhost";
port = getDefaultPort();
} else {
Matcher matcher = getUrlPattern().matcher(connectionString);
if (!matcher.matches()) {
throw new IllegalArgumentException(connectionString);
}
username = nullIfEmpty(matcher.group(4));
password = nullIfEmpty(matcher.group(5));
hostname = nullIfEmpty(matcher.group(6));
if (matcher.group(7) != null) {
port = Integer.parseInt(matcher.group(7));
} else {
port = getDefaultPort();
}
container = nullIfEmpty(matcher.group(8));
cache = nullIfEmpty(matcher.group(9));
}
}
private Pattern getUrlPattern() {
return Pattern.compile("^(?:(?![^:@]+:[^:@/]*@)(" + getProtocol() + "):)?(?://)?((?:(([^:@]*):?([^:@]*))?@)?(\\[[0-9A-Fa-f:]+\\]|[^:/?#]*)(?::(\\d*))?)(?:/([^/]*)(?:/(.*))?)?");
}
abstract String getProtocol();
abstract int getDefaultPort();
@Override
public String getJMXServiceURL() {
return "service:jmx:" + getProtocol() + "-jmx://" + hostname + ":" + port;
}
@Override
public String toString() {
return getProtocol() + "://" + (username == null ? "" : username + "@") + hostname + ":" + port;
}
}