package edu.isi.karma.rdf;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.er.helper.PythonRepository;
import edu.isi.karma.er.helper.PythonRepositoryRegistry;
import edu.isi.karma.kr2rml.URIFormatter;
import edu.isi.karma.kr2rml.mapping.R2RMLMappingIdentifier;
import edu.isi.karma.kr2rml.writer.KR2RMLRDFWriter;
import edu.isi.karma.kr2rml.writer.N3KR2RMLRDFWriter;
import edu.isi.karma.metadata.KarmaMetadataManager;
import edu.isi.karma.metadata.OntologyMetadata;
import edu.isi.karma.metadata.PythonTransformationMetadata;
import edu.isi.karma.metadata.UserConfigMetadata;
import edu.isi.karma.metadata.UserPreferencesMetadata;
import edu.isi.karma.rdf.GenericRDFGenerator.InputType;
import edu.isi.karma.util.EncodingDetector;
import edu.isi.karma.webserver.ContextParametersRegistry;
import edu.isi.karma.webserver.ServletContextParameterMap;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
public abstract class TestRdfGenerator {
private static final Logger logger = LoggerFactory.getLogger(TestRdfGenerator.class);
public static ServletContextParameterMap contextParameters;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
ContextParametersRegistry contextParametersRegistry = ContextParametersRegistry.getInstance();
contextParameters = contextParametersRegistry.registerByKarmaHome(null);
KarmaMetadataManager userMetadataManager = new KarmaMetadataManager(contextParameters);
UpdateContainer uc = new UpdateContainer();
userMetadataManager.register(new UserPreferencesMetadata(contextParameters), uc);
userMetadataManager.register(new UserConfigMetadata(contextParameters), uc);
userMetadataManager.register(new PythonTransformationMetadata(contextParameters), uc);
userMetadataManager.register(new OntologyMetadata(contextParameters), uc);
PythonRepository pythonRepository = new PythonRepository(false, contextParameters.getParameterValue(ContextParameter.USER_PYTHON_SCRIPTS_DIRECTORY));
PythonRepositoryRegistry.getInstance().register(pythonRepository);
}
/**
* @param csvFile
* @param modelFile
* @param pw
* stores generated RDF triples
* @throws Exception
*/
protected void generateRdfFile(File inputFile, InputType inputType, String modelName, File modelFile, PrintWriter pw)
throws Exception {
GenericRDFGenerator rdfGen = new GenericRDFGenerator(null);
R2RMLMappingIdentifier modelIdentifier = new R2RMLMappingIdentifier(
modelName, modelFile.toURI().toURL());
rdfGen.addModel(modelIdentifier);
List<KR2RMLRDFWriter> writers = createBasicWriter(pw);
RDFGeneratorRequest request = new RDFGeneratorRequest(modelName, inputFile.getName());
request.setAddProvenance(false);
request.setInputFile(inputFile);
request.setDataType(inputType);
request.addWriters(writers);
request.setContextParameters(ContextParametersRegistry.getInstance().getDefault());
rdfGen.generateRDF(request);
}
protected List<KR2RMLRDFWriter> createBasicWriter(PrintWriter pw) {
N3KR2RMLRDFWriter writer = new N3KR2RMLRDFWriter(new URIFormatter(), pw);
List<KR2RMLRDFWriter> writers = new LinkedList<>();
writers.add(writer);
return writers;
}
protected HashSet<String> getFileContent(File file) {
HashSet<String> hashSet = new HashSet<>();
try {
String encoding = EncodingDetector.detect(file);
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(file), encoding));
String line = in.readLine();
while (line != null) {
line = line.trim();
if (line.length() > 0)
hashSet.add(line);
line = in.readLine();
}
in.close();
} catch (IOException e) {
e.printStackTrace();
logger.error("Error getting file contents: " + file.getAbsolutePath());
}
return hashSet;
}
protected HashSet<String> getHashSet(String[] array) {
HashSet<String> hashSet = new HashSet<>();
for (int i = 0; i < array.length; i++) {
String line = array[i].trim();
if (line.length() > 0)
hashSet.add(line);
}
return hashSet;
}
}