diff --git a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/NodeGroupExecutionRestController.java b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/NodeGroupExecutionRestController.java index 8afa0604e..e80376d34 100644 --- a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/NodeGroupExecutionRestController.java +++ b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/NodeGroupExecutionRestController.java @@ -542,8 +542,7 @@ public JSONObject dispatchAnyJobById(@RequestBody DispatchByIdRequestBody reques requestBody.getRuntimeConstraints(), requestBody.getLimitOverride(), requestBody.getOffsetOverride(), - targetId, - requestBody.getPruneToColumn()); + targetId); retval.setSuccess(true); retval.addResult(SimpleResultSet.JOB_ID_RESULT_KEY, ngExecutor.getJobID()); diff --git a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchByIdRequestBody.java b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchByIdRequestBody.java index 01ba817dd..f812ea548 100644 --- a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchByIdRequestBody.java +++ b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchByIdRequestBody.java @@ -38,14 +38,6 @@ public class DispatchByIdRequestBody extends DispatchRequestBody { example = "-1") private int offsetOverride = -1; - // This is custom optional field only available through straight REST - // for Saqib @ collins - @Schema( - description = "Prune select table return down to one column and uniquify.", - required = false, - example = "favorite_column") - private String pruneToColumn = null; - public int getLimitOverride() { return limitOverride; } @@ -65,13 +57,6 @@ public String getNodeGroupId(){ return this.nodeGroupId; } - public void setPruneToColumn(String val) { - this.pruneToColumn = val; - } - public String getPruneToColumn() { - return this.pruneToColumn; - } - /** * Validate request contents. Throws an exception if validation fails. */ diff --git a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchRequestBody.java b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchRequestBody.java index c059cb990..40bcd5c41 100644 --- a/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchRequestBody.java +++ b/nodeGroupExecutionService/src/main/java/com/ge/research/semtk/services/nodeGroupExecution/requests/DispatchRequestBody.java @@ -28,19 +28,19 @@ public class DispatchRequestBody extends SparqlConnRequestBody { @Schema( description = "EDC query constraints json", - required = false, + requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "{ optional complex json }") private String externalDataConnectionConstraints; @Schema( description = "Query flags array", - required = false, - example = "[\"FLAG1\", \"FLAG2\"]") + requiredMode = Schema.RequiredMode.NOT_REQUIRED, + example = "[\"PRUNE_TO_COLUMN:myCol\", \"UNOPTIONALIZE_CONSTRAINED\"]") private String flags; // json array @Schema( description = "Runtime constraints json", - required = false, + requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "\"[{\"SparqlID\":\"?id\",\"Operator\":\"MATCHES\",\"Operands\":[\"98243-T\"]}]\"") private String runtimeConstraints; diff --git a/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/DispatcherServiceRestController.java b/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/DispatcherServiceRestController.java index a82fd4b27..118b87711 100644 --- a/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/DispatcherServiceRestController.java +++ b/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/DispatcherServiceRestController.java @@ -62,6 +62,7 @@ import com.ge.research.semtk.springutillib.properties.EnvironmentProperties; import com.ge.research.semtk.springutillib.properties.ServicesGraphProperties; import com.ge.research.semtk.sparqlX.asynchronousQuery.AsynchronousNodeGroupBasedQueryDispatcher; +import com.ge.research.semtk.sparqlX.dispatch.QueryFlags; @RestController @RequestMapping("/dispatcher") @@ -326,7 +327,11 @@ public JSONObject queryFromNodeGroup(@RequestBody QueryRequestBody requestBody, try { dsp = getDispatcher(props, jobId, (NodegroupRequestBody) requestBody, useAuth, true); dsp.getJobTracker().incrementPercentComplete(dsp.getJobId(), 1, 10); - dsp.addPruneToColumn(requestBody.getPruneToColumn()); + + QueryFlags flags = requestBody.getFlags(); + if (flags != null) { + dsp.addPruneToColumn(flags.get(QueryFlags.PRUNE_TO_COL)); + } WorkThread thread = new WorkThread(dsp, requestBody.getExternalConstraints(), requestBody.getFlags(), qt, rt); diff --git a/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/QueryRequestBody.java b/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/QueryRequestBody.java index 4a4388d86..34d67a78f 100644 --- a/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/QueryRequestBody.java +++ b/sparqlExtDispatchService/src/main/java/com/ge/research/semtk/services/dispatch/QueryRequestBody.java @@ -31,16 +31,9 @@ public class QueryRequestBody extends NodegroupRequestBody { @Schema(required = false, example = "[{\"SparqlID\":\"?name\",\"Operator\":\"MATCHES\",\"Operands\":[\"Fred\"]}]") private String constraintSet; - @Schema(required = false, example = "[\"UNOPTIONALIZE_CONSTRAINED\"]") + @Schema(required = false, example = "[\"UNOPTIONALIZE_CONSTRAINED\", \"PRUNE_TO_COLUMN:myCol\"]") private String flags; // a string parseable to a JSONArray - // This is custom optional field only available through straight REST - // for Saqib @ collins - @Schema( - description = "Prune select table return down to one column and uniquify.", - required = false, - example = "favorite_column") - private String pruneToColumn = null; public void setConstraintSet(String constraintSet){ this.constraintSet = constraintSet; @@ -67,11 +60,4 @@ public QueryFlags getFlags() throws Exception{ return new QueryFlags(Utility.getJsonArrayFromString(this.flags)); } - public void setPruneToColumn(String val) { - this.pruneToColumn = val; - } - public String getPruneToColumn() { - return this.pruneToColumn; - } - } diff --git a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/NodeGroupExecutor.java b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/NodeGroupExecutor.java index 3c13156c1..599d13c07 100644 --- a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/NodeGroupExecutor.java +++ b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/NodeGroupExecutor.java @@ -302,39 +302,6 @@ public void dispatchRawSparqlUpdate(SparqlConnection sc, String sparqlQuery) thr this.setJobID(simpleRes.getResult("requestID")); } - /** - * Version without queryFlags or pruneToColumn - * @param qt - * @param rt - * @param sc - * @param ng - * @param externalConstraints - * @param runtimeConstraints - * @param targetObjectSparqlID - * @throws Exception - */ - public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt,SparqlConnection sc, NodeGroup ng, JSONObject externalConstraints, JSONArray runtimeConstraints, String targetObjectSparqlID) throws Exception{ - this.dispatchJob(qt, rt, sc, ng, externalConstraints, null, runtimeConstraints, -1, -1, targetObjectSparqlID, null); - } - - /** - * Version without pruneToColumn - * @param qt - * @param rt - * @param sc - * @param ng - * @param externalConstraints - * @param flags - * @param runtimeConstraints - * @param limitOverride - * @param offsetOverride - * @param targetObjectSparqlID - * @param pruneToColumn - * @throws Exception - */ - public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, NodeGroup ng, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID) throws Exception{ - this.dispatchJob(qt, rt, sc, ng, externalConstraints, flags, runtimeConstraints, -1, -1, targetObjectSparqlID, null); - } /** * @@ -348,11 +315,10 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql * @param limitOverride * @param offsetOverride * @param targetObjectSparqlID - * @param pruneToColumn - unusual special : prune a SELECT table result to only this column, uniquified * @throws Exception */ @SuppressWarnings("unchecked") - public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, NodeGroup ng, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID, String pruneToColumn) throws Exception{ + public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, NodeGroup ng, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID) throws Exception{ // externalConstraints as used by executeQueryFromNodeGroup LocalLogger.logToStdOut("Sending a " + qt + " query to the dispatcher..."); @@ -396,7 +362,7 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql SparqlGraphJson sgjson = new SparqlGraphJson(ng, sc); SimpleResultSet simpleRes = null; - simpleRes = this.dispatchClient.executeQuery(sgjson, qt, rt, externalConstraints, flags, targetObjectSparqlID, pruneToColumn); + simpleRes = this.dispatchClient.executeQuery(sgjson, qt, rt, externalConstraints, flags, targetObjectSparqlID); simpleRes.throwExceptionIfUnsuccessful(); // set up the Job ID @@ -405,7 +371,7 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql } /** - * Version without queryFlags or pruneToColumn + * Version without queryFlags * @param qt * @param rt * @param sc @@ -416,26 +382,9 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql * @throws Exception */ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt,SparqlConnection sc, String storedNodeGroupId, JSONObject externalConstraints, JSONArray runtimeConstraints, String targetObjectSparqlID) throws Exception{ - this.dispatchJob(qt, rt, sc, storedNodeGroupId, externalConstraints, null, runtimeConstraints, -1, -1, targetObjectSparqlID, null); + this.dispatchJob(qt, rt, sc, storedNodeGroupId, externalConstraints, null, runtimeConstraints, -1, -1, targetObjectSparqlID); } - /** - * Version without pruneToColumn - * @param qt - * @param rt - * @param sc - * @param storedNodeGroupId - * @param externalConstraints - * @param flags - * @param runtimeConstraints - * @param limitOverride - * @param offsetOverride - * @param targetObjectSparqlID - * @throws Exception - */ - public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, String storedNodeGroupId, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID) throws Exception{ - this.dispatchJob(qt, rt, sc, storedNodeGroupId, externalConstraints, flags, runtimeConstraints, -1, -1, targetObjectSparqlID, null); - } /** * * @param qt @@ -446,7 +395,7 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql * @param targetObjectSparqlID * @throws Exception */ - public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, String storedNodeGroupId, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID, String pruneToColumn) throws Exception{ + public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, String storedNodeGroupId, JSONObject externalConstraints, QueryFlags flags, JSONArray runtimeConstraints, int limitOverride, int offsetOverride, String targetObjectSparqlID) throws Exception{ // get the node group from the remote store TableResultSet trs = this.storeClient.executeGetNodeGroupById(storedNodeGroupId); @@ -491,7 +440,7 @@ public void dispatchJob(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, Sparql } // dispatch the job itself - this.dispatchJob(qt, rt, conn, ng, externalConstraints, flags, runtimeConstraints, limitOverride, offsetOverride, targetObjectSparqlID, pruneToColumn); + this.dispatchJob(qt, rt, conn, ng, externalConstraints, flags, runtimeConstraints, limitOverride, offsetOverride, targetObjectSparqlID); } public URL[] dispatchJobSynchronous(AutoGeneratedQueryTypes qt, SparqlResultTypes rt, SparqlConnection sc, String storedNodeGroupId, JSONObject externalConstraints, JSONArray runtimeConstraints, String targetObjectSparqlID) throws Exception { diff --git a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/client/NodeGroupExecutionClient.java b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/client/NodeGroupExecutionClient.java index 30e503e91..5d353c3c2 100644 --- a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/client/NodeGroupExecutionClient.java +++ b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/api/nodeGroupExecution/client/NodeGroupExecutionClient.java @@ -82,7 +82,6 @@ public class NodeGroupExecutionClient extends SharedIngestNgeClient { private static final String JSON_KEY_RUNTIME_CONSTRAINTS = "runtimeConstraints"; private static final String JSON_KEY_EDC_CONSTRAINTS = "externalDataConnectionConstraints"; private static final String JSON_KEY_FLAGS = "flags"; - private static final String JSON_KEY_PRUNE_TO_COLUMN = "pruneToColumn"; // service mapping private static final String mappingPrefix = "/nodeGroupExecution"; @@ -518,13 +517,12 @@ public Table execDispatchSelectByIdToTable(String nodegroupID, SparqlConnection * @param runtimeConstraintsJson * @param limitOverride * @param offsetOverride - * @param pruneToColumn * @return * @throws Exception */ - public Table execDispatchByIdToTable(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride, String pruneToColumn) throws Exception{ + public Table execDispatchByIdToTable(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride) throws Exception{ // dispatch the job - String jobId = this.dispatchByIdToJobId(nodegroupID, overrideConn, edcConstraintsJson, flagsJson, runtimeConstraintsJson, limitOverride, offsetOverride, pruneToColumn); + String jobId = this.dispatchByIdToJobId(nodegroupID, overrideConn, edcConstraintsJson, flagsJson, runtimeConstraintsJson, limitOverride, offsetOverride); try { return this.waitForJobAndGetTable(jobId); @@ -1638,12 +1636,11 @@ public Table getRuntimeConstraintsByNodeGroupID(String nodegroupID) throws Excep * @param runtimeConstraintsJson * @param limitOverride * @param offsetOverride - * @param pruneToColumn * @return String jobId * @throws Exception */ - public String dispatchByIdToJobId(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride, String pruneToColumn) throws Exception{ - SimpleResultSet ret = this.execDispatchById(nodegroupID, overrideConn, edcConstraintsJson, flagsJson, runtimeConstraintsJson, limitOverride, offsetOverride, pruneToColumn); + public String dispatchByIdToJobId(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride) throws Exception{ + SimpleResultSet ret = this.execDispatchById(nodegroupID, overrideConn, edcConstraintsJson, flagsJson, runtimeConstraintsJson, limitOverride, offsetOverride); return ret.getResult("JobId"); } @@ -1663,7 +1660,7 @@ public String dispatchByIdToJobId(String nodegroupID, SparqlConnection overrideC } /** - * Raw call to launch a select query: version without query flags or pruneToColumn + * Raw call to launch a select query: version without query flags * @param nodegroupID * @param overrideConn * @param edcConstraintsJson @@ -1672,22 +1669,10 @@ public String dispatchByIdToJobId(String nodegroupID, SparqlConnection overrideC * @throws Exception */ public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray runtimeConstraintsJson) throws Exception{ - return this.execDispatchById(nodegroupID, overrideConn, edcConstraintsJson, null, runtimeConstraintsJson, -1, -1, null); + return this.execDispatchById(nodegroupID, overrideConn, edcConstraintsJson, null, runtimeConstraintsJson, -1, -1); } - /** - * Raw call to launch a select query: version without pruneToColumn - * @param nodegroupID - * @param overrideConn - * @param edcConstraintsJson - * @param flagsJson - * @param runtimeConstraintsJson - * @return - * @throws Exception - */ - public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride) throws Exception{ - return this.execDispatchById(nodegroupID, overrideConn, edcConstraintsJson, flagsJson, runtimeConstraintsJson, limitOverride, offsetOverride, null); - } + /** * Raw call to launch a select query @@ -1698,12 +1683,11 @@ public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection ove * @param runtimeConstraintsJson * @param limitOverride * @param offsetOverride - * @param pruneToColumn * @return SimpleResultSet containing "JobId" * @throws Exception */ @SuppressWarnings("unchecked") - public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride, String pruneToColumn) throws Exception{ + public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection overrideConn, JSONObject edcConstraintsJson, JSONArray flagsJson, JSONArray runtimeConstraintsJson, int limitOverride, int offsetOverride) throws Exception{ SimpleResultSet retval = null; conf.setServiceEndpoint(mappingPrefix + dispatchByIdEndpoint); @@ -1716,8 +1700,6 @@ public SimpleResultSet execDispatchById(String nodegroupID, SparqlConnection ove this.parametersJSON.put(JSON_KEY_EDC_CONSTRAINTS, edcConstraintsJson == null ? null : edcConstraintsJson.toJSONString()); this.parametersJSON.put(JSON_KEY_FLAGS, flagsJson == null ? null : flagsJson.toJSONString()); this.parametersJSON.put(JSON_KEY_RUNTIME_CONSTRAINTS, runtimeConstraintsJson == null ? null : runtimeConstraintsJson.toJSONString()); - if (pruneToColumn != null) - this.parametersJSON.put(JSON_KEY_PRUNE_TO_COLUMN, pruneToColumn); try{ LocalLogger.logToStdErr("sending executeDispatchById request"); diff --git a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/asynchronousQuery/AsynchronousNodeGroupBasedQueryDispatcher.java b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/asynchronousQuery/AsynchronousNodeGroupBasedQueryDispatcher.java index 8ac77eda0..7954dd3d5 100644 --- a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/asynchronousQuery/AsynchronousNodeGroupBasedQueryDispatcher.java +++ b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/asynchronousQuery/AsynchronousNodeGroupBasedQueryDispatcher.java @@ -47,7 +47,7 @@ * Base class for dispatchers. */ public abstract class AsynchronousNodeGroupBasedQueryDispatcher { - private String pruneToColumn; + private String pruneToColumn = null; protected NodeGroup queryNodeGroup; protected OntologyInfoClient oInfoClient; @@ -335,6 +335,10 @@ public JobTracker getJobTracker() { return this.jobTracker; } + /** + * Add column name for prune feature (prune table to single unique column) + * @param pruneToColumn - column name or null + */ public void addPruneToColumn(String pruneToColumn) { this.pruneToColumn = pruneToColumn; diff --git a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/QueryFlags.java b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/QueryFlags.java index 2c669f0da..783f61c89 100644 --- a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/QueryFlags.java +++ b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/QueryFlags.java @@ -1,5 +1,8 @@ package com.ge.research.semtk.sparqlX.dispatch; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.Charset; import java.util.HashSet; import org.json.simple.JSONArray; @@ -8,6 +11,8 @@ public class QueryFlags { // NOTE: query executors and generators and closed-source libraries // may define additional custom flags. Use a clever scheme to avoid collisions. public static final String FLAG_UNOPTIONALIZE_CONSTRAINED = "UNOPTIONALIZE_CONSTRAINED"; + public static final String PRUNE_TO_COL = "PRUNE_TO_COL"; + private static final String DELIM = ":"; HashSet flags = new HashSet(); @@ -18,6 +23,10 @@ public QueryFlags(String flag) throws Exception { this.set(flag); } + public QueryFlags(String flag, String param) throws Exception { + this.set(flag + DELIM + param); + } + public QueryFlags(String [] flags) throws Exception { for (String f : flags) { this.set(f); @@ -45,11 +54,26 @@ public boolean isEmpty() { return this.flags.isEmpty(); } - public void set (String flagVal) { + public void set(String flagVal) { this.flags.add(flagVal); } + + public void set(String flagVal, String param) { + this.flags.add(flagVal + DELIM + URLEncoder.encode(param, Charset.defaultCharset())); + } + public boolean isSet(String flagVal) { - return this.flags.contains(flagVal); + for (String k : this.flags) + if (k.equals(flagVal) || k.startsWith(flagVal + DELIM)) + return true; + return false; + } + + public String get(String flagVal) { + for (String k : this.flags) + if (k.startsWith(flagVal + DELIM)) + return URLDecoder.decode(k.split(DELIM)[1], Charset.defaultCharset()); + return null; } public JSONArray toJson() { diff --git a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/client/DispatchRestClient.java b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/client/DispatchRestClient.java index de32182c5..c951c6dd2 100644 --- a/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/client/DispatchRestClient.java +++ b/sparqlGraphLibrary/src/main/java/com/ge/research/semtk/sparqlX/dispatch/client/DispatchRestClient.java @@ -72,20 +72,6 @@ public SimpleResultSet executeSelectQueryFromNodeGroup(JSONObject nodeGroupWithC return executeSelectQueryFromNodeGroup(new SparqlGraphJson(nodeGroupWithConnection), externalConstraints, flags); } - /** - * Version without pruneToColumn - * @param sgjson - * @param qt - * @param rt - * @param externalConstraints - * @param flags - * @param targetObjSparqlID - * @return - * @throws Exception - */ - public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTypes qt, SparqlResultTypes rt, JSONObject externalConstraints, QueryFlags flags, String targetObjSparqlID) throws Exception{ - return this.executeQuery(sgjson, qt, rt, externalConstraints, flags, targetObjSparqlID, null); - } /** * Execute a query. @@ -98,7 +84,7 @@ public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTy * @throws Exception */ @SuppressWarnings("unchecked") - public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTypes qt, SparqlResultTypes rt, JSONObject externalConstraints, QueryFlags flags, String targetObjSparqlID, String pruneToColumn) throws Exception{ + public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTypes qt, SparqlResultTypes rt, JSONObject externalConstraints, QueryFlags flags, String targetObjSparqlID) throws Exception{ SimpleResultSet retval = null; @@ -130,10 +116,6 @@ public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTy throw new Exception("Internal error: query type FILTER_CONSTRAINT but targetObjSparqlID is missing"); } - if (pruneToColumn != null) { - this.parametersJSON.put("pruneToColumn", pruneToColumn); - } - try{ retval = SimpleResultSet.fromJson((JSONObject) this.execute()); retval.throwExceptionIfUnsuccessful(); @@ -147,7 +129,6 @@ public SimpleResultSet executeQuery(SparqlGraphJson sgjson, AutoGeneratedQueryTy this.parametersJSON.remove("queryType"); this.parametersJSON.remove("resultType"); this.parametersJSON.remove("targetObjectSparqlID"); - this.parametersJSON.remove("pruneToColumn", pruneToColumn); } diff --git a/sparqlGraphLibrary/src/test/java/com/ge/research/semtk/api/nodeGroupExecution/client/test/NodeGroupExecutionClientTest_IT.java b/sparqlGraphLibrary/src/test/java/com/ge/research/semtk/api/nodeGroupExecution/client/test/NodeGroupExecutionClientTest_IT.java index 2e1f78d5b..44929102e 100755 --- a/sparqlGraphLibrary/src/test/java/com/ge/research/semtk/api/nodeGroupExecution/client/test/NodeGroupExecutionClientTest_IT.java +++ b/sparqlGraphLibrary/src/test/java/com/ge/research/semtk/api/nodeGroupExecution/client/test/NodeGroupExecutionClientTest_IT.java @@ -39,6 +39,7 @@ import com.ge.research.semtk.resultSet.Table; import com.ge.research.semtk.resultSet.TableResultSet; import com.ge.research.semtk.sparqlX.SparqlResultTypes; +import com.ge.research.semtk.sparqlX.dispatch.QueryFlags; import com.ge.research.semtk.test.IntegrationTestUtility; import com.ge.research.semtk.test.TestGraph; import com.ge.research.semtk.utility.Utility; @@ -181,13 +182,15 @@ public void testSelectByNodegroupId() throws Exception { assertEquals("Select returned wrong number of rows", 4, tab.getNumRows()); // test with pruneToColumn - tab = nodeGroupExecutionClient.execDispatchByIdToTable(ID, NodeGroupExecutor.get_USE_NODEGROUP_CONN(), null, null, null, -1, -1, "CellId"); + JSONArray flags = (new QueryFlags(QueryFlags.PRUNE_TO_COL, "CellId")).toJson(); + tab = nodeGroupExecutionClient.execDispatchByIdToTable(ID, NodeGroupExecutor.get_USE_NODEGROUP_CONN(), null, flags, null, -1, -1); assertEquals("More than one column returned", 1, tab.getNumColumns()); assertTrue("Wrong column returned: " + tab.getColumnNames()[0], tab.getColumnNames()[0].equals("CellId")); // test with pruneToColumn try { - tab = nodeGroupExecutionClient.execDispatchByIdToTable(ID, NodeGroupExecutor.get_USE_NODEGROUP_CONN(), null, null, null, -1, -1, "BAD_COL"); + flags = (new QueryFlags(QueryFlags.PRUNE_TO_COL, "BAD_COL")).toJson(); + tab = nodeGroupExecutionClient.execDispatchByIdToTable(ID, NodeGroupExecutor.get_USE_NODEGROUP_CONN(), null, flags, null, -1, -1); fail("Missing exception on bad pruneToColumn column name"); } catch (Exception e) { assertTrue("Wrong exception on bad pruneToColumn name" + e.getMessage(), e.getMessage().contains("BAD_COL"));