From 58c89ea1f45ffd4a9f812ae1c18e93b636737f55 Mon Sep 17 00:00:00 2001 From: Gurjeet Bedi Date: Wed, 14 Feb 2018 13:56:58 -0500 Subject: [PATCH] For supporting t_k query Passing queryparameters from GET Issue-ID: AAI-482 Change-Id: I7db51c6549fe5f7e4d61ad96121e7da3a57ff325 Signed-off-by: Gurjeet Bedi --- src/main/java/org/onap/crud/dao/GraphDao.java | 12 ++++-- .../java/org/onap/crud/dao/champ/ChampDao.java | 50 ++++++++++++++++------ .../crud/service/AbstractGraphDataService.java | 14 +++--- .../crud/service/CrudAsyncGraphDataService.java | 7 +-- .../onap/crud/service/CrudGraphDataService.java | 8 ++-- .../org/onap/crud/service/CrudRestService.java | 12 +++++- 6 files changed, 71 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/onap/crud/dao/GraphDao.java b/src/main/java/org/onap/crud/dao/GraphDao.java index 283e1a1..3ae8266 100644 --- a/src/main/java/org/onap/crud/dao/GraphDao.java +++ b/src/main/java/org/onap/crud/dao/GraphDao.java @@ -36,7 +36,7 @@ public interface GraphDao { public Vertex getVertex(String id, String version) throws CrudException; - public Vertex getVertex(String id, String type, String version) throws CrudException; + public Vertex getVertex(String id, String type, String version, Map queryParams) throws CrudException; /** * Retrieve all of the edges which are incident to the vertex with the @@ -44,10 +44,12 @@ public interface GraphDao { * * @param id * - The unique identifier of the vertex to retrieve the edges for. + * @param queryParams + * - query parameters to be passed * @return - A collection of edges. * @throws CrudException */ - public List getVertexEdges(String id) throws CrudException; + public List getVertexEdges(String id, Map queryParams) throws CrudException; /** * Retrieve a collection of {@link Vertex} objects which match the supplied @@ -83,10 +85,14 @@ public interface GraphDao { * * @param id * - The unique identifier for the Edge to be retrieved. + * @param type + * - The type that we want to retrieve. + * @param queryParams + * - query parameters to be passed * @return - The Edge corresponding to the specified identifier. * @throws CrudException */ - public Edge getEdge(String id, String type) throws CrudException; + public Edge getEdge(String id, String type, Map queryParams) throws CrudException; /** * Retrieve a collection of {@link Edge} objects with a given type and which diff --git a/src/main/java/org/onap/crud/dao/champ/ChampDao.java b/src/main/java/org/onap/crud/dao/champ/ChampDao.java index 7174bfc..5c6dbbe 100644 --- a/src/main/java/org/onap/crud/dao/champ/ChampDao.java +++ b/src/main/java/org/onap/crud/dao/champ/ChampDao.java @@ -120,9 +120,17 @@ public class ChampDao implements GraphDao { } @Override - public Vertex getVertex(String id, String type, String version) throws CrudException { - String url = baseObjectUrl + "/" + id; - OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); + public Vertex getVertex(String id, String type, String version, Map queryParams) throws CrudException { + StringBuilder strBuild = new StringBuilder(baseObjectUrl); + strBuild.append("/"); + strBuild.append(id); + if(queryParams != null && !queryParams.isEmpty()) + { + strBuild.append("?"); + strBuild.append(URLEncodedUtils.format(convertToNameValuePair(queryParams), Charset.defaultCharset())); + } + + OperationResult getResult = client.get(strBuild.toString(), createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { Vertex vert = Vertex.fromJson(getResult.getResult(), version); @@ -143,11 +151,18 @@ public class ChampDao implements GraphDao { } @Override - public List getVertexEdges(String id) throws CrudException { - String url = baseObjectUrl + "/relationships/" + id; - - OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); + public List getVertexEdges(String id, Map queryParams) throws CrudException { + StringBuilder strBuild = new StringBuilder(baseObjectUrl); + strBuild.append("/relationships/"); + strBuild.append(id); + if(queryParams != null && !queryParams.isEmpty()) + { + strBuild.append("?"); + strBuild.append(URLEncodedUtils.format(convertToNameValuePair(queryParams), Charset.defaultCharset())); + } + OperationResult getResult = client.get(strBuild.toString(), createHeader(), MediaType.APPLICATION_JSON_TYPE); + if (getResult.getResultCode() == 200) { return champGson.fromJson(getResult.getResult(), new TypeToken>() { }.getType()); @@ -186,10 +201,17 @@ public class ChampDao implements GraphDao { } @Override - public Edge getEdge(String id, String type) throws CrudException { - String url = baseRelationshipUrl + "/" + id; - OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); - + public Edge getEdge(String id, String type, Map queryParams) throws CrudException { + StringBuilder strBuild = new StringBuilder(baseRelationshipUrl); + strBuild.append("/"); + strBuild.append(id); + if(queryParams != null && !queryParams.isEmpty()) + { + strBuild.append("?"); + strBuild.append(URLEncodedUtils.format(convertToNameValuePair(queryParams), Charset.defaultCharset())); + } + OperationResult getResult = client.get(strBuild.toString(), createHeader(), MediaType.APPLICATION_JSON_TYPE); + if (getResult.getResultCode() == 200) { Edge edge = Edge.fromJson(getResult.getResult()); @@ -291,8 +313,8 @@ public class ChampDao implements GraphDao { String url = baseRelationshipUrl; // Try requests to ensure source and target exist in Champ - Vertex dbSource = getVertex(source.getId().get(), source.getType(), version); - Vertex dbTarget = getVertex(target.getId().get(), target.getType(), version); + Vertex dbSource = getVertex(source.getId().get(), source.getType(), version, new HashMap()); + Vertex dbTarget = getVertex(target.getId().get(), target.getType(), version, new HashMap()); Edge.Builder insertEdgeBuilder = new Edge.Builder(type).source(dbSource).target(dbTarget); properties.forEach(insertEdgeBuilder::property); @@ -557,7 +579,7 @@ public class ChampDao implements GraphDao { } // https://stackoverflow.com/questions/26942330/convert-mapstring-string-to-listnamevaluepair-is-this-the-most-efficient - private List convertToNameValuePair(Map pairs) { + private List convertToNameValuePair(Map pairs) { List nvpList = new ArrayList<>(pairs.size()); pairs.forEach((key, value) -> nvpList.add(new BasicNameValuePair(key, value.toString()))); diff --git a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java index 5154308..5a89220 100644 --- a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java +++ b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java @@ -50,10 +50,10 @@ public abstract class AbstractGraphDataService { public AbstractGraphDataService() throws CrudException { CrudServiceUtil.loadModels(); } - - public String getEdge(String version, String id, String type) throws CrudException { + + public String getEdge(String version, String id, String type, Map queryParams) throws CrudException { RelationshipSchemaValidator.validateType(version, type); - Edge edge = daoForGet.getEdge(id, type); + Edge edge = daoForGet.getEdge(id, type, queryParams); return CrudResponseBuilder.buildGetEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, edge), version); } @@ -64,10 +64,10 @@ public abstract class AbstractGraphDataService { return CrudResponseBuilder.buildGetEdgesResponse(items, version); } - public String getVertex(String version, String id, String type) throws CrudException { + public String getVertex(String version, String id, String type, Map queryParams) throws CrudException { type = OxmModelValidator.resolveCollectionType(version, type); - Vertex vertex = daoForGet.getVertex(id, type, version); - List edges = daoForGet.getVertexEdges(id); + Vertex vertex = daoForGet.getVertex(id, type, version, queryParams); + List edges = daoForGet.getVertexEdges(id, queryParams); return CrudResponseBuilder.buildGetVertexResponse(OxmModelValidator.validateOutgoingPayload(version, vertex), edges, version); } @@ -165,7 +165,7 @@ public abstract class AbstractGraphDataService { vertexPayload.setProperties(CrudServiceUtil.mergeHeaderInFoToPayload(vertexPayload.getProperties(), headers, false)); - Vertex existingVertex = dao.getVertex(vertexPayload.getId(), OxmModelValidator.resolveCollectionType(version, vertexPayload.getType()), version); + Vertex existingVertex = dao.getVertex(vertexPayload.getId(), OxmModelValidator.resolveCollectionType(version, vertexPayload.getType()), version, new HashMap()); Vertex validatedVertex = OxmModelValidator.validateIncomingPatchPayload(vertexPayload.getId(), version, vertexPayload.getType(), vertexPayload.getProperties(), existingVertex); Vertex persistedVertex = updateBulkVertex(validatedVertex, vertexPayload.getId(), version, txId); diff --git a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java index 5e264b5..eb8bb75 100644 --- a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java +++ b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java @@ -48,6 +48,7 @@ import org.onap.schema.OxmModelValidator; import org.onap.schema.RelationshipSchemaValidator; import java.text.SimpleDateFormat; +import java.util.HashMap; import java.util.Timer; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; @@ -270,7 +271,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService { public String patchVertex(String version, String id, String type, VertexPayload payload) throws CrudException { Vertex existingVertex - = dao.getVertex(id, OxmModelValidator.resolveCollectionType(version, type), version); + = dao.getVertex(id, OxmModelValidator.resolveCollectionType(version, type), version, new HashMap()); Vertex patchedVertex = OxmModelValidator.validateIncomingPatchPayload(id, version, type, payload.getProperties(), existingVertex); @@ -327,7 +328,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService { public String updateEdge(String version, String id, String type, EdgePayload payload) throws CrudException { - Edge edge = dao.getEdge(id, type); + Edge edge = dao.getEdge(id, type, new HashMap()); Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload); GraphEvent event = GraphEvent.builder(GraphEventOperation.UPDATE) @@ -349,7 +350,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService { public String patchEdge(String version, String id, String type, EdgePayload payload) throws CrudException { - Edge edge = dao.getEdge(id, type); + Edge edge = dao.getEdge(id, type, new HashMap()); Edge patchedEdge = RelationshipSchemaValidator.validateIncomingPatchPayload(edge, version, payload); GraphEvent event = GraphEvent.builder(GraphEventOperation.UPDATE) diff --git a/src/main/java/org/onap/crud/service/CrudGraphDataService.java b/src/main/java/org/onap/crud/service/CrudGraphDataService.java index 3eeac3f..4c8c6a8 100644 --- a/src/main/java/org/onap/crud/service/CrudGraphDataService.java +++ b/src/main/java/org/onap/crud/service/CrudGraphDataService.java @@ -24,6 +24,8 @@ package org.onap.crud.service; +import java.util.HashMap; + import org.onap.crud.dao.GraphDao; import org.onap.crud.entity.Edge; @@ -84,7 +86,7 @@ public class CrudGraphDataService extends AbstractGraphDataService { } public String patchVertex(String version, String id, String type, VertexPayload payload) throws CrudException { - Vertex existingVertex = dao.getVertex(id, OxmModelValidator.resolveCollectionType(version, type), version); + Vertex existingVertex = dao.getVertex(id, OxmModelValidator.resolveCollectionType(version, type), version, new HashMap()); Vertex vertex = OxmModelValidator.validateIncomingPatchPayload(id, version, type, payload.getProperties(), existingVertex); return updateVertex(version, vertex); @@ -103,7 +105,7 @@ public class CrudGraphDataService extends AbstractGraphDataService { } public String updateEdge(String version, String id, String type, EdgePayload payload) throws CrudException { - Edge edge = dao.getEdge(id, type); + Edge edge = dao.getEdge(id, type, new HashMap()); Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload); return updateEdge(version, validatedEdge); } @@ -115,7 +117,7 @@ public class CrudGraphDataService extends AbstractGraphDataService { } public String patchEdge(String version, String id, String type, EdgePayload payload) throws CrudException { - Edge edge = dao.getEdge(id, type); + Edge edge = dao.getEdge(id, type, new HashMap()); Edge patchedEdge = RelationshipSchemaValidator.validateIncomingPatchPayload(edge, version, payload); return updateEdge(version, patchedEdge); diff --git a/src/main/java/org/onap/crud/service/CrudRestService.java b/src/main/java/org/onap/crud/service/CrudRestService.java index b3c5e7a..69f2186 100644 --- a/src/main/java/org/onap/crud/service/CrudRestService.java +++ b/src/main/java/org/onap/crud/service/CrudRestService.java @@ -96,10 +96,14 @@ public class CrudRestService { logger.debug("Incoming request..." + content); Response response = null; + Map params = new HashMap(); + for (Map.Entry> e : uriInfo.getQueryParameters().entrySet()) { + params.put(e.getKey(), e.getValue().get(0)); + } try { if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME, headers)) { - String result = graphDataService.getVertex(version, id, type); + String result = graphDataService.getVertex(version, id, type, params); response = Response.status(Status.OK).entity(result).type(mediaType).build(); } else { response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build(); @@ -174,11 +178,15 @@ public class CrudRestService { logger.debug("Incoming request..." + content); Response response = null; + Map params = new HashMap(); + for (Map.Entry> e : uriInfo.getQueryParameters().entrySet()) { + params.put(e.getKey(), e.getValue().get(0)); + } try { if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME, headers)) { - String result = graphDataService.getEdge(version, id, type); + String result = graphDataService.getEdge(version, id, type, params); response = Response.status(Status.OK).entity(result).type(mediaType).build(); } else { response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build(); -- 2.16.6