package eu.europeana.cloud.client.uis.rest.web;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.europeana.cloud.service.coordination.ZookeeperService;
import eu.europeana.cloud.service.coordination.discovery.ZookeeperServiceDiscovery;
import eu.europeana.cloud.service.coordination.provider.ServiceProvider;
import eu.europeana.cloud.service.coordination.provider.ServiceProviderImpl;
/**
* URL provider for UIS client
*
* Returns a dynamically provided url.
*/
public class DynamicUrlProvider implements UrlProvider {
private ServiceProvider provider;
private static final Logger LOGGER = LoggerFactory.getLogger(DynamicUrlProvider.class);
private static final int CONNECTION_TIMEOUT = 3000;
private static final int SESSION_TIMEOUT = 3000;
private static final String UIS_SERVICE_KEY = "UIS";
/**
* Creates a new instance of this class,
* since no URL is provided properties will be read from the properties file.
*
* @throws IOException
*/
public DynamicUrlProvider() throws IOException {
LOGGER.info("DynamicUrlProvider: Starting UrlProvider, no URL provided");
String zkAddress = null;
String preferredDatacenter = null;
String serviceDiscoveryPath = null;
Properties props = new Properties();
InputStream is = null;
try {
is = new FileInputStream(new File("src/main/resources/client.properties"));
props.load(is);
zkAddress = props.getProperty("coordination.service.URL");
preferredDatacenter = props.getProperty("coordination.service.PREFERRED_DATACENTER");
serviceDiscoveryPath = props.getProperty("coordination.service.SERVICE_DISCOVERY_PATH");
} catch (IOException e) {
LOGGER.error(e.getMessage());
} finally {
if (is != null) {
is.close();
}
}
ZookeeperService zS = new ZookeeperService(zkAddress, CONNECTION_TIMEOUT, SESSION_TIMEOUT, serviceDiscoveryPath);
ZookeeperServiceDiscovery serviceDiscovery = new ZookeeperServiceDiscovery(zS, "/discovery", UIS_SERVICE_KEY);
provider = new ServiceProviderImpl(serviceDiscovery, preferredDatacenter);
LOGGER.info("DynamicUrlProvider: UrlProvider started successfully");
}
public DynamicUrlProvider(final String zkAddress, final String serviceDiscoveryPath, final String preferredDatacenter) {
LOGGER.info("DynamicUrlProvider: Starting UrlProvider {}:{}:{}", zkAddress, serviceDiscoveryPath, preferredDatacenter);
ZookeeperService zS = new ZookeeperService(zkAddress, CONNECTION_TIMEOUT, SESSION_TIMEOUT, serviceDiscoveryPath);
ZookeeperServiceDiscovery serviceDiscovery = new ZookeeperServiceDiscovery(zS, serviceDiscoveryPath, UIS_SERVICE_KEY);
provider = new ServiceProviderImpl(serviceDiscovery, preferredDatacenter);
LOGGER.info("DynamicUrlProvider: UrlProvider started successfully.");
}
public DynamicUrlProvider(final ServiceProvider provider) {
LOGGER.info("DynamicUrlProvider: Starting UrlProvider...");
this.provider = provider;
LOGGER.info("DynamicUrlProvider: UrlProvider started successfully.");
}
/**
* @return Returns a url
*/
@Override
public String getBaseUrl() {
final String address = provider.getService().getListenAddress();
LOGGER.info("DynamicUrlProvider: using url: {}", address);
return address;
}
}