Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import edu.cornell.library.scholars.webapp.controller.api.distribute.AbstractDataDistributor;
import edu.cornell.library.scholars.webapp.controller.api.distribute.DataDistributorContext;
import edu.cornell.library.scholars.webapp.controller.api.distribute.rdf.util.VariableBinder;
import edu.cornell.mannlib.vitro.webapp.controller.api.sparqlquery.ResultSetMediaType;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;

/**
Expand Down Expand Up @@ -35,4 +36,17 @@ public void addUriBindingName(String uriBindingName) {
public void addLiteralBindingName(String literalBindingName) {
this.literalBindingNames.add(literalBindingName);
}

protected String getContentType(String format) {
String contentType;
switch (format) {
case "CSV":
contentType = ResultSetMediaType.CSV.getContentType();
break;
default:
contentType = ResultSetMediaType.JSON.getContentType();
break;
}
return contentType;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,46 @@
import edu.cornell.library.scholars.webapp.controller.api.distribute.rdf.graphbuilder.GraphBuilder;
import edu.cornell.library.scholars.webapp.controller.api.distribute.rdf.graphbuilder.GraphBuilderUtilities.GraphBuilders;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
import edu.cornell.mannlib.vitro.webapp.web.ContentType;

/**
* Execute one or more GraphBuilders, merge the results, and write them out as
* Turtle RDF.
*/
public class RdfGraphDistributor extends AbstractDataDistributor {
private List<GraphBuilder> graphBuilders = new ArrayList<>();
private String lang = "TTL";

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#graphBuilder", minOccurs = 1)
public void addGraphBuilder(GraphBuilder builder) {
graphBuilders.add(builder);
}

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#rdfLang", maxOccurs = 1)
public void setLang(String lang) {
this.lang = lang;
}

@Override
public String getContentType() throws DataDistributorException {
return "text/turtle";
String contentType;
switch (lang) {
case "RDF/XML":
contentType = ContentType.RDFXML.getMediaType();
break;
case "N3":
contentType = ContentType.N3.getMediaType();
break;
default:
contentType = ContentType.TURTLE.getMediaType();
break;
}
return contentType;
}

@Override
public void writeOutput(OutputStream output) throws DataDistributorException {
new GraphBuilders(ddContext, graphBuilders).run().write(output, "TTL");
new GraphBuilders(ddContext, graphBuilders).run().write(output, lang);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import edu.cornell.library.scholars.webapp.controller.api.distribute.DataDistributorContext;
import edu.cornell.mannlib.vitro.webapp.modelaccess.RequestModelAccess;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService.ResultFormat;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.QueryHolder;

Expand Down Expand Up @@ -65,6 +66,7 @@
public class SelectFromContentDistributor extends AbstractSparqlBindingDistributor {
private RequestModelAccess models;
private String rawQuery;
private String resultFormat = "JSON";

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#query", minOccurs = 1, maxOccurs = 1)
public void setRawQuery(String query) {
Expand All @@ -77,16 +79,22 @@ public void init(DataDistributorContext ddc) throws DataDistributorException {
this.models = ddc.getRequestModels();
}

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#resultFormat", maxOccurs = 1)
public void setResultFormat(String resultFormat) {
this.resultFormat = resultFormat;
}

@Override
public String getContentType() throws DataDistributorException {
return "application/sparql-results+json";
return getContentType(resultFormat);
}

@Override
public void writeOutput(OutputStream output) throws DataDistributorException {
QueryHolder boundQuery = binder.bindValuesToQuery(uriBindingNames, literalBindingNames,
new QueryHolder(rawQuery));
createSelectQueryContext(this.models.getRDFService(), boundQuery).execute().writeToOutput(output);
createSelectQueryContext(this.models.getRDFService(), boundQuery).execute().writeToOutput(output,
ResultFormat.valueOf(resultFormat));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import edu.cornell.library.scholars.webapp.controller.api.distribute.DataDistributorContext;
import edu.cornell.library.scholars.webapp.controller.api.distribute.rdf.graphbuilder.GraphBuilder;
import edu.cornell.library.scholars.webapp.controller.api.distribute.rdf.graphbuilder.GraphBuilderUtilities.GraphBuilders;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService.ResultFormat;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.QueryHolder;
import org.apache.jena.rdf.model.Model;
Expand Down Expand Up @@ -76,6 +77,7 @@
public class SelectFromGraphDistributor extends AbstractSparqlBindingDistributor {
private String rawQuery;
private List<GraphBuilder> graphBuilders = new ArrayList<>();
private String resultFormat = "JSON";

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#query", minOccurs = 1, maxOccurs = 1)
public void setRawQuery(String query) {
Expand All @@ -87,22 +89,28 @@ public void addGraphBuilder(GraphBuilder builder) {
graphBuilders.add(builder);
}

@Property(uri = "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#resultFormat", maxOccurs = 1)
public void setResultFormat(String resultFormat) {
this.resultFormat = resultFormat;
}

@Override
public void init(DataDistributorContext ddc) throws DataDistributorException {
super.init(ddc);
}

@Override
public String getContentType() throws DataDistributorException {
return "application/sparql-results+json";
return getContentType(resultFormat);
}

@Override
public void writeOutput(OutputStream output) throws DataDistributorException {
QueryHolder boundQuery = binder.bindValuesToQuery(uriBindingNames, literalBindingNames,
new QueryHolder(rawQuery));
Model graph = new GraphBuilders(ddContext, graphBuilders).run();
createSelectQueryContext(graph, boundQuery).execute().writeToOutput(output);
createSelectQueryContext(graph, boundQuery).execute().writeToOutput(output,
ResultFormat.valueOf(resultFormat));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

package edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner;

import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetJSON;
import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetCSV;
import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetXML;

import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashSet;
Expand All @@ -17,7 +21,8 @@
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.query.Syntax;
import org.apache.jena.rdf.model.Model;

import org.apache.jena.riot.Lang;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService.ResultFormat;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.SparqlQueryRunner.ExecutingSelectQueryContext;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.SparqlQueryRunner.SelectQueryContext;

Expand Down Expand Up @@ -111,19 +116,43 @@ public <T> T parse(ResultSetParser<T> parser) {

@Override
public void writeToOutput(OutputStream output) {
String qString = query.getQueryString();
try {
Query q = QueryFactory.create(qString, SYNTAX);
QueryExecution qexec = QueryExecutionFactory.create(q, model);
try {
ResultSetFormatter.outputAsJSON(output, qexec.execSelect());
} finally {
qexec.close();
}
} catch (Exception e) {
log.error("problem while running query '" + qString + "'", e);
}
writeToOutput(output, ResultFormat.JSON);
}

@Override
public void writeToOutput(OutputStream output, ResultFormat format) {
String qString = query.getQueryString();
try {
Query q = QueryFactory.create(qString, SYNTAX);
QueryExecution qexec = QueryExecutionFactory.create(q, model);
try {
ResultSetFormatter.output(output, qexec.execSelect(), getLang(format)) ;
} finally {
qexec.close();
}
} catch (Exception e) {
log.error("problem while running query '" + qString + "'", e);
}

}

public static Lang getLang(ResultFormat format) {
Lang result;
switch (format) {
case CSV:
result = SPARQLResultSetCSV;
break;
case JSON:
result = SPARQLResultSetJSON;
break;
case XML:
result = SPARQLResultSetXML;
break;
default:
throw new RuntimeException("Unrecognized result format");
}
return result;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.query.ResultSet;

import org.apache.jena.riot.Lang;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService.ResultFormat;
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.SparqlQueryRunner.ExecutingSelectQueryContext;
import edu.cornell.mannlib.vitro.webapp.utils.sparqlrunner.SparqlQueryRunner.SelectQueryContext;
Expand Down Expand Up @@ -102,15 +103,20 @@ public <T> T parse(ResultSetParser<T> parser) {

@Override
public void writeToOutput(OutputStream output) {
try {
InputStream resultStream = rdfService.sparqlSelectQuery(
query.getQueryString(), JSON);
IOUtils.copy(resultStream, output);
} catch (Exception e) {
log.error(
"problem while running query '"
+ query.getQueryString() + "'", e);
}
writeToOutput(output, JSON);
}

@Override
public void writeToOutput(OutputStream output, ResultFormat format) {
try {
InputStream resultStream = rdfService.sparqlSelectQuery(
query.getQueryString(), format);
IOUtils.copy(resultStream, output);
} catch (Exception e) {
log.error(
"problem while running query '"
+ query.getQueryString() + "'", e);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.rdf.model.Model;

import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService.ResultFormat;

/**
* A conversational tool for handling SPARQL queries.
Expand Down Expand Up @@ -87,6 +87,8 @@ public static interface ExecutingSelectQueryContext {
public <T> T parse(ResultSetParser<T> parser);

public void writeToOutput(OutputStream output);

public void writeToOutput(OutputStream output, ResultFormat format);
}

// ------------- CONSTRUCT ----------- //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1273,6 +1273,7 @@ uil-data:rebuild_search_index.Vitro
uil-data:password_saved.Vitro
rdf:type owl:NamedIndividual ;
rdf:type uil:UILabel ;

rdfs:label "Your password has been saved."@en-US ;
uil:hasApp "Vitro" ;
uil:hasKey "password_saved" ;
Expand Down Expand Up @@ -6563,6 +6564,20 @@ uil-data:dd_config_actionName.Vitro
uil:hasApp "Vitro" ;
uil:hasKey "dd_config_http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#actionName" .

uil-data:dd_config_rdfLang.Vitro
rdf:type owl:NamedIndividual ;
rdf:type uil:UILabel ;
rdfs:label "RDF serialization language"@en-US ;
uil:hasApp "Vitro" ;
uil:hasKey "dd_config_http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#rdfLang" .

uil-data:dd_config_resultFormat.Vitro
rdf:type owl:NamedIndividual ;
rdf:type uil:UILabel ;
rdfs:label "Result format"@en-US ;
uil:hasApp "Vitro" ;
uil:hasKey "dd_config_http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#resultFormat" .

uil-data:dd_config_uriBinding.Vitro
rdf:type owl:NamedIndividual ;
rdf:type uil:UILabel ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,26 @@
</label>
<#switch property.parameterType.name>
<#case 'java.lang.String'>
<#if fields[property.propertyUri]??>
<#assign values = fields[property.propertyUri] />
<#list values as value>
<@inputField property.propertyUri value required />
</#list>
<#if property.propertyUri == "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#rdfLang">
<select name="${property.propertyUri}">
<option value="N3" <#if fields[property.propertyUri]?? && fields[property.propertyUri]?seq_contains('N3')>selected</#if> >N3</option>
<option value="TTL" <#if fields[property.propertyUri]?? && fields[property.propertyUri]?seq_contains('TTL')>selected</#if> >TTL</option>
<option value="RDF/XML" <#if fields[property.propertyUri]?? && fields[property.propertyUri]?seq_contains('RDF/XML')>selected</#if> >RDF/XML</option>
</select>
<#elseif property.propertyUri == "http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#resultFormat">
<select name="${property.propertyUri}">
<option value="JSON" <#if fields[property.propertyUri]?? && fields[property.propertyUri]?seq_contains('JSON')>selected</#if> >JSON</option>
<option value="CSV" <#if fields[property.propertyUri]?? && fields[property.propertyUri]?seq_contains('CSV')>selected</#if> >CSV</option>
</select>
<#else>
<@inputField property.propertyUri "" required />
<#if fields[property.propertyUri]??>
<#assign values = fields[property.propertyUri] />
<#list values as value>
<@inputField property.propertyUri value required />
</#list>
<#else>
<@inputField property.propertyUri "" required />
</#if>
</#if>
<#break>
<#case 'edu.cornell.library.scholars.webapp.controller.api.distribute.DataDistributor'>
Expand Down
Loading