package es.upm.fi.dia.oeg.map4rdf.server.conf.multiple;
import org.apache.log4j.Logger;
import es.upm.fi.dia.oeg.map4rdf.server.conf.AddInfoConfigServer;
import es.upm.fi.dia.oeg.map4rdf.server.conf.Configuration;
import es.upm.fi.dia.oeg.map4rdf.server.conf.Constants;
import es.upm.fi.dia.oeg.map4rdf.server.conf.FacetedBrowserConfiguration;
import es.upm.fi.dia.oeg.map4rdf.server.conf.GetServletContext;
import es.upm.fi.dia.oeg.map4rdf.server.conf.MapsConfigurationServer;
import es.upm.fi.dia.oeg.map4rdf.server.dao.Map4rdfDao;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.AemetDaoImpl;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.DbPediaDaoImpl;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.GeoLinkedDataDaoImpl;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.GeoSparqlDaoImpl;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.VCardDaoImpl;
import es.upm.fi.dia.oeg.map4rdf.server.dao.impl.ViajeroImpl;
import es.upm.fi.dia.oeg.map4rdf.share.conf.ParameterNames;
public class ConfigurationContainer {
private AddInfoConfigServer addInfoConfigServer;
private Configuration configuration;
private Map4rdfDao map4rdfDao;
private FacetedBrowserConfiguration facetedBrowserConfiguration;
private MapsConfigurationServer mapsConfigurationServer;
private static Logger logger = Logger.getLogger(ConfigurationContainer.class);
public ConfigurationContainer(GetServletContext getServletContext,String configFile){
try {
this.configuration=new Configuration(getServletContext.getServletContext().getResourceAsStream(Constants.CONFIGURATIONS_FOLDER+configFile));
String addInfo = configuration.getConfigurationParamValue(ParameterNames.ADDITIONAL_INFO);
String endpointURL = configuration.getConfigurationParamValue(ParameterNames.ENDPOINT_URL);
String sphericalMercator = configuration.getConfigurationParamValue(ParameterNames.SPHERICAL_MERCATOR);
String defaultProjection = configuration.getConfigurationParamValue(ParameterNames.DEFAULT_PROJECTION);
String modelString = configuration.getConfigurationParamValue(ParameterNames.GEOMETRY_MODEL);
String facetsFile = configuration.getConfigurationParamValue(ParameterNames.FACETS_FILE);
String geoSparqlEndpointURL = configuration.getConfigurationParamValue(ParameterNames.ENDPOINT_URL_GEOSPARQL);
Constants.GeometryModel model = Constants.GeometryModel.valueOf(modelString);
if(addInfo!=null && !addInfo.isEmpty()){
this.addInfoConfigServer=new AddInfoConfigServer(getServletContext, addInfo);
}else{
this.addInfoConfigServer=new AddInfoConfigServer();
}
this.map4rdfDao=getMap4rdfDao(model, endpointURL,geoSparqlEndpointURL, defaultProjection);
facetedBrowserConfiguration = new FacetedBrowserConfiguration(getServletContext.getServletContext().getResourceAsStream(Constants.FACETS_FOLDER+facetsFile));
mapsConfigurationServer = new MapsConfigurationServer(getServletContext, sphericalMercator, configuration,Constants.CONFIGURATIONS_FOLDER+configFile);
} catch (Exception e) {
logger.error("Can't create Configuration of file: "+configFile,e);
}
}
public String getConfigurationParamValue(String parameter){
return configuration.getConfigurationParamValue(parameter);
}
public boolean containsConfigurationParam(String param) {
return configuration.containsConfigurationParam(param);
}
public AddInfoConfigServer getAddInfoConfigServer() {
return addInfoConfigServer;
}
public Map4rdfDao getMap4rdfDao() {
return map4rdfDao;
}
public FacetedBrowserConfiguration getFacetedBrowserConfiguration() {
return facetedBrowserConfiguration;
}
public MapsConfigurationServer getMapsConfigurationServer() {
return mapsConfigurationServer;
}
private Map4rdfDao getMap4rdfDao(Constants.GeometryModel model,String endpointUri,String geosparqlEndpointUri,String defaultProjection){
switch (model) {
case OEG:
return new GeoLinkedDataDaoImpl(endpointUri,defaultProjection);
case DBPEDIA:
return new DbPediaDaoImpl(endpointUri,defaultProjection);
case VCARD:
return new VCardDaoImpl(endpointUri,defaultProjection);
case GEOSPARQL_STRABON:
return new GeoSparqlDaoImpl(endpointUri,geosparqlEndpointUri,defaultProjection,GeoSparqlDaoImpl.EndpointType.STRABON);
case GEOSPARQL_VIRTUOSO:
return new GeoSparqlDaoImpl(endpointUri,geosparqlEndpointUri,defaultProjection,GeoSparqlDaoImpl.EndpointType.VIRTUOSO);
case AEMET:
return new AemetDaoImpl(endpointUri,defaultProjection);
case VIAJERO:
return new ViajeroImpl(endpointUri,defaultProjection);
default:
// make compiler happy
return null;
}
}
}