package es.upm.fi.dia.oeg.map4rdf.server.conf;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.log4j.Logger;
import es.upm.fi.dia.oeg.map4rdf.share.conf.ParametersNamesAddInfo;
import es.upm.fi.dia.oeg.map4rdf.share.conf.util.AdditionalInfo;
import es.upm.fi.dia.oeg.map4rdf.share.conf.util.QueryParameterResult;
public class AddInfoConfigServer{
public List<AdditionalInfo> additionalsInfo;
private Logger logger = Logger.getLogger(AddInfoConfigServer.class);
public AddInfoConfigServer(){
additionalsInfo=new ArrayList<AdditionalInfo>();
}
public AddInfoConfigServer(GetServletContext servletContext, String addInfo) {
additionalsInfo=new ArrayList<AdditionalInfo>();
Properties properties = new Properties();
String[] splitInfo = addInfo.split(";");
for (int i = 0; i < splitInfo.length; i++) {
try {
String file = Constants.ADDITIONAL_INFO_CONFIG_FOLDER
+ splitInfo[i];
properties.load(servletContext.getServletContext()
.getResourceAsStream(file));
boolean correctInfo = true;
AdditionalInfo info = AdditionalInfo.newInstance();
if (properties.getProperty(ParametersNamesAddInfo.ENDPOINT_URL) != null
&& !properties.getProperty(
ParametersNamesAddInfo.ENDPOINT_URL).isEmpty()) {
info.setEndpoint(properties
.getProperty(ParametersNamesAddInfo.ENDPOINT_URL));
} else {
logger.error("Empty "
+ ParametersNamesAddInfo.ENDPOINT_URL + " in "
+ file + " file.");
correctInfo = false;
}
if (properties.getProperty(ParametersNamesAddInfo.QUERY) != null
&& !properties
.getProperty(ParametersNamesAddInfo.QUERY)
.isEmpty()) {
info.setQuery(properties
.getProperty(ParametersNamesAddInfo.QUERY));
} else {
logger.error("Empty " + ParametersNamesAddInfo.QUERY
+ " in " + file + " file.");
correctInfo = false;
}
if (properties
.getProperty(ParametersNamesAddInfo.PARAMETERS_AND_LABELS) != null
&& !properties.getProperty(ParametersNamesAddInfo.PARAMETERS_AND_LABELS).isEmpty()) {
String[] splitParameters = properties.getProperty(
ParametersNamesAddInfo.PARAMETERS_AND_LABELS).split("#");
if(splitParameters.length<1){
logger.error("Not parameters in "+ file);
correctInfo=false;
}
for (int j = 0; j < splitParameters.length; j++) {
String[] parameter = splitParameters[j].split(":");
QueryParameterResult result=new QueryParameterResult("");
if (splitParameters[j].split(":").length == 2) {
result = new QueryParameterResult(parameter[0]);
String[] splitLabels=parameter[1].split(";");
if(splitLabels.length<1){
logger.error("Not labels for parameter "+parameter[0]+" in "+file);
correctInfo=false;
}
for(int k=0;k<splitLabels.length;k++){
String[] complexLabel=splitLabels[k].split("@");
if(complexLabel.length!=2){
logger.error("Malformed label "+splitLabels[k]+" of parameter "
+ parameter[0] +" in "+ file);
correctInfo=false;
}else{
result.addLabel(complexLabel[1], complexLabel[0]);
}
}
info.addQueryResult(result);
} else {
logger.error("Malformed parameter: "
+ splitParameters[j] + " in " + file);
correctInfo = false;
}
}
} else {
logger.error("Empty "
+ ParametersNamesAddInfo.PARAMETERS_AND_LABELS
+ " in " + file + " file.");
correctInfo = false;
}
if (properties
.getProperty(ParametersNamesAddInfo.INPUT_PARAMETERS) != null
&& !properties.getProperty(ParametersNamesAddInfo.INPUT_PARAMETERS).isEmpty()) {
info.setInputParameters(properties
.getProperty(ParametersNamesAddInfo.INPUT_PARAMETERS));
}else{
logger.error("Empty parameter "+ParametersNamesAddInfo.INPUT_PARAMETERS+" in "
+ file + " file." );
correctInfo=false;
}
if (properties
.getProperty(ParametersNamesAddInfo.HAS_IMAGES_LIMIT) != null
&& !properties.getProperty(ParametersNamesAddInfo.HAS_IMAGES_LIMIT).isEmpty()){
boolean hasImagesLimit=Boolean.parseBoolean(properties.getProperty(ParametersNamesAddInfo.HAS_IMAGES_LIMIT));
boolean isCorrectImagesLimit=true;
if(hasImagesLimit){
if(properties
.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT) != null
&& !properties.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT).isEmpty()){
String images_limit=properties.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT);
String[] splitImages_limit=images_limit.split(";");
if(splitImages_limit.length==2 && !splitImages_limit[0].isEmpty() && !splitImages_limit[1].isEmpty()){
try{
info.setInferiorLimit(Double.parseDouble(splitImages_limit[0]));
info.setSuperiorLimit(Double.parseDouble(splitImages_limit[1]));
}catch (NumberFormatException e){
logger.warn("Error to parse parameter "+ParametersNamesAddInfo.IMAGES_LIMIT+" in "+file+" file.");
isCorrectImagesLimit=false;
}
}else{
logger.warn("Malformed parameter "+ParametersNamesAddInfo.IMAGES_LIMIT+" in "
+ file + " file." );
isCorrectImagesLimit=false;
}
}else{
logger.warn("Empty parameter "+ParametersNamesAddInfo.IMAGES_LIMIT+" in "
+ file + " file." );
isCorrectImagesLimit=false;
}
if(properties
.getProperty(ParametersNamesAddInfo.IMAGES) != null
&& !properties.getProperty(ParametersNamesAddInfo.IMAGES).isEmpty()){
String[] splitImages=properties.getProperty(ParametersNamesAddInfo.IMAGES).split(";");
if(splitImages.length==3 && !splitImages[0].isEmpty() && !splitImages[1].isEmpty() && !splitImages[2].isEmpty()){
info.setImages(splitImages);
}else{
logger.warn("Malformed parameter "+ParametersNamesAddInfo.IMAGES+" in "
+ file + " file." );
isCorrectImagesLimit=false;
}
}else{
logger.warn("Empty parameter "+ParametersNamesAddInfo.IMAGES+" in "
+ file + " file." );
isCorrectImagesLimit=false;
}
if(properties
.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT_PARAMETER) != null
&& !properties.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT_PARAMETER).isEmpty()){
info.setImage_parameter(properties
.getProperty(ParametersNamesAddInfo.IMAGES_LIMIT_PARAMETER));
}else{
logger.warn("Empty parameter "+ParametersNamesAddInfo.IMAGES_LIMIT_PARAMETER+" in "
+ file + " file." );
isCorrectImagesLimit=false;
}
}
info.setHas_image_limit(isCorrectImagesLimit);
}
if (correctInfo) {
additionalsInfo.add(info);
} else {
logger.error("Check " + file + " properties file.");
}
} catch (IOException e) {
logger.error("Can't obtain the additional info file:"
+ Constants.ADDITIONAL_INFO_CONFIG_FOLDER
+ splitInfo[i],e);
}
}
}
public List<AdditionalInfo> getAdditionalsInfo() {
return additionalsInfo;
}
}