From 739dcc6b82efdf574556aa2677597c3638ef686b Mon Sep 17 00:00:00 2001 From: Enrico Ottonello Date: Wed, 27 May 2020 23:07:08 +0200 Subject: [PATCH] added rest method to execute sparql insert query on graphdb --- .../ariadneplus/graphdb/GraphDBClient.java | 91 +++++++++---------- .../AriadnePlusPublisherController.java | 18 +++- .../publisher/AriadnePlusPublisherHelper.java | 17 ++++ 3 files changed, 73 insertions(+), 53 deletions(-) diff --git a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/graphdb/GraphDBClient.java b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/graphdb/GraphDBClient.java index d3487ce..3619f37 100644 --- a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/graphdb/GraphDBClient.java +++ b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/graphdb/GraphDBClient.java @@ -10,6 +10,7 @@ import org.eclipse.rdf4j.RDF4JException; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.query.*; import org.eclipse.rdf4j.repository.Repository; import org.eclipse.rdf4j.repository.RepositoryConnection; import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager; @@ -239,53 +240,45 @@ public class GraphDBClient { public void setRepository(String repository) { this.repository = repository; } + + public String executeSparql(final String queryValue) throws AriadnePlusPublisherException{ + try { + String result = new String(""); + log.debug("init connection to graphDBServerUrl " + this.graphDBServerUrl); + RemoteRepositoryManager manager = new RemoteRepositoryManager(this.graphDBServerUrl); + manager.init(); + manager.setUsernameAndPassword(getWriterUser(), getWriterPwd()); + log.debug("manager init"); + Repository repository = manager.getRepository(getRepository()); + ValueFactory factory = repository.getValueFactory(); + try (RepositoryConnection con = repository.getConnection()) { + log.debug("connection established"); + con.begin(); + + Update updateResultQuery = con.prepareUpdate(queryValue); + if (updateResultQuery!=null) { + updateResultQuery.execute(); + result = "updated"; + } + else { + result = "No result."; + } + + log.debug("query result: "+result); + con.commit(); + log.debug("query executed"); + con.close(); + } + catch (RDF4JException e) { + log.error("error executing query ...", e); + } + repository.shutDown(); + manager.shutDown(); + log.debug("manager shutDown"); + return result; + }catch(Throwable e){ + log.error(e); + throw new AriadnePlusPublisherException(e); + } + } } - -// -// strQuery = -// "SELECT ?name FROM DEFAULT WHERE {" + -// "?s ?name .}"; -// } - - -// -// public void queryTest(){ -// RemoteRepositoryManager manager = new RemoteRepositoryManager(GRAPHDB_SERVER_URL); -// manager.init(); -// logger.debug("manager init"); -// Repository repository = manager.getRepository("PersonData"); -// try (RepositoryConnection con = repository.getConnection()) { -// logger.debug("connection established"); -// query(con); -// logger.debug("query success"); -// } -// catch (RDF4JException e) { -// logger.error("error adding statement ...", e); -// } -// manager.shutDown(); -// logger.debug("manager shutDown"); -// } -// -// private void query(RepositoryConnection repositoryConnection) { -// TupleQuery tupleQuery = repositoryConnection.prepareTupleQuery(QueryLanguage.SPARQL, strQuery); -// TupleQueryResult result = null; -// try { -// result = tupleQuery.evaluate(); -// int count = 0; -// while (result.hasNext()) { -// BindingSet bindingSet = result.next(); -// -// SimpleLiteral name = (SimpleLiteral)bindingSet.getValue("name"); -// logger.info("name = " + name.stringValue()); -// count++; -// } -// logger.info("Entries found: ", count); -// } -// catch (QueryEvaluationException qee) { -// logger.error(WTF_MARKER, qee.getStackTrace().toString(), qee); -// } finally { -// result.close(); -// } -// } - - diff --git a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java index 9018c06..2a45cf8 100644 --- a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java +++ b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java @@ -3,10 +3,7 @@ package eu.dnetlib.ariadneplus.publisher; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherHelper.AriadnePlusTargets; @@ -70,4 +67,17 @@ public class AriadnePlusPublisherController { public void setAriadnePlusPublisherHelper(final AriadnePlusPublisherHelper ariadneplusPublisherHelper) { this.ariadneplusPublisherHelper = ariadneplusPublisherHelper; } + + @RequestMapping(value = "/executeSparql", method = RequestMethod.POST) + public String executeSparql(@RequestBody final String queryValue) throws AriadnePlusPublisherException { +// queryValue = "PREFIX aocat: \n" + +// " PREFIX skos:\n" + +// " INSERT { GRAPH { aocat:has_title \" inserito da controller rest\" } }\n" + +// " WHERE{\n" + +// " GRAPH {\n" + +// " { aocat:has_title ?title } .\n" + +// " }\n" + +// " };"; + return getAriadnePlusPublisherHelper().executeSparql(queryValue, getTarget(DEFAULT_TARGET_ENDPOINT)); + } } \ No newline at end of file diff --git a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java index ec242a9..6d053d4 100644 --- a/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java +++ b/dnet-ariadneplus-graphdb-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java @@ -66,6 +66,17 @@ public class AriadnePlusPublisherHelper { return res; } + public String executeSparql(final String queryValue, final AriadnePlusTargets target) throws AriadnePlusPublisherException { + String res; + switch(target){ + case GRAPHDB: + res = executeSparqlGraphDB(queryValue); + break; + default: throw new AriadnePlusPublisherException("Target "+target+" not supported yet"); + } + return res; + } + private void publishGraphDB(final String record) throws AriadnePlusPublisherException { log.debug("Publishing on graphdb"); GraphDBClient graphDBClient = this.graphdbClientFactory.getGraphDBClient(); @@ -90,4 +101,10 @@ public class AriadnePlusPublisherHelper { return 0; } + + private String executeSparqlGraphDB(final String queryValue) throws AriadnePlusPublisherException { + log.info("executeSparqlGraphDB "+queryValue); + GraphDBClient graphDBClient = this.graphdbClientFactory.getGraphDBClient(); + return graphDBClient.executeSparql(queryValue); + } }