package eu.lod2.rsine.remotenotification; import eu.lod2.rsine.service.PersistAndNotifyProvider; import org.openrdf.OpenRDFException; import org.openrdf.model.Model; import org.openrdf.model.impl.TreeModel; import org.openrdf.rio.RDFFormat; import org.openrdf.rio.RDFParser; import org.openrdf.rio.Rio; import org.openrdf.rio.helpers.StatementCollector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.io.StringReader; @Service public class RemoteChangeSetService { private final Logger logger = LoggerFactory.getLogger(RemoteChangeSetService.class); @Autowired private PersistAndNotifyProvider persistAndNotifyProvider; public void handleChangeSet(String rdfChangeSet, String contentType) throws IOException, OpenRDFException { RDFFormat format = Rio.getParserFormatForMIMEType(contentType); Model changeSet = parseChangeSet(rdfChangeSet, format); persistAndNotifyProvider.persistAndNotify(changeSet, true); } private Model parseChangeSet(String rdfChangeSet, RDFFormat rdfFormat) throws IOException, OpenRDFException { RDFParser rdfParser = Rio.createParser(rdfFormat); Model changeSet = new TreeModel(); StatementCollector collector = new StatementCollector(changeSet); rdfParser.setRDFHandler(collector); rdfParser.parse(new StringReader(rdfChangeSet), ""); return changeSet; } }