package com.netifera.platform.net.services;
import java.util.Locale;
import com.netifera.platform.util.locators.ISocketLocator;
import com.netifera.platform.util.locators.SSLSocketLocator;
public abstract class NetworkService implements INetworkService {
private static final long serialVersionUID = 6240506251424087662L;
final private ISocketLocator locator;
public NetworkService(final ISocketLocator locator) {
this.locator = locator;
}
public ISocketLocator getLocator() {
return locator;
}
public Boolean isSSL() {
return getLocator() instanceof SSLSocketLocator;
}
@Override
public String toString() {
return getURI();
}
public abstract int getDefaultPort();
/*
* following code related to URIs
*
* See: RFC 3986
*
*/
public String getURIScheme() {
return getClass().getSimpleName().toLowerCase(Locale.ENGLISH);
}
public String getURIHost() {
return getLocator().getAddress().toStringLiteral();
}
public String getURIHost(String hostname) {
if (hostname != null && hostname.length() > 0) {
return hostname;
}
return getLocator().getAddress().toStringLiteral();
}
public String getURIHostPort() {
return getURIHostPort(getURIHost());
}
public String getURIHostPort(String hostname) {
StringBuilder sb = new StringBuilder(256);
sb.append(getURIHost(hostname));
int port = getLocator().getPort();
if (port != getDefaultPort()) {
sb.append(':');
sb.append(Integer.valueOf(port));
}
return sb.toString();
}
public String getURIAuthority() {
return getURIAuthority(getURIHost());
}
public String getURIAuthority(String hostname) {
return getURIAuthorityPrefix() + getURIHostPort(hostname);
}
/* to overwrite */
protected String getURIAuthorityPrefix() {
// TODO check IAuthenticable ?
return "";
}
public String getURI() {
return getURI(getURIHost());
}
public String getURI(String hostname) {
StringBuilder sb = new StringBuilder(128);
sb.append(getURIScheme());
sb.append("://");
sb.append(getURIAuthority(hostname));
return sb.append('/').toString();
}
}