Skip to content

Commit

Permalink
apacheGH-2255: Support for preconfiguring the query/update send modes…
Browse files Browse the repository at this point in the history
… on RDFLinkHTTP
  • Loading branch information
Aklakan authored and afs committed Feb 28, 2024
1 parent fcd6f37 commit c7dbaf9
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import org.apache.jena.riot.RDFFormat;
import org.apache.jena.riot.RDFLanguages;
import org.apache.jena.riot.RiotException;
import org.apache.jena.sparql.exec.http.QuerySendMode;
import org.apache.jena.sparql.exec.http.UpdateSendMode;

/** Builder class for {@link RDFConnectionRemote} */

Expand Down Expand Up @@ -102,7 +104,7 @@ public RDFConnectionRemoteBuilder updateEndpoint(String sUpdate) {
* Use null for "none".
*/
public RDFConnectionRemoteBuilder gspEndpoint(String sGSP) {
builder.gspEndpoint(sGSP);
builder.gspEndpoint(sGSP);
return this;
}

Expand All @@ -115,7 +117,7 @@ public RDFConnectionRemoteBuilder gspEndpoint(String sGSP) {

/** Set the {@link HttpClient} for the connection to be built */
public RDFConnectionRemoteBuilder httpClient(HttpClient httpClient) {
builder.httpClient(httpClient);
builder.httpClient(httpClient);
return this;
}

Expand All @@ -124,7 +126,7 @@ public RDFConnectionRemoteBuilder httpClient(HttpClient httpClient) {
* This must be a quads format.
*/
public RDFConnectionRemoteBuilder quadsFormat(RDFFormat fmtQuads) {
builder.quadsFormat(fmtQuads);
builder.quadsFormat(fmtQuads);
return this;
}

Expand All @@ -134,7 +136,7 @@ public RDFConnectionRemoteBuilder quadsFormat(RDFFormat fmtQuads) {
* This must be a quads format.
*/
public RDFConnectionRemoteBuilder quadsFormat(Lang langQuads) {
builder.quadsFormat(langQuads);
builder.quadsFormat(langQuads);
return this;
}

Expand All @@ -143,31 +145,31 @@ public RDFConnectionRemoteBuilder quadsFormat(Lang langQuads) {
* This must be a quads format.
*/
public RDFConnectionRemoteBuilder quadsFormat(String langQuads) {
builder.quadsFormat(langQuads);
builder.quadsFormat(langQuads);
return this;
}

/** Set the output format for sending RDF graphs to the remote server.
* This is used for the SPARQ Graph Store Protocol.
*/
public RDFConnectionRemoteBuilder triplesFormat(RDFFormat fmtTriples) {
builder.triplesFormat(fmtTriples);
builder.triplesFormat(fmtTriples);
return this;
}

/** Set the output format for sending RDF graphs to the remote server.
* This is used for the SPARQ Graph Store Protocol.
*/
public RDFConnectionRemoteBuilder triplesFormat(Lang langTriples) {
builder.triplesFormat(langTriples);
builder.triplesFormat(langTriples);
return this;
}

/** Set the output format for sending RDF graphs to the remote server.
* This is used for the SPARQ Graph Store Protocol.
*/
public RDFConnectionRemoteBuilder triplesFormat(String langTriples) {
builder.triplesFormat(langTriples);
builder.triplesFormat(langTriples);
Lang lang = RDFLanguages.nameToLang(langTriples);
if ( lang == null )
throw new RiotException("Language name not recognized: "+langTriples);
Expand All @@ -177,41 +179,59 @@ public RDFConnectionRemoteBuilder triplesFormat(String langTriples) {

/** Set the HTTP {@code Accept:} header used to fetch RDF graph using the SPARQL Graph Store Protocol. */
public RDFConnectionRemoteBuilder acceptHeaderGraph(String acceptGraph) {
builder.acceptHeaderGraph(acceptGraph);
builder.acceptHeaderGraph(acceptGraph);
return this;
}

/** Set the HTTP {@code Accept:} header used to fetch RDF datasets using HTTP GET operations. */
public RDFConnectionRemoteBuilder acceptHeaderDataset(String acceptDataset) {
builder.acceptHeaderDataset(acceptDataset);
builder.acceptHeaderDataset(acceptDataset);
return this;
}

/** Set the HTTP {@code Accept:} header used to when making a SPARQL Protocol SELECT query. */
public RDFConnectionRemoteBuilder acceptHeaderSelectQuery(String acceptSelectHeader) {
builder.acceptHeaderSelectQuery(acceptSelectHeader);
builder.acceptHeaderSelectQuery(acceptSelectHeader);
return this;
}

/** Set the HTTP {@code Accept:} header used to when making a SPARQL Protocol ASK query. */
public RDFConnectionRemoteBuilder acceptHeaderAskQuery(String acceptAskHeader) {
builder.acceptHeaderAskQuery(acceptAskHeader);
builder.acceptHeaderAskQuery(acceptAskHeader);
return this;
}

/** Set the HTTP {@code Accept:} header used to when making a
* SPARQL Protocol query if no query type specific setting available.
*/
public RDFConnectionRemoteBuilder acceptHeaderQuery(String acceptHeader) {
builder.acceptHeaderQuery(acceptHeader);
builder.acceptHeaderQuery(acceptHeader);
return this;
}

/**
* Set the flag for whether to check SPARQL queries and SPARQL updates provided as a string.
*/
public RDFConnectionRemoteBuilder parseCheckSPARQL(boolean parseCheck) {
builder.parseCheckSPARQL(parseCheck);
builder.parseCheckSPARQL(parseCheck);
return this;
}

/**
* Set the strategy that determines how to send a query over HTTP.
* See {@link QuerySendMode}.
*/
public RDFConnectionRemoteBuilder querySendMode(QuerySendMode sendMode) {
builder.querySendMode(sendMode);
return this;
}

/**
* Set the strategy that determines how to send an update request over HTTP.
* See {@link UpdateSendMode}.
*/
public RDFConnectionRemoteBuilder updateSendMode(UpdateSendMode sendMode) {
builder.updateSendMode(sendMode);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@

import java.net.http.HttpClient;

import org.apache.jena.rdflink.RDFLinkFuseki;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFFormat;
import org.apache.jena.riot.resultset.ResultSetLang;
import org.apache.jena.sparql.core.Transactional;
import org.apache.jena.sparql.exec.http.QuerySendMode;
import org.apache.jena.sparql.exec.http.UpdateSendMode;

/**
* Implementation of the {@link RDFLink} interface for connecting to an Apache Jena Fuseki.
Expand Down Expand Up @@ -87,19 +88,22 @@ protected RDFLinkFuseki(RDFLinkHTTPBuilder base) {
base.outputQuads, base.outputTriples,
base.acceptDataset, base.acceptGraph,
base.acceptSparqlResults, base.acceptSelectResult, base.acceptAskResult,
base.parseCheckQueries, base.parseCheckUpdates);
base.parseCheckQueries, base.parseCheckUpdates,
base.querySendMode, base.updateSendMode);
}

protected RDFLinkFuseki(Transactional txnLifecycle, HttpClient httpClient, String destination,
String queryURL, String updateURL, String gspURL, RDFFormat outputQuads, RDFFormat outputTriples,
String acceptDataset, String acceptGraph,
String acceptSparqlResults, String acceptSelectResult, String acceptAskResult,
boolean parseCheckQueries, boolean parseCheckUpdates) {
boolean parseCheckQueries, boolean parseCheckUpdates,
QuerySendMode querySendMode, UpdateSendMode updateSendMode) {
super(txnLifecycle, httpClient,
destination, queryURL, updateURL, gspURL,
outputQuads, outputTriples,
acceptDataset, acceptGraph,
acceptSparqlResults, acceptSelectResult, acceptAskResult, parseCheckQueries, parseCheckUpdates);
acceptSparqlResults, acceptSelectResult, acceptAskResult, parseCheckQueries, parseCheckUpdates,
querySendMode, updateSendMode);
}

// Fuseki specific operations.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
import org.apache.jena.sparql.exec.http.GSP;
import org.apache.jena.sparql.exec.http.QueryExecHTTP;
import org.apache.jena.sparql.exec.http.QueryExecHTTPBuilder;
import org.apache.jena.sparql.exec.http.QuerySendMode;
import org.apache.jena.sparql.exec.http.UpdateExecHTTPBuilder;
import org.apache.jena.sparql.exec.http.UpdateSendMode;
import org.apache.jena.sparql.util.Context;
import org.apache.jena.system.Txn;
import org.apache.jena.update.UpdateFactory;
Expand Down Expand Up @@ -79,6 +81,9 @@ public class RDFLinkHTTP implements RDFLink {
// Whether to check SPARQL updates given as strings by parsing them.
protected final boolean parseCheckUpdates;

protected final QuerySendMode querySendMode;
protected final UpdateSendMode updateSendMode;

/** Create a {@link RDFLinkHTTPBuilder}. */
public static RDFLinkHTTPBuilder newBuilder() {
return new RDFLinkHTTPBuilder();
Expand All @@ -103,7 +108,8 @@ protected RDFLinkHTTP(Transactional txnLifecycle, HttpClient httpClient, String
String acceptDataset, String acceptGraph,
String acceptSparqlResults,
String acceptSelectResult, String acceptAskResult,
boolean parseCheckQueries, boolean parseCheckUpdates) {
boolean parseCheckQueries, boolean parseCheckUpdates,
QuerySendMode querySendMode, UpdateSendMode updateSendMode) {
// Any defaults.
HttpClient hc = httpClient!=null ? httpClient : HttpEnv.getDftHttpClient();
if ( txnLifecycle == null )
Expand All @@ -124,6 +130,8 @@ protected RDFLinkHTTP(Transactional txnLifecycle, HttpClient httpClient, String
this.acceptAskResult = acceptAskResult;
this.parseCheckQueries = parseCheckQueries;
this.parseCheckUpdates = parseCheckUpdates;
this.querySendMode = querySendMode;
this.updateSendMode = updateSendMode;
}

@Override
Expand Down Expand Up @@ -365,7 +373,7 @@ protected QueryExecHTTP buildX(HttpClient hClient, Query queryActual, String que
private QueryExecHTTPBuilderOverRDFLinkHTTP createQExecBuilder() {
checkQuery();
QueryExecHTTPBuilderOverRDFLinkHTTP builder = new QueryExecHTTPBuilderOverRDFLinkHTTP();
builder.endpoint(svcQuery).httpClient(httpClient);
builder.endpoint(svcQuery).httpClient(httpClient).sendMode(querySendMode);
return builder;
}

Expand All @@ -377,7 +385,6 @@ private void acc(StringBuilder sBuff, String acceptString) {
sBuff.append(acceptString);
}


/**
* Return a {@link UpdateExecBuilder} that is initially configured for this link
* setup and type. The update built will be set to go to the same dataset/remote
Expand All @@ -392,7 +399,8 @@ public UpdateExecBuilder newUpdate() {

/** Create a builder, configured with the link setup. */
private UpdateExecHTTPBuilder createUExecBuilder() {
return UpdateExecHTTPBuilder.create().endpoint(svcUpdate).httpClient(httpClient);
return UpdateExecHTTPBuilder.create().endpoint(svcUpdate).httpClient(httpClient)
.sendMode(updateSendMode);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@
import java.util.function.Function;

import org.apache.jena.http.HttpEnv;
import org.apache.jena.rdflink.RDFLinkHTTPBuilder;
import org.apache.jena.riot.*;
import org.apache.jena.sparql.core.Transactional;
import org.apache.jena.sparql.core.TransactionalLock;
import org.apache.jena.sparql.exec.http.QuerySendMode;
import org.apache.jena.sparql.exec.http.UpdateSendMode;

/** Builder class for {@link RDFLinkHTTP} */
public class RDFLinkHTTPBuilder {
Expand Down Expand Up @@ -61,6 +62,9 @@ public class RDFLinkHTTPBuilder {
protected boolean parseCheckQueries = true;
protected boolean parseCheckUpdates = true;

protected QuerySendMode querySendMode = QuerySendMode.systemDefault;
protected UpdateSendMode updateSendMode = UpdateSendMode.systemDefault;

protected RDFLinkHTTPBuilder() {
// Default settings are the member declarations.
}
Expand All @@ -85,6 +89,8 @@ protected RDFLinkHTTPBuilder(RDFLinkHTTP base) {
acceptAskResult = base.acceptAskResult;
parseCheckQueries = base.parseCheckQueries;
parseCheckUpdates = base.parseCheckUpdates;

querySendMode = base.querySendMode;
}

/** URL of the remote SPARQL endpoint.
Expand Down Expand Up @@ -274,6 +280,24 @@ public RDFLinkHTTPBuilder parseCheckSPARQL(boolean parseCheck) {
return this;
}

/**
* Set the strategy that determines how to send a query over HTTP.
* See {@link QuerySendMode}.
*/
public RDFLinkHTTPBuilder querySendMode(QuerySendMode sendMode) {
this.querySendMode = sendMode;
return this;
}

/**
* Set the strategy that determines how to send an update request over HTTP.
* See {@link UpdateSendMode}.
*/
public RDFLinkHTTPBuilder updateSendMode(UpdateSendMode sendMode) {
this.updateSendMode = sendMode;
return this;
}

private Function<RDFLinkHTTPBuilder, RDFLink> creator = null;
/** Provide an alternative function to make the {@link RDFLink} object.
* <p>
Expand Down Expand Up @@ -310,6 +334,7 @@ protected RDFLinkHTTP buildConnection() {
outputQuads, outputTriples,
acceptDataset, acceptGraph,
acceptSparqlResults, acceptSelectResult, acceptAskResult,
parseCheckQueries, parseCheckUpdates);
parseCheckQueries, parseCheckUpdates,
querySendMode, updateSendMode);
}
}

0 comments on commit c7dbaf9

Please sign in to comment.