X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fcrud%2Fdao%2Fchamp%2FChampDao.java;h=554b9fa3cf2382bd37db15fd5b7929add945bb78;hb=0c40bcde9facc109ceb8dabb91156df2b4fb4129;hp=ecbac362f10602a7f8d1ad502348a37020ba00cc;hpb=a0e716dc093cd8a4a4ec8aaca7bc1635e518527a;p=aai%2Fgizmo.git 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 ecbac36..554b9fa 100644 --- a/src/main/java/org/onap/crud/dao/champ/ChampDao.java +++ b/src/main/java/org/onap/crud/dao/champ/ChampDao.java @@ -1,16 +1,15 @@ /** * ============LICENSE_START======================================================= - * Gizmo + * org.onap.aai * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. - * Copyright © 2017 Amdocs - * All rights reserved. + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 Amdocs * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,71 +17,67 @@ * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.crud.dao.champ; -import net.dongliu.gson.GsonJava8TypeAdapterFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; - +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; import org.eclipse.jetty.util.security.Password; -import org.onap.aai.logging.LoggingContext; -import org.onap.aai.cl.api.Logger; -import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.cl.mdc.MdcContext; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.restclient.client.RestClient; +import org.onap.aai.restclient.enums.RestAuthenticationMode; import org.onap.crud.dao.GraphDao; import org.onap.crud.entity.Edge; import org.onap.crud.entity.Vertex; import org.onap.crud.exception.CrudException; import org.onap.crud.util.CrudServiceConstants; -import org.onap.aai.restclient.client.OperationResult; -import org.onap.aai.restclient.client.RestClient; -import org.onap.aai.restclient.enums.RestAuthenticationMode; import org.slf4j.MDC; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import net.dongliu.gson.GsonJava8TypeAdapterFactory; public class ChampDao implements GraphDao { - private RestClient client; - private String baseObjectUrl; - private String baseRelationshipUrl; - private String baseTransactionUrl; - - private static final String HEADER_FROM_APP = "X-FromAppId"; - private static final String HEADER_TRANS_ID = "X-TransactionId"; - private static final String FROM_APP_NAME = "Gizmo"; - private static final String OBJECT_SUB_URL = "objects"; - private static final String RELATIONSHIP_SUB_URL = "relationships"; - private static final String TRANSACTION_SUB_URL = "transaction"; - - private Logger logger = LoggerFactory.getInstance().getLogger(ChampDao.class.getName()); + protected RestClient client; + protected String baseObjectUrl; + protected String baseRelationshipUrl; + protected String baseTransactionUrl; + + protected static final String HEADER_FROM_APP = "X-FromAppId"; + protected static final String HEADER_TRANS_ID = "X-TransactionId"; + protected static final String FROM_APP_NAME = "Gizmo"; + protected static final String OBJECT_SUB_URL = "objects"; + protected static final String RELATIONSHIP_SUB_URL = "relationships"; + protected static final String TRANSACTION_SUB_URL = "transaction"; // We use a custom vertex serializer for champ because it expects "key" // instead of "id" - private static final Gson champGson = new GsonBuilder() + protected static final Gson champGson = new GsonBuilder() .registerTypeAdapterFactory(new GsonJava8TypeAdapterFactory()) .registerTypeAdapter(Vertex.class, new ChampVertexSerializer()) .registerTypeAdapter(Edge.class, new ChampEdgeSerializer()).create(); + public ChampDao() { + } + public ChampDao(String champUrl, String certPassword) { try { + String deobfuscatedCertPassword = certPassword.startsWith("OBF:")?Password.deobfuscate(certPassword):certPassword; client = new RestClient().authenticationMode(RestAuthenticationMode.SSL_CERT).validateServerHostname(false) .validateServerCertChain(false).clientCertFile(CrudServiceConstants.CRD_CHAMP_AUTH_FILE) - .clientCertPassword(Password.deobfuscate(certPassword)); + .clientCertPassword(deobfuscatedCertPassword); baseObjectUrl = champUrl + OBJECT_SUB_URL; baseRelationshipUrl = champUrl + RELATIONSHIP_SUB_URL; @@ -94,68 +89,100 @@ public class ChampDao implements GraphDao { } } + public ChampDao(RestClient client, String baseObjectUrl, String baseRelationshipUrl, String baseTransactionUrl) { + this.client = client; + this.baseObjectUrl = baseObjectUrl; + this.baseRelationshipUrl = baseRelationshipUrl; + this.baseTransactionUrl = baseTransactionUrl; + } + @Override - public Vertex getVertex(String id) throws CrudException { + public Vertex getVertex(String id, String version) throws CrudException { String url = baseObjectUrl + "/" + id; OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { - return Vertex.fromJson(getResult.getResult()); + return Vertex.fromJson(getResult.getResult(), version); } else { // We didn't find a vertex with the supplied id, so just throw an // exception. - throw new CrudException("No vertex with id " + id + " found in graph", - javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No vertex with id " + id + " found in graph"); } } @Override - public Vertex getVertex(String id, String type) throws CrudException { - String url = baseObjectUrl + "/" + id; - OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); + public OperationResult 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()); + Vertex vert = Vertex.fromJson(getResult.getResult(), version); if (!vert.getType().equalsIgnoreCase(type)) { // We didn't find a vertex with the supplied type, so just throw an // exception. - throw new CrudException("No vertex with id " + id + "and type " + type + " found in graph", + throw new CrudException("No vertex with id " + id + " and type " + type + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); } - return vert; + return getResult; } else { // We didn't find a vertex with the supplied id, so just throw an // exception. - throw new CrudException("No vertex with id " + id + " found in graph", - javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No vertex with id " + id + " found in graph"); } } @Override - public List getVertexEdges(String id) throws CrudException { - String url = baseObjectUrl + "/relationships/" + id; + public List getVertexEdges(String id, Map queryParams, String txId) throws CrudException { + StringBuilder strBuild = new StringBuilder(baseObjectUrl); + strBuild.append("/relationships/"); + strBuild.append(id); + + Map queryParamsCopy = null; + if (queryParams != null) { + queryParamsCopy = new HashMap(queryParams); + } + else { + queryParamsCopy = new HashMap(); + } - OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); + if (txId != null) { + queryParamsCopy.put("transactionId", txId); + } - if (getResult.getResultCode() == 200) { - return champGson.fromJson(getResult.getResult(), new TypeToken>() { - }.getType()); - } else { - // We didn't find a vertex with the supplied id, so just throw an - // exception. - throw new CrudException("No vertex with id " + id + " found in graph", - javax.ws.rs.core.Response.Status.NOT_FOUND); - } + if (!queryParamsCopy.isEmpty()) + { + strBuild.append("?"); + strBuild.append(URLEncodedUtils.format(convertToNameValuePair(queryParamsCopy), 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()); + } else { + // We didn't find a vertex with the supplied id, so just throw an + // exception. + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No vertex with id " + id + " found in graph"); + } } @Override - public List getVertices(String type, Map filter) throws CrudException { - return getVertices(type, filter, new HashSet()); + public OperationResult getVertices(String type, Map filter, String version) throws CrudException { + return getVertices(type, filter, new HashSet(), version); } @Override - public List getVertices(String type, Map filter, HashSet properties) throws CrudException { + public OperationResult getVertices(String type, Map filter, Set properties, String version) throws CrudException { filter.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); List queryParams = convertToNameValuePair(filter); @@ -166,20 +193,25 @@ public class ChampDao implements GraphDao { OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { - return champGson.fromJson(getResult.getResult(), new TypeToken>() { - }.getType()); + return getResult; } else { // We didn't find a vertex with the supplied id, so just throw an // exception. - throw new CrudException("No vertices found in graph for given filters", - javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No vertices found in graph for given filters"); } } @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 OperationResult 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()); @@ -187,36 +219,35 @@ public class ChampDao implements GraphDao { if (!edge.getType().equalsIgnoreCase(type)) { // We didn't find an edge with the supplied type, so just throw an // exception. - throw new CrudException("No edge with id " + id + "and type " + type + " found in graph", + throw new CrudException("No edge with id " + id + " and type " + type + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); } - return edge; + return getResult; } else { // We didn't find a edge with the supplied type, so just throw an // exception. - throw new CrudException("No edge with id " + id + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph"); } } @Override - public List getEdges(String type, Map filter) throws CrudException { + public OperationResult getEdges(String type, Map filter) throws CrudException { String url = baseRelationshipUrl + "/filter" + "?" + URLEncodedUtils.format(convertToNameValuePair(filter), Charset.defaultCharset()); OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { - return champGson.fromJson(getResult.getResult(), new TypeToken>() { - }.getType()); + return getResult; } else { // We didn't find a vertex with the supplied id, so just throw an // exception. - throw new CrudException("No edges found in graph for given filters", javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edges found in graph for given filters"); } } @Override - public Vertex addVertex(String type, Map properties) throws CrudException { + public OperationResult addVertex(String type, Map properties, String version) throws CrudException { String url = baseObjectUrl; // Add the aai_node_type so that AAI can read the data created by gizmo @@ -231,16 +262,16 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) { - return Vertex.fromJson(getResult.getResult()); + return getResult; } else { // We didn't create a vertex with the supplied type, so just throw an // exception. - throw new CrudException("Failed to create vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to create vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public Vertex updateVertex(String id, String type, Map properties) throws CrudException { + public OperationResult updateVertex(String id, String type, Map properties, String version) throws CrudException { String url = baseObjectUrl + "/" + id; // Add the aai_node_type so that AAI can read the data created by gizmo @@ -257,11 +288,11 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) { - return Vertex.fromJson(getResult.getResult()); + return getResult; } else { // We didn't create a vertex with the supplied type, so just throw an // exception. - throw new CrudException("Failed to update vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to update vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @@ -273,17 +304,19 @@ public class ChampDao implements GraphDao { if (getResult.getResultCode() != Response.Status.OK.getStatusCode()) { // We didn't delete a vertex with the supplied id, so just throw an // exception. - throw new CrudException("Failed to delete vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to delete vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public Edge addEdge(String type, Vertex source, Vertex target, Map properties) throws CrudException { + public OperationResult addEdge(String type, Vertex source, Vertex target, Map properties, String version) throws CrudException { String url = baseRelationshipUrl; // Try requests to ensure source and target exist in Champ - Vertex dbSource = getVertex(source.getId().get(), source.getType()); - Vertex dbTarget = getVertex(target.getId().get(), target.getType()); + OperationResult dbSourceOpResult = getVertex(source.getId().get(), source.getType(), version, new HashMap()); + Vertex dbSource = Vertex.fromJson(dbSourceOpResult.getResult(), version); + OperationResult dbTargetOpResult = getVertex(target.getId().get(), target.getType(), version, new HashMap()); + Vertex dbTarget = Vertex.fromJson(dbTargetOpResult.getResult(), version); Edge.Builder insertEdgeBuilder = new Edge.Builder(type).source(dbSource).target(dbTarget); properties.forEach(insertEdgeBuilder::property); @@ -294,16 +327,16 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) { - return Edge.fromJson(getResult.getResult()); + return getResult; } else { // We didn't create an edge with the supplied type, so just throw an // exception. - throw new CrudException("Failed to create edge", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to create edge: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public Edge updateEdge(Edge edge) throws CrudException { + public OperationResult updateEdge(Edge edge) throws CrudException { if (!edge.getId().isPresent()) { throw new CrudException("Unable to identify edge: " + edge.toString(), Response.Status.BAD_REQUEST); } @@ -314,23 +347,23 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) { - return Edge.fromJson(getResult.getResult()); + return getResult; } else { // We didn't create an edge with the supplied type, so just throw an // exception. - throw new CrudException("Failed to update edge", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to update edge: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public void deleteEdge(String id, String type) throws CrudException { + public void deleteEdge(String id) throws CrudException { String url = baseRelationshipUrl + "/" + id; OperationResult getResult = client.delete(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() != 200) { // We didn't find an edge with the supplied type, so just throw an // exception. - throw new CrudException("No edge with id " + id + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph"); } } @@ -378,7 +411,7 @@ public class ChampDao implements GraphDao { String url = baseTransactionUrl + "/" + id; Map> headers = new HashMap<>(); headers.put(HEADER_FROM_APP, Arrays.asList("Gizmo")); - headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(LoggingContext.LoggingField.REQUEST_ID.toString()))); + headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID))); OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE); @@ -386,7 +419,7 @@ public class ChampDao implements GraphDao { } @Override - public Vertex addVertex(String type, Map properties, String txId) throws CrudException { + public Vertex addVertex(String type, Map properties, String version, String txId) throws CrudException { String url = baseObjectUrl + "?transactionId=" + txId; // Add the aai_node_type so that AAI can read the data created by gizmo @@ -401,22 +434,22 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) { - return Vertex.fromJson(getResult.getResult()); + return Vertex.fromJson(getResult.getResult(), version); } else { // We didn't create a vertex with the supplied type, so just throw an // exception. - throw new CrudException("Failed to create vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to create vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public Edge addEdge(String type, Vertex source, Vertex target, Map properties, String txId) + public Edge addEdge(String type, Vertex source, Vertex target, Map properties, String version, String txId) throws CrudException { String url = baseRelationshipUrl + "?transactionId=" + txId; // Try requests to ensure source and target exist in Champ - Vertex dbSource = getVertex(source.getId().get(), source.getType(), txId); - Vertex dbTarget = getVertex(target.getId().get(), target.getType(), txId); + Vertex dbSource = getVertex(source.getId().get(), source.getType(), version, txId); + Vertex dbTarget = getVertex(target.getId().get(), target.getType(), version, txId); Edge.Builder insertEdgeBuilder = new Edge.Builder(type).source(dbSource).target(dbTarget); properties.forEach(insertEdgeBuilder::property); @@ -430,12 +463,12 @@ public class ChampDao implements GraphDao { } else { // We didn't create an edge with the supplied type, so just throw an // exception. - throw new CrudException("Failed to create edge", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to create edge: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @Override - public Vertex updateVertex(String id, String type, Map properties, String txId) throws CrudException { + public Vertex updateVertex(String id, String type, Map properties, String version, String txId) throws CrudException { String url = baseObjectUrl + "/" + id + "?transactionId=" + txId; // Add the aai_node_type so that AAI can read the data created by gizmo @@ -452,11 +485,11 @@ public class ChampDao implements GraphDao { MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) { - return Vertex.fromJson(getResult.getResult()); + return Vertex.fromJson(getResult.getResult(), version); } else { // We didn't create a vertex with the supplied type, so just throw an // exception. - throw new CrudException("Failed to update vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to update vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @@ -468,7 +501,7 @@ public class ChampDao implements GraphDao { if (getResult.getResultCode() != Response.Status.OK.getStatusCode()) { // We didn't delete a vertex with the supplied id, so just throw an // exception. - throw new CrudException("Failed to delete vertex", Response.Status.fromStatusCode(getResult.getResultCode())); + throw new CrudException("Failed to delete vertex: " + getResult.getFailureCause(), Response.Status.fromStatusCode(getResult.getResultCode())); } } @@ -492,63 +525,69 @@ public class ChampDao implements GraphDao { } @Override - public void deleteEdge(String id, String type, String txId) throws CrudException { + public void deleteEdge(String id, String txId) throws CrudException { String url = baseRelationshipUrl + "/" + id + "?transactionId=" + txId; OperationResult getResult = client.delete(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() != 200) { // We didn't find an edge with the supplied type, so just throw an // exception. - throw new CrudException("No edge with id " + id + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph"); } } @Override - public Edge getEdge(String id, String type, String txId) throws CrudException { + public Edge getEdge(String id, String txId) throws CrudException { String url = baseRelationshipUrl + "/" + id + "?transactionId=" + txId; OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { Edge edge = Edge.fromJson(getResult.getResult()); - - if (!edge.getType().equalsIgnoreCase(type)) { - // We didn't find an edge with the supplied type, so just throw an - // exception. - throw new CrudException("No edge with id " + id + "and type " + type + " found in graph", - javax.ws.rs.core.Response.Status.NOT_FOUND); - } return edge; } else { // We didn't find an edge with the supplied id, so just throw an // exception. - throw new CrudException("No edge with id " + id + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph"); } } - public Vertex getVertex(String id, String type, String txId) throws CrudException { + @Override + public Edge getEdge(String id) throws CrudException { + String url = baseRelationshipUrl + "/" + id; + OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); + + if (getResult.getResultCode() == 200) { + Edge edge = Edge.fromJson(getResult.getResult()); + return edge; + } else { + // We didn't find an edge with the supplied id, so just throw an exception. + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph"); + } + } + + public Vertex getVertex(String id, String type, String version, String txId) throws CrudException { String url = baseObjectUrl + "/" + id + "?transactionId=" + txId; OperationResult getResult = client.get(url, createHeader(), MediaType.APPLICATION_JSON_TYPE); if (getResult.getResultCode() == 200) { - Vertex vert = Vertex.fromJson(getResult.getResult()); + Vertex vert = Vertex.fromJson(getResult.getResult(), version); if (!vert.getType().equalsIgnoreCase(type)) { // We didn't find a vertex with the supplied type, so just throw an // exception. - throw new CrudException("No vertex with id " + id + "and type " + type + " found in graph", + throw new CrudException("No vertex with id " + id + " and type " + type + " found in graph", javax.ws.rs.core.Response.Status.NOT_FOUND); } return vert; } else { // We didn't find a vertex with the supplied id, so just throw an // exception. - throw new CrudException("No vertex with id " + id + " found in graph", - javax.ws.rs.core.Response.Status.NOT_FOUND); + throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No vertex with id " + id + " found in graph"); } } // 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()))); @@ -557,18 +596,29 @@ public class ChampDao implements GraphDao { } // https://stackoverflow.com/questions/26942330/convert-mapstring-string-to-listnamevaluepair-is-this-the-most-efficient - private List convertToNameValuePair(String key, HashSet values) { + private List convertToNameValuePair(String k, Set values) { List nvpList = new ArrayList<>(values.size()); - values.forEach((value) -> nvpList.add(new BasicNameValuePair(key, value))); + values.forEach((v) -> nvpList.add(new BasicNameValuePair(k, v))); return nvpList; } - + private Map> createHeader() { Map> headers = new HashMap<>(); headers.put(HEADER_FROM_APP, Arrays.asList(FROM_APP_NAME)); - headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(LoggingContext.LoggingField.REQUEST_ID.toString()))); + headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID))); return headers; } + + private CrudException createErrorException(OperationResult result, javax.ws.rs.core.Response.Status defaultErrorCode , String defaultErrorMsg) + { + CrudException ce = null; + if(result != null) + ce = new CrudException(result.getFailureCause(), Response.Status.fromStatusCode(result.getResultCode())); + else + ce = new CrudException(defaultErrorMsg, defaultErrorCode); + return ce; + } + }