package at.punkt.lod2.util; import com.hp.hpl.jena.graph.NodeFactory; import com.hp.hpl.jena.graph.Triple; import com.hp.hpl.jena.sparql.core.DatasetGraph; import com.hp.hpl.jena.sparql.core.DatasetGraphFactory; import eu.lod2.rsine.Rsine; import eu.lod2.rsine.service.ChangeSetCreator; import eu.lod2.rsine.service.ChangeTripleService; import eu.lod2.rsine.service.PersistAndNotifyProvider; import org.apache.jena.fuseki.Fuseki; import org.apache.jena.fuseki.server.FusekiConfig; import org.apache.jena.fuseki.server.SPARQLServer; import org.apache.jena.fuseki.server.ServerConfig; import org.apache.jena.riot.RDFDataMgr; import org.openrdf.model.Literal; import org.openrdf.model.Model; import org.openrdf.model.Statement; import org.openrdf.model.Value; import org.openrdf.model.impl.StatementImpl; import org.openrdf.model.impl.TreeModel; import org.openrdf.model.impl.URIImpl; import org.openrdf.model.vocabulary.SKOS; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; import org.openrdf.rio.*; import org.openrdf.rio.helpers.StatementCollector; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URL; public class Helper { public static DatasetGraph initFuseki(URL rdfFile, String datasetName) { URI rdfFileUri = new File(rdfFile.getFile()).toURI(); DatasetGraph datasetGraph = DatasetGraphFactory.createMem(); RDFDataMgr.read(datasetGraph, rdfFileUri.toString()); ServerConfig serverConfig = FusekiConfig.defaultConfiguration(datasetName, datasetGraph, true) ; SPARQLServer fusekiServer = new SPARQLServer(serverConfig); Fuseki.setServer(fusekiServer); fusekiServer.start(); return datasetGraph; } public static Model createModelFromResourceFile(String fileName, RDFFormat format) throws RDFParseException, IOException, RDFHandlerException { RDFParser rdfParser = Rio.createParser(format); Model model = new TreeModel(); StatementCollector collector = new StatementCollector(model); rdfParser.setRDFHandler(collector); rdfParser.parse(Rsine.class.getResourceAsStream(fileName), ""); return model; } public static Model createChangeSetModel(Statement statement, String changeType) { return new ChangeSetCreator().assembleChangeset(statement, null, changeType); } public static Model createChangeSetModel(String subjUri, String predUri, Value obj, String changeType) { return new ChangeSetCreator().assembleChangeset( new StatementImpl(new URIImpl(subjUri), new URIImpl(predUri), obj), null, changeType); } public static Model createChangeSetModel(String subjUri1, String predUri1, Value obj1, String subjUri2, String predUri2, Value obj2, String changeType) { return new ChangeSetCreator().assembleChangeset( new StatementImpl(new URIImpl(subjUri1), new URIImpl(predUri1), obj1), new StatementImpl(new URIImpl(subjUri2), new URIImpl(predUri2), obj2), changeType); } public static void setLabel(RepositoryConnection repCon, org.openrdf.model.URI concept, org.openrdf.model.URI labelType, Literal newlabel, PersistAndNotifyProvider persistAndNotifyProvider) throws RepositoryException { repCon.add(concept, labelType, newlabel); persistAndNotifyProvider.persistAndNotify( Helper.createChangeSetModel(concept.stringValue(), labelType.stringValue(), newlabel, ChangeTripleService.CHANGETYPE_ADD), true); } public static void setAltLabel(RepositoryConnection repCon, org.openrdf.model.URI concept, Literal newAltLabel, PersistAndNotifyProvider persistAndNotifyProvider) throws RepositoryException { setLabel(repCon, concept, SKOS.ALT_LABEL, newAltLabel, persistAndNotifyProvider); } public static void addToDatasetAndPersist(Statement statement, DatasetGraph datasetGraph, PersistAndNotifyProvider persistAndNotifyProvider) { datasetGraph.getDefaultGraph().add(new Triple( NodeFactory.createURI(statement.getSubject().toString()), NodeFactory.createURI(statement.getPredicate().toString()), NodeFactory.createURI(statement.getObject().toString()))); persistAndNotifyProvider.persistAndNotify( Helper.createChangeSetModel(statement.getSubject().stringValue(), statement.getPredicate().stringValue(), statement.getObject(), ChangeTripleService.CHANGETYPE_ADD), true); } }