package edu.isi.karma.kr2rml;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.isi.karma.webserver.ServletContextParameterMap;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
//TODO create a registry for this
public class KR2RMLConfiguration {
private static final Logger logger = LoggerFactory.getLogger(KR2RMLConfiguration.class);
private static Properties properties;
private static final String newLine = System.getProperty("line.separator");
private static String defaultKR2RMLProperties = "template.terms.no.minimum.for.blank.nodes=false"+ newLine;
// WK-226 Adds the ability to generate blank nodes with out satisfying any column terms
private Boolean noMinimumNumberOfSatisifiedTerms = null;
private ServletContextParameterMap contextParameters;
public KR2RMLConfiguration(ServletContextParameterMap contextParameters)
{
this.contextParameters = contextParameters;
}
public void load(ServletContextParameterMap contextParameters) {
try {
properties = loadParams(contextParameters);
if (properties.getProperty("template.terms.no.minimum.for.blank.nodes") != null)
setNoMinimumNumberOfSatisifiedTerms(Boolean.parseBoolean(properties
.getProperty("template.terms.no.minimum.for.blank.nodes")));
} catch (IOException e) {
logger.error("Error occured while reading config file ...");
System.exit(1);
}
}
private Properties loadParams(ServletContextParameterMap contextParameters) throws IOException {
Properties prop = new Properties();
File file = new File(
contextParameters
.getParameterValue(ContextParameter.USER_CONFIG_DIRECTORY)
+ "/kr2ml.properties");
logger.info("Load kr2rml.properties: " + file.getAbsolutePath() + ":"
+ file.exists());
if (!file.exists()) {
file.createNewFile();
OutputStreamWriter fw = new OutputStreamWriter(
new FileOutputStream(file), "UTF-8");
BufferedWriter bw = new BufferedWriter(fw);
logger.info(defaultKR2RMLProperties);
bw.write(defaultKR2RMLProperties);
bw.close();
logger.info("Wrote default properties to kr2rml.properties");
}
FileInputStream fis = new FileInputStream(file);
try {
prop.load(fis);
logger.info("Done loading kr2rml.properties");
} finally {
fis.close();
}
return prop;
}
public Boolean getNoMinimumNumberOfSatisifiedTerms() {
if(noMinimumNumberOfSatisifiedTerms == null)
{
load(contextParameters);
}
return noMinimumNumberOfSatisifiedTerms;
}
public void setNoMinimumNumberOfSatisifiedTerms(
Boolean noMinimumNumberOfSatisifiedTerms) {
this.noMinimumNumberOfSatisifiedTerms = noMinimumNumberOfSatisifiedTerms;
}
}