package org.distributeme.core;
import org.configureme.ConfigurationManager;
import org.configureme.annotations.ConfigureMe;
import org.distributeme.core.conventions.SystemProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Configurable location object. This class is configured from distributeme.json.
*
* @author lrosenberg
* @version $Id: $Id
*/
@ConfigureMe(allfields=true, name="distributeme")
public final class RegistryLocation implements Location {
/**
* Logger.
*/
private static Logger log = LoggerFactory.getLogger(RegistryLocation.class);
/**
* Configured host.
*/
private String registryContainerHost;
/**
* Protocol, defaults to http.
*/
private String registryContainerProtocol = "http";
/**
* Context, defaults to distributeme.
*/
private String registryContainerContext = "distributeme";
/**
* Configured port.
*/
private int registryContainerPort;
/**
* Left side of the port range for the local rmi registry.
*/
private int rmiRegistryMinPort = 9250;
/**
* Right side of the port range for the local rmi registry.
*/
private int rmiRegistryMaxPort = 9299;
/**
* <p>Getter for the field <code>registryContainerPort</code>.</p>
*
* @return a int.
*/
public int getRegistryContainerPort() {
return registryContainerPort;
}
/**
* <p>Setter for the field <code>registryContainerPort</code>.</p>
*
* @param registryContainerPort a int.
*/
public void setRegistryContainerPort(int registryContainerPort) {
this.registryContainerPort = registryContainerPort;
}
/**
* <p>Getter for the field <code>registryContainerHost</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getRegistryContainerHost() {
return registryContainerHost;
}
/**
* <p>Setter for the field <code>registryContainerHost</code>.</p>
*
* @param registryContainerHost a {@link java.lang.String} object.
*/
public void setRegistryContainerHost(String registryContainerHost) {
this.registryContainerHost = registryContainerHost;
}
/**
* <p>Getter for the field <code>rmiRegistryMinPort</code>.</p>
*
* @return a int.
*/
public int getRmiRegistryMinPort() {
return rmiRegistryMinPort;
}
/**
* <p>Setter for the field <code>rmiRegistryMinPort</code>.</p>
*
* @param rmiRegistryMinPort a int.
*/
public void setRmiRegistryMinPort(int rmiRegistryMinPort) {
this.rmiRegistryMinPort = rmiRegistryMinPort;
}
/**
* <p>Getter for the field <code>rmiRegistryMaxPort</code>.</p>
*
* @return a int.
*/
public int getRmiRegistryMaxPort() {
return rmiRegistryMaxPort;
}
/**
* <p>Setter for the field <code>rmiRegistryMaxPort</code>.</p>
*
* @param rmiRegistryMaxPort a int.
*/
public void setRmiRegistryMaxPort(int rmiRegistryMaxPort) {
this.rmiRegistryMaxPort = rmiRegistryMaxPort;
}
/**
* <p>Getter for the field <code>registryContainerProtocol</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getRegistryContainerProtocol() {
return registryContainerProtocol;
}
/**
* <p>Setter for the field <code>registryContainerProtocol</code>.</p>
*
* @param registryContainerProtocol a {@link java.lang.String} object.
*/
public void setRegistryContainerProtocol(String registryContainerProtocol) {
this.registryContainerProtocol = registryContainerProtocol;
}
/**
* <p>Getter for the field <code>registryContainerContext</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getRegistryContainerContext() {
return registryContainerContext;
}
/**
* <p>Setter for the field <code>registryContainerContext</code>.</p>
*
* @param registryContainerContext a {@link java.lang.String} object.
*/
public void setRegistryContainerContext(String registryContainerContext) {
this.registryContainerContext = registryContainerContext;
}
/** {@inheritDoc} */
@Override public String toString(){
return "DistributeMeRegistry " + getRegistryContainerProtocol()+"://"+getRegistryContainerHost() + ":" +getRegistryContainerPort()+"/"+getRegistryContainerContext()+", local range: ["+rmiRegistryMinPort+" .. "+rmiRegistryMaxPort+"]";
}
/**
* Creates a new configured registry location.
*
* @return a {@link org.distributeme.core.RegistryLocation} object.
*/
public static RegistryLocation create(){
RegistryLocation location = new RegistryLocation();
if (location.configureFromSystemPropertiesAndReturnTrueIfConfigured()){
return location;
}
try {
ConfigurationManager.INSTANCE.configure(location);
} catch (IllegalArgumentException e) {
log.warn("Ignore this, if your instance is a registry server: "+e.getMessage());
}
return location;
}
private boolean configureFromSystemPropertiesAndReturnTrueIfConfigured(){
registryContainerHost = SystemProperties.CENTRAL_REGISTRY_HOST.get();
registryContainerPort = SystemProperties.CENTRAL_REGISTRY_PORT.getAsInt();
registryContainerProtocol = SystemProperties.CENTRAL_REGISTRY_PROTOCOL.get();
registryContainerContext = SystemProperties.CENTRAL_REGISTRY_CONTEXT.get();
rmiRegistryMinPort = SystemProperties.LOCAL_RMI_REGISTRY_MIN_PORT.getAsInt();
rmiRegistryMaxPort = SystemProperties.LOCAL_RMI_REGISTRY_MAX_PORT.getAsInt();
return registryContainerHost!=null && registryContainerHost.length()>0;
}
/**
* Private constructor.
*/
private RegistryLocation(){}
/**
* Returns the host.
*
* @return a {@link java.lang.String} object.
*/
public String getHost(){
return registryContainerHost;
}
/**
* Returns the port.
*
* @return a int.
*/
public int getPort() {
return registryContainerPort;
}
/**
* <p>getProtocol.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getProtocol(){
return registryContainerProtocol;
}
/**
* <p>getContext.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getContext(){
return registryContainerContext;
}
}