package org.wiztools.restclient;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author schandran
*/
public final class ProxyConfig {
private static final Logger LOG = Logger.getLogger(ProxyConfig.class.getName());
// Global
public static final int DEFAULT_PORT = 8080;
private static final String PROP_PREFIX = "proxy.options.";
// Singleton
private static ProxyConfig _proxy;
public static ProxyConfig getInstance(){
if(_proxy == null){
_proxy = new ProxyConfig();
try {
_proxy.init();
}
catch(Exception ex) {
LOG.log(Level.INFO, "Cannot load Proxy options from properties.", ex);
}
}
return _proxy;
}
private void init() {
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
_proxy.setEnabled(Boolean.valueOf(options.getProperty(PROP_PREFIX + "is_enabled")));
_proxy.setHost(options.getProperty(PROP_PREFIX + "host"));
{ // Port:
final String portStr = options.getProperty(PROP_PREFIX + "port");
if(portStr != null) {
_proxy.setPort(Integer.parseInt(portStr));
}
}
_proxy.setAuthEnabled(Boolean.valueOf(options.getProperty(PROP_PREFIX + "is_auth_enabled")));
_proxy.setUsername(options.getProperty(PROP_PREFIX + "username"));
{ // Password:
final String pwdStr = options.getProperty(PROP_PREFIX + "password");
if(pwdStr != null) {
_proxy.setPassword(pwdStr.toCharArray());
}
}
}
public void write() {
IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
options.setProperty(PROP_PREFIX + "is_enabled", String.valueOf(_proxy.isEnabled()));
options.setProperty(PROP_PREFIX + "host", _proxy.getHost());
options.setProperty(PROP_PREFIX + "port", String.valueOf(_proxy.getPort()));
options.setProperty(PROP_PREFIX + "is_auth_enabled", String.valueOf(_proxy.isAuthEnabled()));
options.setProperty(PROP_PREFIX + "username", _proxy.getUsername());
String pwd = _proxy.getPassword()==null? "": new String(_proxy.getPassword());
options.setProperty(PROP_PREFIX + "password", pwd);
}
private ProxyConfig(){}
// Lock to ensure consistency
private final Lock _lck = new ReentrantLock();
public void acquire(){
_lck.lock();
}
public void release(){
_lck.unlock();
}
// Data
private boolean enabled = false;
private String host;
private int port = DEFAULT_PORT;
private boolean authEnabled = false;
private String username;
private char[] password;
public boolean isAuthEnabled() {
return authEnabled;
}
public void setAuthEnabled(boolean authEnabled) {
this.authEnabled = authEnabled;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public char[] getPassword() {
return password;
}
public void setPassword(char[] password) {
this.password = password;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}