From 5a2b6ee1145f813bfcf7bbe28ccce266232c471b Mon Sep 17 00:00:00 2001 From: grahamtriggs Date: Wed, 21 Oct 2015 11:35:27 +0100 Subject: [PATCH] [VIVO-1031] Performance improvement to manage webpages page --- ...AuthorsToInformationResourceGenerator.java | 21 +++-- .../ManageWebpagesForIndividualGenerator.java | 93 ++++++++++++++++--- 2 files changed, 94 insertions(+), 20 deletions(-) diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAuthorsToInformationResourceGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAuthorsToInformationResourceGenerator.java index 01eddd19..00cc8a27 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAuthorsToInformationResourceGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAuthorsToInformationResourceGenerator.java @@ -447,7 +447,6 @@ public class AddAuthorsToInformationResourceGenerator extends VivoBaseGenerator private List getExistingAuthorships(String subjectUri, VitroRequest vreq) { - RDFService rdfService = vreq.getRDFService(); List> authorships = new ArrayList>(); @@ -461,14 +460,18 @@ public class AddAuthorsToInformationResourceGenerator extends VivoBaseGenerator log.debug("Query string is: " + queryStr); QueryExecution qe = QueryExecutionFactory.create(queryStr, constructedModel); - ResultSet results = qe.execSelect(); - while (results.hasNext()) { - QuerySolution soln = results.nextSolution(); - RDFNode node = soln.get("authorshipURI"); - if (node.isURIResource()) { - authorships.add(QueryUtils.querySolutionToStringValueMap(soln)); - } - } + try { + ResultSet results = qe.execSelect(); + while (results.hasNext()) { + QuerySolution soln = results.nextSolution(); + RDFNode node = soln.get("authorshipURI"); + if (node.isURIResource()) { + authorships.add(QueryUtils.querySolutionToStringValueMap(soln)); + } + } + } finally { + qe.close(); + } } catch (Exception e) { log.error(e, e); } diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java index 22077c90..3bce18e8 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java @@ -7,6 +7,11 @@ import java.util.Map; import javax.servlet.http.HttpSession; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -88,8 +93,61 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG prepare(vreq, config); return config; } - - + + private static String WEBPAGE_MODEL = "" + + "PREFIX core: \n" + + "PREFIX vcard: \n" + + "PREFIX rdfs: \n" + + "PREFIX vitro: \n" + + "CONSTRUCT\n" + + "{\n" + + " ?subject ?vcard .\n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " ?link vcard:url ?url .\n" + + " ?link rdfs:label ?linkLabel .\n" + + " ?link core:rank ?rank .\n" + + " ?link vitro:mostSpecificType ?type .\n" + + " ?type rdfs:label ?typeLabel .\n" + + "}\n" + + "WHERE\n" + + "{\n" + + " {\n" + + " ?subject ?vcard .\n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " }\n" + + " UNION\n" + + " {\n" + + " ?subject ?vcard .\n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " ?link vcard:url ?url .\n" + + " }\n" + + " UNION\n" + + " {\n" + + " ?subject ?vcard .\n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " ?link rdfs:label ?linkLabel .\n" + + " }\n" + + " UNION\n" + + " {\n" + + " ?subject ?vcard . \n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " ?link core:rank ?rank .\n" + + " }\n" + + " UNION\n" + + " {\n" + + " ?subject ?vcard .\n" + + " ?vcard vcard:hasURL ?link .\n" + + " ?link a vcard:URL .\n" + + " ?link vitro:mostSpecificType ?type .\n" + + " ?type rdfs:label ?typeLabel .\n" + + " }\n" + + "}\n"; + private static String WEBPAGE_QUERY = "" + "PREFIX core: \n" + "PREFIX vcard: \n" @@ -109,18 +167,31 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG private List> getWebpages(String subjectUri, VitroRequest vreq) { - - String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(), "subject", subjectUri); - log.debug("Query string is: " + queryStr); + RDFService rdfService = vreq.getRDFService(); + List> webpages = new ArrayList>(); try { - ResultSet results = QueryUtils.getQueryResults(queryStr, vreq); - while (results.hasNext()) { - QuerySolution soln = results.nextSolution(); - RDFNode node = soln.get("link"); - if (node != null && node.isURIResource()) { - webpages.add(QueryUtils.querySolutionToStringValueMap(soln)); + String constructStr = QueryUtils.subUriForQueryVar(WEBPAGE_MODEL, "subject", subjectUri); + + Model constructedModel = ModelFactory.createDefaultModel(); + rdfService.sparqlConstructQuery(constructStr, constructedModel); + + String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(), "subject", subjectUri); + log.debug("Query string is: " + queryStr); + + QueryExecution qe = QueryExecutionFactory.create(queryStr, constructedModel); + try { + ResultSet results = qe.execSelect(); + + while (results.hasNext()) { + QuerySolution soln = results.nextSolution(); + RDFNode node = soln.get("link"); + if (node != null && node.isURIResource()) { + webpages.add(QueryUtils.querySolutionToStringValueMap(soln)); + } } + } finally { + qe.close(); } } catch (Exception e) { log.error(e, e);