package edu.isi.karma.web.services.publish.es;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.ServletContext;
import javax.ws.rs.core.MultivaluedMap;
import org.apache.commons.io.IOUtils;
import edu.isi.karma.rdf.GenericRDFGenerator.InputType;
public class R2RMLConfig {
private InputStream input;
private InputType contentType;
private String encoding;
private int maxNumLines;
private String columnDelimiter;
private String textQualifier;
private int dataStartIndex;
private int headerStartIndex;
private int worksheetIndex;
private URL r2rmlUrl;
private URL contextUrl;
private String contextRoot;
public static R2RMLConfig parse(ServletContext context, MultivaluedMap<String, String> formParams) throws MalformedURLException, IOException {
R2RMLConfig config = new R2RMLConfig();
if (formParams != null && formParams.containsKey(FormParameters.DATA_URL)
&& formParams.getFirst(FormParameters.DATA_URL).trim() != "")
config.input = (new URL(formParams.getFirst(FormParameters.DATA_URL)).openStream());
else if(formParams != null && formParams.containsKey(FormParameters.RAW_DATA)
&& formParams.getFirst(FormParameters.RAW_DATA).trim() != "")
config.input =(IOUtils.toInputStream(formParams.getFirst(FormParameters.RAW_DATA)));
if(formParams != null && formParams.containsKey(FormParameters.R2RML_URL))
config.r2rmlUrl = (new URL(formParams.getFirst(FormParameters.R2RML_URL)));
else
config.r2rmlUrl = (new URL(context.getInitParameter(FormParameters.R2RML_URL)));
if(formParams != null && formParams.containsKey(FormParameters.CONTEXT_URL))
config.contextUrl = (new URL(formParams.getFirst(FormParameters.CONTEXT_URL)));
else
config.contextUrl = (new URL(context.getInitParameter(FormParameters.CONTEXT_URL)));
String dataType = InputType.JSON.toString();
if(formParams != null && formParams.containsKey(FormParameters.CONTENT_TYPE))
dataType = formParams.getFirst(FormParameters.CONTENT_TYPE);
config.contentType = (InputType.valueOf(dataType));
if (formParams != null && formParams.containsKey(FormParameters.MAX_NUM_LINES))
config.maxNumLines = (Integer.parseInt(formParams.getFirst(FormParameters.MAX_NUM_LINES)));
else
config.maxNumLines = (-1);
if (formParams != null && formParams.containsKey(FormParameters.ENCODING))
config.encoding = (formParams.getFirst(FormParameters.ENCODING));
else
config.encoding = "utf-8";
if (formParams != null && formParams.containsKey(FormParameters.COLUMN_DELIMITER))
config.columnDelimiter = (formParams.getFirst(FormParameters.COLUMN_DELIMITER));
else
config.columnDelimiter = ",";
if (formParams != null && formParams.containsKey(FormParameters.TEXT_QUALIFIER))
config.textQualifier = (formParams.getFirst(FormParameters.TEXT_QUALIFIER));
else
config.textQualifier = "\"";
if (formParams != null && formParams.containsKey(FormParameters.DATA_START_INDEX))
config.dataStartIndex = (Integer.parseInt(formParams.getFirst(FormParameters.DATA_START_INDEX)));
else
config.dataStartIndex = 2;
if (formParams != null && formParams.containsKey(FormParameters.HEADER_START_INDEX))
config.headerStartIndex = (Integer.parseInt(formParams.getFirst(FormParameters.HEADER_START_INDEX)));
else
config.headerStartIndex = 1;
if (formParams != null && formParams.containsKey(FormParameters.WORKSHEET_INDEX))
config.worksheetIndex = (Integer.parseInt(formParams.getFirst(FormParameters.WORKSHEET_INDEX)));
else
config.worksheetIndex = 0;
if (formParams != null && formParams.containsKey(FormParameters.CONTEXT_ROOT)) {
config.contextRoot = formParams.getFirst(FormParameters.CONTEXT_ROOT);
} else {
config.contextRoot = context.getInitParameter(FormParameters.CONTEXT_ROOT);
}
return config;
}
public InputStream getInput() {
return input;
}
public void setInput(InputStream is) {
this.input = is;
}
public InputType getContentType() {
return contentType;
}
public String getEncoding() {
return encoding;
}
public int getMaxNumLines() {
return maxNumLines;
}
public String getColumnDelimiter() {
return columnDelimiter;
}
public String getTextQualifier() {
return textQualifier;
}
public int getDataStartIndex() {
return dataStartIndex;
}
public int getHeaderStartIndex() {
return headerStartIndex;
}
public int getWorksheetIndex() {
return worksheetIndex;
}
public URL getR2rmlUrl() {
return r2rmlUrl;
}
public URL getContextUrl() {
return contextUrl;
}
public String getContextRoot() {
return contextRoot;
}
}