summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openecomp
diff options
context:
space:
mode:
authorBansal, Nitin (nb121v) <nitin.bansal@amdocs.com>2017-11-20 16:02:06 -0500
committerBansal, Nitin (nb121v) <nitin.bansal@amdocs.com>2017-11-20 16:34:16 -0500
commit908b4693e5a0a4c2f323dbf518b35e4620f183a1 (patch)
treecd057c3b4e91f696e116db94d7a3e08c800421a0 /src/main/java/org/openecomp
parent2dd042556f9142fcd525c0277ea21ac3bd828e4f (diff)
Refactor to move from openecomp to onap
Refactor to move from openecomp to onap IssueID: AAI-486 Change-Id: I1d5634739514acf11d5fbdf5e2c7865aaccd864e Signed-off-by: Bansal, Nitin (nb121v) <nitin.bansal@amdocs.com>
Diffstat (limited to 'src/main/java/org/openecomp')
-rw-r--r--src/main/java/org/openecomp/crud/dao/GraphDao.java183
-rw-r--r--src/main/java/org/openecomp/crud/dao/champ/ChampDao.java883
-rw-r--r--src/main/java/org/openecomp/crud/dao/champion/ChampionDao.java623
-rw-r--r--src/main/java/org/openecomp/crud/dao/champion/ChampionEdgeSerializer.java49
-rw-r--r--src/main/java/org/openecomp/crud/dao/champion/ChampionVertexSerializer.java47
-rw-r--r--src/main/java/org/openecomp/crud/entity/Edge.java140
-rw-r--r--src/main/java/org/openecomp/crud/entity/Vertex.java115
-rw-r--r--src/main/java/org/openecomp/crud/event/GraphEvent.java235
-rw-r--r--src/main/java/org/openecomp/crud/event/GraphEventEdge.java212
-rw-r--r--src/main/java/org/openecomp/crud/event/GraphEventVertex.java181
-rw-r--r--src/main/java/org/openecomp/crud/exception/CrudException.java62
-rw-r--r--src/main/java/org/openecomp/crud/logging/CrudServiceMsgs.java87
-rw-r--r--src/main/java/org/openecomp/crud/logging/LoggingUtil.java82
-rw-r--r--src/main/java/org/openecomp/crud/parser/CrudResponseBuilder.java212
-rw-r--r--src/main/java/org/openecomp/crud/service/AaiResourceService.java533
-rw-r--r--src/main/java/org/openecomp/crud/service/BulkPayload.java124
-rw-r--r--src/main/java/org/openecomp/crud/service/CrudGraphDataService.java301
-rw-r--r--src/main/java/org/openecomp/crud/service/CrudRestService.java784
-rw-r--r--src/main/java/org/openecomp/crud/service/EdgePayload.java115
-rw-r--r--src/main/java/org/openecomp/crud/service/JaxrsEchoService.java63
-rw-r--r--src/main/java/org/openecomp/crud/service/VertexPayload.java117
-rw-r--r--src/main/java/org/openecomp/crud/util/CrudJaxbTransformation.java92
-rw-r--r--src/main/java/org/openecomp/crud/util/CrudProperties.java77
-rw-r--r--src/main/java/org/openecomp/crud/util/CrudServiceConstants.java54
-rw-r--r--src/main/java/org/openecomp/crud/util/CrudServiceUtil.java63
-rw-r--r--src/main/java/org/openecomp/crud/util/FileWatcher.java48
-rw-r--r--src/main/java/org/openecomp/schema/OxmModelValidator.java331
-rw-r--r--src/main/java/org/openecomp/schema/RelationshipSchema.java108
-rw-r--r--src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java263
-rw-r--r--src/main/java/org/openecomp/schema/RelationshipSchemaValidator.java352
30 files changed, 0 insertions, 6536 deletions
diff --git a/src/main/java/org/openecomp/crud/dao/GraphDao.java b/src/main/java/org/openecomp/crud/dao/GraphDao.java
deleted file mode 100644
index 7e8c043..0000000
--- a/src/main/java/org/openecomp/crud/dao/GraphDao.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.dao;
-
-import java.util.List;
-import java.util.Map;
-
-import org.openecomp.crud.entity.Edge;
-
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-
-public interface GraphDao {
-
- public Vertex getVertex(String id) throws CrudException;
-
- public Vertex getVertex(String id, String type) throws CrudException;
-
- /**
- * Retrieve all of the edges which are incident to the vertex with the
- * specified identifier.
- *
- * @param id
- * - The unique identifier of the vertex to retrieve the edges for.
- * @return - A collection of edges.
- * @throws CrudException
- */
- public List<Edge> getVertexEdges(String id) throws CrudException;
-
- /**
- * Retrieve a collection of {@link Vertex} objects which match the supplied
- * type label and filter properties.
- *
- * @param type
- * - The vertex type that we want to retrieve.
- * @param filter
- * - The parameters to filter our results by.
- * @return - A collection of vertices.
- * @throws CrudException
- */
- public List<Vertex> getVertices(String type, Map<String, Object> filter) throws CrudException;
-
- /**
- * Retrieve an {@link Edge} from the graph database by specifying its unique
- * identifier.
- *
- * @param id
- * - The unique identifier for the Edge to be retrieved.
- * @return - The Edge corresponding to the specified identifier.
- * @throws CrudException
- */
- public Edge getEdge(String id, String type) throws CrudException;
-
- /**
- * Retrieve a collection of {@link Edge} objects with a given type and which
- * match a set of supplied filter parameters.
- *
- * @param type
- * - The type of edges that we are interested in.
- * @param filter
- * - The parameters that we want to filter our edges by.
- * @return - A collection of edges which match the supplied filter parameters.
- * @throws CrudException
- */
- public List<Edge> getEdges(String type, Map<String, Object> filter) throws CrudException;
-
- /**
- * Insert a new {@link Vertex} into the graph data store.
- *
- * @param type
- * - The type label to assign to the vertex.
- * @param properties
- * - The properties to associated with this vertex.
- * @return - The {@link Vertex} object that was created.
- * @throws CrudException
- */
- public Vertex addVertex(String type, Map<String, Object> properties) throws CrudException;
-
- /**
- * Updates an existing {@link Vertex}.
- *
- * @param id
- * - The unique identifier of the vertex to be updated.
- * @param properties
- * - The properties to associate with the vertex.
- * @return - The udpated vertex.
- * @throws CrudException
- */
- public Vertex updateVertex(String id, String type, Map<String, Object> properties) throws CrudException;
-
- /**
- * Removes the specified vertex from the graph data base.
- *
- * <p>
- * NOTE: The vertex MUST contain NO incident edges before it can be deleted.
- *
- * @param id
- * - The unique identifier of the vertex to be deleted.
- * @throws CrudException
- */
- public void deleteVertex(String id, String type) throws CrudException;
-
- /**
- * Adds an edge to the graph database.
- *
- * @param type
- * - The 'type' label to apply to the edge.
- * @param source
- * - The source vertex for this edge.
- * @param target
- * - The target vertex for this edge.
- * @param properties
- * - The properties map to associate with this edge.
- * @return - The {@link Edge} object that was created.
- * @throws CrudException
- */
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties) throws CrudException;
-
- /**
- * Updates an existing {@link Edge}.
- *
- * @param id
- * - The unique identifier of the edge to be updated.
- * @param properties
- * - The properties to associate with the edge.
- * @return - The update edge.
- * @throws CrudException
- */
- public Edge updateEdge(Edge edge) throws CrudException;
-
- /**
- * Remove the specified edge from the graph data base.
- *
- * @param id
- * - The unique identifier of the edge to be deleted.
- * @throws CrudException
- */
- public void deleteEdge(String id, String type) throws CrudException;
-
- public String openTransaction();
-
- public void commitTransaction(String id) throws CrudException;
-
- public void rollbackTransaction(String id) throws CrudException;
-
- public boolean transactionExists(String id) throws CrudException;
-
- public Vertex addVertex(String type, Map<String, Object> properties, String txId) throws CrudException;
-
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties, String txId)
- throws CrudException;
-
- public Vertex updateVertex(String id, String type, Map<String, Object> properties, String txId) throws CrudException;
-
- public Edge updateEdge(Edge edge, String txId) throws CrudException;
-
- public void deleteVertex(String id, String type, String txId) throws CrudException;
-
- public void deleteEdge(String id, String type, String txId) throws CrudException;
-
- public Edge getEdge(String id, String type, String txId) throws CrudException;
-}
diff --git a/src/main/java/org/openecomp/crud/dao/champ/ChampDao.java b/src/main/java/org/openecomp/crud/dao/champ/ChampDao.java
deleted file mode 100644
index 93c3cdd..0000000
--- a/src/main/java/org/openecomp/crud/dao/champ/ChampDao.java
+++ /dev/null
@@ -1,883 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.dao.champ;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.openecomp.aai.champcore.ChampGraph;
-import org.openecomp.aai.champcore.ChampTransaction;
-import org.openecomp.aai.champcore.exceptions.ChampMarshallingException;
-import org.openecomp.aai.champcore.exceptions.ChampObjectNotExistsException;
-import org.openecomp.aai.champcore.exceptions.ChampRelationshipNotExistsException;
-import org.openecomp.aai.champcore.exceptions.ChampSchemaViolationException;
-import org.openecomp.aai.champcore.exceptions.ChampTransactionException;
-import org.openecomp.aai.champcore.exceptions.ChampUnmarshallingException;
-import org.openecomp.aai.champcore.model.ChampObject;
-import org.openecomp.aai.champcore.model.ChampRelationship;
-import org.openecomp.aai.champcore.model.fluent.object.ObjectBuildOrPropertiesStep;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.dao.GraphDao;
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.logging.CrudServiceMsgs;
-
-/**
- * This is the integration layer between the CRUD API service and the low level
- * Champ library for graph database interaction.
- */
-public class ChampDao implements GraphDao {
-
- public static final String CONFIG_STORAGE_BACKEND = "storage.backend";
- public static final String CONFIG_STORAGE_BACKEND_DB = "storage.backend.db";
- public static final String STORAGE_HBASE_DB = "hbase";
- public static final String STORAGE_CASSANDRA_DB = "cassandra";
- public static final String CONFIG_STORAGE_HOSTNAMES = "storage.hostnames";
- public static final String CONFIG_STORAGE_PORT = "storage.port";
- public static final String CONFIG_HBASE_ZNODE_PARENT = "storage.hbase.ext.zookeeper.znode.parent";
- public static final String CONFIG_GRAPH_NAME = "graph.name";
- public static final String GRAPH_UNQ_INSTANCE_ID_SUFFIX = "graph.unique-instance-id-suffix";
-
- public static final String CONFIG_EVENT_STREAM_PUBLISHER = "event.stream.publisher";
- public static final String CONFIG_EVENT_STREAM_NUM_PUBLISHERS = "event.stream.num-publishers";
-
- private static Map<String, ChampTransaction> transactions = new ConcurrentHashMap<String, ChampTransaction>();
- public static final String DEFAULT_GRAPH_NAME = "default_graph";
-
- private enum GraphType {
- IN_MEMORY, TITAN, DSE
- }
-
- /**
- * Instance of the API used for interacting with the Champ library.
- */
- private ChampGraph champApi = null;
-
- private Logger logger = LoggerFactory.getInstance().getLogger(ChampDao.class.getName());
-
- /**
- * Creates a new instance of the ChampDao.
- *
- * @param champGraph
- * - Concrete implementation of the graph dao layer
- */
- public ChampDao(ChampGraph champGraph) {
- this.champApi = champGraph;
- }
-
- @Override
- public Vertex getVertex(String id) throws CrudException {
-
- try {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getVertex with id: " + id);
- }
-
- long idAsLong = Long.parseLong(id);
-
- Optional<ChampObject> retrievedVertex = champApi.retrieveObject(idAsLong);
-
- String nodeType = org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName();
- if (retrievedVertex.isPresent() && retrievedVertex.get().getProperties().get(nodeType) != null) {
- return vertexFromChampObject(retrievedVertex.get(),
- retrievedVertex.get().getProperties().get(nodeType).toString());
- } 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);
- }
-
- } catch (ChampUnmarshallingException | ChampTransactionException e) {
-
- // Something went wrong - throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public Vertex getVertex(String id, String type) throws CrudException {
-
- try {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getVertex with id: " + id);
- }
-
- long idAsLong = Long.parseLong(id);
-
- // Request the vertex from the graph db.
- Optional<ChampObject> retrievedVertex = champApi.retrieveObject(idAsLong);
-
- // Did we find it?
- if (retrievedVertex.isPresent()
- && retrievedVertex.get().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()) != null
- && retrievedVertex.get().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()).toString()
- .equalsIgnoreCase(type)) {
-
- // Yup, convert it to a Vector object and return it.
- return vertexFromChampObject(retrievedVertex.get(), type);
-
- } 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);
- }
-
- } catch (ChampUnmarshallingException | ChampTransactionException e) {
-
- // Something went wrong - throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public List<Edge> getVertexEdges(String id) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("get Edges incident to vertex with id: " + id + " from graph");
- }
-
- try {
- long idAsLong = Long.parseLong(id); // GDF - what to do about id???
-
- // Request the vertex from the graph db.
- Optional<ChampObject> retrievedVertex = champApi.retrieveObject(idAsLong);
-
- // Did we find it?
- if (retrievedVertex.isPresent()) {
-
- // Query the Champ library for the edges which are incident to the
- // specified
- // vertex.
- Stream<ChampRelationship> relationships = champApi.retrieveRelationships(retrievedVertex.get());
-
- // Build an edge list from the result stream.
- List<Edge> edges = new ArrayList<Edge>();
- relationships.forEach(r -> edges.add(edgeFromChampRelationship(r)));
-
- return edges;
-
- } else {
-
- // We couldn't find the specified vertex, so throw an exception.
- throw new CrudException("No vertex with id " + id + " found in graph",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- } catch (ChampUnmarshallingException e) {
-
- // Something went wrong, so throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
-
- } catch (ChampObjectNotExistsException e) {
-
- // We couldn't find the specified vertex, so throw an exception.
- throw new CrudException("No vertex with id " + id + " found in graph",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- } catch (ChampTransactionException e) {
- throw new CrudException("Transaction error occured", javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public Vertex addVertex(String type, Map<String, Object> properties) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Add/update vertex: {label: " + type + " properties:" + propertiesMapToString(properties));
- }
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- // Create an object to represent our vertex in the format expected by the
- // Champ library.
- ChampObject objectToCreate = buildChampObject(type, properties);
-
- try {
-
- // Ask the Champ library to store our vertex, placing the returned object
- // into a
- // list so that we can easily put that into our result object.
- return vertexFromChampObject(champApi.storeObject(objectToCreate), type);
-
- } catch (ChampMarshallingException | ChampSchemaViolationException | ChampObjectNotExistsException
- | ChampTransactionException e) {
-
- // Something went wrong - throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public Vertex updateVertex(String id, String type, Map<String, Object> properties) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Update vertex with id: " + id + " with properties: " + propertiesMapToString(properties));
- }
- // Add the aai_node_type so that AAI can read the data created by gizmo
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- try {
- // Now, build the updated version of the Champ Object...
- ChampObject updateObject = buildChampObject(id, type, properties);
- // ...and send it to the Champ library.
- return vertexFromChampObject(champApi.replaceObject(updateObject), type);
-
- } catch (ChampObjectNotExistsException e) {
- throw new CrudException("Not Found", javax.ws.rs.core.Response.Status.NOT_FOUND);
- } catch (NumberFormatException | ChampMarshallingException | ChampSchemaViolationException e) {
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- } catch (ChampTransactionException e) {
- throw new CrudException("Transaction error occured", javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- }
-
- @Override
- public List<Vertex> getVertices(String type, Map<String, Object> filter) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Retrieve vertices with type label: " + type + " which map query parameters: "
- + propertiesMapToString(filter));
- }
-
- filter.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- Stream<ChampObject> retrievedVertices;
- try {
- retrievedVertices = champApi.queryObjects(filter);
-
- } catch (ChampTransactionException e) {
- throw new CrudException("Transaction error occured", javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- List<Vertex> vertices = retrievedVertices.map(v -> vertexFromChampObject(v, type)).collect(Collectors.toList());
-
- if (logger.isDebugEnabled()) {
- logger.debug("Resulting vertex list: " + retrievedVertices);
- }
-
- // ...and return it to the caller.
- return vertices;
- }
-
- private Object getRelKey(String id) {
- Object key = id;
- // convert into Long if applicable . TODO : revisit in story NUC-304
- try {
- key = Long.parseLong(id);
- } catch (NumberFormatException e) {
- // The id isn't a Long, leave it as a string
- }
-
- return key;
- }
-
- @Override
- public Edge getEdge(String id, String type) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Get edge with id: " + id);
- }
-
- try {
-
- // Request the edge from the graph db.
- Optional<ChampRelationship> relationship = champApi.retrieveRelationship(getRelKey(id));
-
- // Did we find it?
- if (relationship.isPresent() && relationship.get().getType().equals(type)) {
-
- // Yup - return the result.
- return edgeFromChampRelationship(relationship.get());
-
- } else {
-
- // We didn't find an edge with the supplied id, so throw an exception.
- throw new CrudException("No edge with id " + id + " found in graph",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- } catch (ChampUnmarshallingException | ChampTransactionException e) {
-
- // Something went wrong, so throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties) throws CrudException {
-
- // For now, assume source and target are straight ids...
- try {
-
- Optional<ChampObject> sourceObject = champApi.retrieveObject(Long.parseLong(source.getId().get()));
- if (!sourceObject.isPresent() || !sourceObject.get().getType().equals(source.getType())) {
- throw new CrudException(
- "Error creating edge - source vertex with id " + source + " does not exist in graph data base",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- Optional<ChampObject> targetObject = champApi.retrieveObject(Long.parseLong(target.getId().get()));
- if (!targetObject.isPresent() || !targetObject.get().getType().equals(target.getType())) {
- throw new CrudException(
- "Error creating edge - target vertex with id " + target + " does not exist in graph data base",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- // Now, create the ChampRelationship object for our edge and store it in
- // the graph database.
- return edgeFromChampRelationship(champApi.storeRelationship(
- new ChampRelationship.Builder(sourceObject.get(), targetObject.get(), type).properties(properties).build()));
-
- } catch (ChampMarshallingException | ChampObjectNotExistsException | ChampSchemaViolationException
- | ChampRelationshipNotExistsException | ChampUnmarshallingException | NumberFormatException
- | ChampTransactionException e) {
-
- throw new CrudException("Error creating edge: " + e.getMessage(),
- javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public List<Edge> getEdges(String type, Map<String, Object> filter) throws CrudException {
-
- filter.put(ChampRelationship.ReservedPropertyKeys.CHAMP_RELATIONSHIP_TYPE.toString(), type);
-
- Stream<ChampRelationship> retrievedRelationships;
- try {
- retrievedRelationships = champApi.queryRelationships(filter);
-
- } catch (ChampTransactionException e) {
- throw new CrudException("Transaction error occured", javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- // Process the result stream from the Champ library into an Edge list,
- // keeping only
- // edges of the specified type.
- List<Edge> edges = retrievedRelationships.map(r -> edgeFromChampRelationship(r)).collect(Collectors.toList());
-
- return edges;
- }
-
- @Override
- public Edge updateEdge(Edge edge) throws CrudException {
-
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Update edge with id: " + edge.getId() + " with properties: " + propertiesMapToString(edge.getProperties()));
- }
-
- try {
- // Now, build the updated version of the Champ Relationship...
- ChampRelationship updateRelationship = new ChampRelationship.Builder(
- buildChampObject(edge.getSource().getId().get(), edge.getSource().getType(),
- edge.getSource().getProperties()),
- buildChampObject(edge.getTarget().getId().get(), edge.getTarget().getType(),
- edge.getTarget().getProperties()),
- edge.getType()).key(getRelKey(edge.getId().get())).properties(edge.getProperties()).build();
- // ...and send it to the Champ library.
- return edgeFromChampRelationship(champApi.replaceRelationship(updateRelationship));
-
- } catch (ChampRelationshipNotExistsException ex) {
- throw new CrudException("Not Found", javax.ws.rs.core.Response.Status.NOT_FOUND);
- } catch (NumberFormatException | ChampUnmarshallingException | ChampMarshallingException
- | ChampSchemaViolationException | ChampTransactionException ex) {
-
- throw new CrudException(ex.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public void deleteVertex(String id, String type) throws CrudException {
-
- try {
-
- // First, retrieve the vertex that we intend to delete.
- Optional<ChampObject> retrievedVertex = champApi.retrieveObject(Long.parseLong(id));
-
- // Did we find it?
- if (!retrievedVertex.isPresent() || !retrievedVertex.get().getType().equals(type)) {
- throw new CrudException("Failed to delete vertex with id: " + id + " - vertex does not exist.",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- // Now, verify that there are no edges incident to the vertex (they must
- // be deleted
- // first if so).
- Stream<ChampRelationship> relationships = champApi.retrieveRelationships(retrievedVertex.get());
-
- if (relationships.count() > 0) {
- throw new CrudException("Attempt to delete vertex with id " + id + " which has incident edges.",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- // Finally, we can attempt to delete our vertex.
- champApi.deleteObject(Long.parseLong(id));
-
- } catch (NumberFormatException | ChampUnmarshallingException | ChampObjectNotExistsException
- | ChampTransactionException e) {
-
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public void deleteEdge(String id, String type) throws CrudException {
-
- try {
-
- // First, retrieve the edge that we want to delete.
- Optional<ChampRelationship> relationshipToDelete = champApi.retrieveRelationship(getRelKey(id));
-
- // Did we find it?
- if (!relationshipToDelete.isPresent() || !relationshipToDelete.get().getType().equals(type)) {
- throw new CrudException("Failed to delete edge with id: " + id + " - edge does not exist",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- // Now we can delete the edge.
- champApi.deleteRelationship(relationshipToDelete.get());
-
- } catch (ChampRelationshipNotExistsException | NumberFormatException | ChampUnmarshallingException
- | ChampTransactionException e) {
-
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- /**
- * This helper method generates a string representation of a properties map
- * for logging purposes.
- *
- * @param properties
- * - The properties map to be converted.
- * @return - The log statement friendly conversion of the properties map.
- */
- private String propertiesMapToString(Map<String, Object> properties) {
-
- StringBuilder sb = new StringBuilder();
- sb.append("{");
-
- for (String key : properties.keySet()) {
- sb.append("(").append(key).append(" -> ").append(properties.get(key)).append(") ");
- }
-
- sb.append("}");
-
- return sb.toString();
- }
-
- /**
- * This helper method constructs a {@link ChampObject} suitable for passing to
- * the Champ library.
- *
- * @param type
- * - The type to assign to our ChampObject
- * @param properties
- * - The set of properties to assign to our ChampObject
- * @return - A populated ChampObject
- */
- private ChampObject buildChampObject(String type, Map<String, Object> properties) {
-
- ObjectBuildOrPropertiesStep objectInProgress = ChampObject.create().ofType(type).withoutKey();
-
- for (String key : properties.keySet()) {
- objectInProgress.withProperty(key, properties.get(key));
- }
- return objectInProgress.build();
- }
-
- /**
- * This helper method constructs a {@link ChampObject} suitable for passing to
- * the Champ library.
- *
- * @param id
- * - Unique identifier for this object.
- * @param type
- * - The type to assign to our ChampObject
- * @param properties
- * - The set of properties to assign to our ChampObject
- * @return - A populated ChampObject
- */
- private ChampObject buildChampObject(String id, String type, Map<String, Object> properties) {
-
- ObjectBuildOrPropertiesStep objectInProgress = ChampObject.create().ofType(type).withKey(Long.parseLong(id));
-
- for (String key : properties.keySet()) {
- objectInProgress.withProperty(key, properties.get(key));
- }
- return objectInProgress.build();
- }
-
- private Vertex vertexFromChampObject(ChampObject champObject, String type) {
-
- // Get the identifier for this vertex from the Champ object.
- Object id = champObject.getKey().orElse("");
-
- // Start building our {@link Vertex} object.
- Vertex.Builder vertexBuilder = new Vertex.Builder(type);
- vertexBuilder.id(id.toString());
-
- // Convert the properties associated with the Champ object into the form
- // expected for
- // a Vertex object.
- for (String key : champObject.getProperties().keySet()) {
- vertexBuilder.property(key, champObject.getProperties().get(key));
- }
-
- // ...and return it.
- return vertexBuilder.build();
- }
-
- /**
- * This helper method converts a {@link ChampRelationship} from the Champ
- * library into an equivalent {@link Edge} object that is understood by the
- * CRUD Service.
- *
- * @param relationship
- * - The ChampRelationship object to be converted.
- * @return - An Edge object corresponding to the supplied ChampRelationship
- */
- private Edge edgeFromChampRelationship(ChampRelationship relationship) {
-
- // Populate the edge's id, if available.
- Object relationshipId = relationship.getKey().orElse("");
-
- Edge.Builder edgeBuilder = new Edge.Builder(relationship.getType()).id(relationshipId.toString());
- edgeBuilder.source(vertexFromChampObject(relationship.getSource(),
- relationship.getSource().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()) == null
- ? relationship.getSource().getType()
- : relationship.getSource().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()).toString()));
- edgeBuilder.target(vertexFromChampObject(relationship.getTarget(),
- relationship.getTarget().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()) == null
- ? relationship.getTarget().getType()
- : relationship.getTarget().getProperties()
- .get(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName()).toString()));
-
- for (String key : relationship.getProperties().keySet()) {
- edgeBuilder.property(key, relationship.getProperties().get(key).toString());
- }
-
- return edgeBuilder.build();
- }
-
- /**
- * Performs any necessary shut down operations when the DAO is no longer
- * needed.
- */
- public void close() {
-
- if (champApi != null) {
-
- logger.info(CrudServiceMsgs.STOPPING_CHAMP_DAO);
-
- champApi.shutdown();
- }
- }
-
- @Override
- public String openTransaction() {
-
- ChampTransaction transaction = champApi.openTransaction();
-
- transactions.put(transaction.id(), transaction);
- logger.info(CrudServiceMsgs.TRANSACTION, "Stored transaction " + transaction.id() + " in hashmap");
- logger.info(CrudServiceMsgs.TRANSACTION, "Hash map contents:");
- for (String key : transactions.keySet()) {
- logger.info(CrudServiceMsgs.TRANSACTION, key);
- }
- return transaction.id();
- }
-
- @Override
- public void commitTransaction(String id) throws CrudException {
-
- try {
- champApi.commitTransaction(getTransaction(id));
- } catch (ChampTransactionException e) {
- throw new CrudException("Error while commiting transaction " + id,
- javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- transactions.remove(id);
- }
-
- @Override
- public void rollbackTransaction(String id) throws CrudException {
-
- try {
- champApi.rollbackTransaction(getTransaction(id));
- } catch (ChampTransactionException e) {
- throw new CrudException("Error while transaction rollback " + id,
- javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- transactions.remove(id);
- }
-
- private ChampTransaction getTransaction(String id) throws CrudException {
-
- logger.info(CrudServiceMsgs.TRANSACTION, "Looking up transaction " + id);
- if (transactions.containsKey(id)) {
- logger.info(CrudServiceMsgs.TRANSACTION, "Found it!");
- return (transactions.get(id));
- } else {
- logger.info(CrudServiceMsgs.TRANSACTION, "Didn't find transaction id " + id + ". Hash map contains: ");
- for (String key : transactions.keySet()) {
- logger.info(CrudServiceMsgs.TRANSACTION, key);
- }
- throw new CrudException("No open transaction with id: " + id, javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
- }
-
- @Override
- public Vertex addVertex(String type, Map<String, Object> properties, String txId) throws CrudException {
- if (logger.isDebugEnabled()) {
- logger.debug("Add/update vertex: {label: " + type + " properties:" + propertiesMapToString(properties));
- }
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- // Create an object to represent our vertex in the format expected by the
- // Champ library.
- ChampObject objectToCreate = buildChampObject(type, properties);
-
- try {
-
- // Ask the Champ library to store our vertex, placing the returned object
- // into a
- // list so that we can easily put that into our result object.
- return vertexFromChampObject(champApi.storeObject(objectToCreate, Optional.of(getTransaction(txId))), type);
-
- } catch (ChampMarshallingException | ChampSchemaViolationException | ChampObjectNotExistsException
- | ChampTransactionException e) {
-
- // Something went wrong - throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties, String txId)
- throws CrudException {
- // For now, assume source and target are straight ids...
- try {
-
- Optional<ChampObject> sourceObject = champApi.retrieveObject(Long.parseLong(source.getId().get()),
- Optional.of(getTransaction(txId)));
- if (!sourceObject.isPresent() || !sourceObject.get().getType().equals(source.getType())) {
- throw new CrudException(
- "Error creating edge - source vertex with id " + source + " does not exist in graph data base",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- Optional<ChampObject> targetObject = champApi.retrieveObject(Long.parseLong(target.getId().get()),
- Optional.of(getTransaction(txId)));
- if (!targetObject.isPresent() || !targetObject.get().getType().equals(target.getType())) {
- throw new CrudException(
- "Error creating edge - target vertex with id " + target + " does not exist in graph data base",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- // Now, create the ChampRelationship object for our edge and store it in
- // the graph database.
- return edgeFromChampRelationship(champApi.storeRelationship(
- new ChampRelationship.Builder(sourceObject.get(), targetObject.get(), type).properties(properties).build(),
- Optional.of(getTransaction(txId))));
-
- } catch (ChampMarshallingException | ChampObjectNotExistsException | ChampSchemaViolationException
- | ChampTransactionException | ChampRelationshipNotExistsException | ChampUnmarshallingException e) {
-
- throw new CrudException("Error creating edge: " + e.getMessage(),
- javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- }
-
- @Override
- public Vertex updateVertex(String id, String type, Map<String, Object> properties, String txId) throws CrudException {
- if (logger.isDebugEnabled()) {
- logger.debug("Update vertex with id: " + id + " with properties: " + propertiesMapToString(properties));
- }
- // Add the aai_node_type so that AAI can read the data created by gizmo
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- try {
- // Now, build the updated version of the Champ Object...
- ChampObject updateObject = buildChampObject(id, type, properties);
- // ...and send it to the Champ library.
- return vertexFromChampObject(champApi.replaceObject(updateObject, Optional.of(getTransaction(txId))), type);
-
- } catch (ChampObjectNotExistsException e) {
- throw new CrudException("Not Found", javax.ws.rs.core.Response.Status.NOT_FOUND);
- } catch (NumberFormatException | ChampMarshallingException | ChampTransactionException
- | ChampSchemaViolationException e) {
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public boolean transactionExists(String id) throws CrudException {
- return transactions.containsKey(id);
- }
-
- @Override
- public void deleteVertex(String id, String type, String txId) throws CrudException {
- try {
-
- // First, retrieve the vertex that we intend to delete.
- Optional<ChampObject> retrievedVertex = champApi.retrieveObject(Long.parseLong(id),
- Optional.of(getTransaction(txId)));
-
- // Did we find it?
- if (!retrievedVertex.isPresent() || !retrievedVertex.get().getType().equals(type)) {
- throw new CrudException("Failed to delete vertex with id: " + id + " - vertex does not exist.",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- // Now, verify that there are no edges incident to the vertex (they must
- // be deleted
- // first if so).
- Stream<ChampRelationship> relationships = champApi.retrieveRelationships(retrievedVertex.get(),
- Optional.of(getTransaction(txId)));
-
- if (relationships.count() > 0) {
- throw new CrudException("Attempt to delete vertex with id " + id + " which has incident edges.",
- javax.ws.rs.core.Response.Status.BAD_REQUEST);
- }
-
- // Finally, we can attempt to delete our vertex.
- champApi.deleteObject(Long.parseLong(id), Optional.of(getTransaction(txId)));
-
- } catch (NumberFormatException | ChampUnmarshallingException | ChampObjectNotExistsException
- | ChampTransactionException e) {
-
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- }
-
- @Override
- public Edge updateEdge(Edge edge, String txId) throws CrudException {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Update edge with id: " + edge.getId() + " with properties: " + propertiesMapToString(edge.getProperties()));
- }
-
- try {
- // Now, build the updated version of the Champ Relationship...
- ChampRelationship updateRelationship = new ChampRelationship.Builder(
- buildChampObject(edge.getSource().getId().get(), edge.getSource().getType(),
- edge.getSource().getProperties()),
- buildChampObject(edge.getTarget().getId().get(), edge.getTarget().getType(),
- edge.getTarget().getProperties()),
- edge.getType()).key(getRelKey(edge.getId().get())).properties(edge.getProperties()).build();
- // ...and send it to the Champ library.
- return edgeFromChampRelationship(
- champApi.replaceRelationship(updateRelationship, Optional.of(getTransaction(txId))));
-
- } catch (ChampRelationshipNotExistsException ex) {
- throw new CrudException("Not Found", javax.ws.rs.core.Response.Status.NOT_FOUND);
- } catch (NumberFormatException | ChampUnmarshallingException | ChampMarshallingException
- | ChampSchemaViolationException | ChampTransactionException ex) {
-
- throw new CrudException(ex.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
- @Override
- public void deleteEdge(String id, String type, String txId) throws CrudException {
- try {
-
- // First, retrieve the edge that we want to delete.
- Optional<ChampRelationship> relationshipToDelete = champApi.retrieveRelationship(getRelKey(id),
- Optional.of(getTransaction(txId)));
-
- // Did we find it?
- if (!relationshipToDelete.isPresent() || !relationshipToDelete.get().getType().equals(type)) {
- throw new CrudException("Failed to delete edge with id: " + id + " - edge does not exist",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- // Now we can delete the edge.
- champApi.deleteRelationship(relationshipToDelete.get(), Optional.of(getTransaction(txId)));
-
- } catch (ChampRelationshipNotExistsException | NumberFormatException | ChampUnmarshallingException
- | ChampTransactionException e) {
-
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
-
- }
-
- @Override
- public Edge getEdge(String id, String type, String txId) throws CrudException {
- if (logger.isDebugEnabled()) {
- logger.debug("Get edge with id: " + id);
- }
-
- try {
-
- // Request the edge from the graph db.
- Optional<ChampRelationship> relationship = champApi.retrieveRelationship(getRelKey(id),
- Optional.of(getTransaction(txId)));
-
- // Did we find it?
- if (relationship.isPresent() && relationship.get().getType().equals(type)) {
-
- // Yup - return the result.
- return edgeFromChampRelationship(relationship.get());
-
- } else {
-
- // We didn't find an edge with the supplied id, so throw an exception.
- throw new CrudException("No edge with id " + id + " found in graph",
- javax.ws.rs.core.Response.Status.NOT_FOUND);
- }
-
- } catch (ChampUnmarshallingException | ChampTransactionException e) {
-
- // Something went wrong, so throw an exception.
- throw new CrudException(e.getMessage(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
- }
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/dao/champion/ChampionDao.java b/src/main/java/org/openecomp/crud/dao/champion/ChampionDao.java
deleted file mode 100644
index 48fa6cb..0000000
--- a/src/main/java/org/openecomp/crud/dao/champion/ChampionDao.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.dao.champion;
-
-import net.dongliu.gson.GsonJava8TypeAdapterFactory;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-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.openecomp.aai.logging.LoggingContext;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.dao.GraphDao;
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.util.CrudServiceConstants;
-import org.openecomp.restclient.client.OperationResult;
-import org.openecomp.restclient.client.RestClient;
-import org.openecomp.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.List;
-import java.util.Map;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-public class ChampionDao implements GraphDao {
- private RestClient client;
- private String baseUrl;
-
- private static final String HEADER_FROM_APP = "X-FromAppId";
- private static final String HEADER_TRANS_ID = "X-TransactionId";
-
- private Logger logger = LoggerFactory.getInstance().getLogger(ChampionDao.class.getName());
-
- // We use a custom vertex serializer for Champion because it expects "key"
- // instead of "id"
- private static final Gson championGson = new GsonBuilder()
- .registerTypeAdapterFactory(new GsonJava8TypeAdapterFactory())
- .registerTypeAdapter(Vertex.class, new ChampionVertexSerializer())
- .registerTypeAdapter(Edge.class, new ChampionEdgeSerializer()).create();
-
- public ChampionDao(String championUrl, String certPassword) {
- try {
- client = new RestClient().authenticationMode(RestAuthenticationMode.SSL_CERT).validateServerHostname(false)
- .validateServerCertChain(false).clientCertFile(CrudServiceConstants.CRD_CHAMPION_AUTH_FILE)
- .clientCertPassword(Password.deobfuscate(certPassword));
-
- baseUrl = championUrl;
- } catch (Exception e) {
- System.out.println("Error setting up Champion configuration");
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- @Override
- public Vertex getVertex(String id) throws CrudException {
- String url = baseUrl + "objects/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- return Vertex.fromJson(getResult.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);
- }
- }
-
- @Override
- public Vertex getVertex(String id, String type) throws CrudException {
- String url = baseUrl + "objects/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- Vertex vert = Vertex.fromJson(getResult.getResult());
-
- 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",
- 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);
- }
- }
-
- @Override
- public List<Edge> getVertexEdges(String id) throws CrudException {
- String url = baseUrl + "objects/relationships/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- return championGson.fromJson(getResult.getResult(), new TypeToken<List<Edge>>() {
- }.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);
- }
- }
-
- @Override
- public List<Vertex> getVertices(String type, Map<String, Object> filter) throws CrudException {
- filter.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- String url = baseUrl + "objects/filter" + "?"
- + URLEncodedUtils.format(convertToNameValuePair(filter), Charset.defaultCharset());
-
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- return championGson.fromJson(getResult.getResult(), new TypeToken<List<Vertex>>() {
- }.getType());
- } 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);
- }
- }
-
- @Override
- public Edge getEdge(String id, String type) throws CrudException {
- String url = baseUrl + "relationships/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, 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 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);
- }
- }
-
- @Override
- public List<Edge> getEdges(String type, Map<String, Object> filter) throws CrudException {
- String url = baseUrl + "relationships/filter" + "?"
- + URLEncodedUtils.format(convertToNameValuePair(filter), Charset.defaultCharset());
-
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- return championGson.fromJson(getResult.getResult(), new TypeToken<List<Edge>>() {
- }.getType());
- } 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);
- }
- }
-
- @Override
- public Vertex addVertex(String type, Map<String, Object> properties) throws CrudException {
- String url = baseUrl + "objects";
- Map<String, List<String>> 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())));
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- // TODO: This probably shouldn't be here
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
- properties.forEach(insertVertexBuilder::property);
- Vertex insertVertex = insertVertexBuilder.build();
-
- OperationResult getResult = client.post(url, insertVertex.toJson(), headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) {
- return Vertex.fromJson(getResult.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()));
- }
- }
-
- @Override
- public Vertex updateVertex(String id, String type, Map<String, Object> properties) throws CrudException {
- String url = baseUrl + "objects/" + id;
- Map<String, List<String>> 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())));
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- // TODO: This probably shouldn't be here
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
- insertVertexBuilder.id(id);
- properties.forEach(insertVertexBuilder::property);
- Vertex insertVertex = insertVertexBuilder.build();
-
- String payload = insertVertex.toJson(championGson);
- OperationResult getResult = client.put(url, payload, headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) {
- return Vertex.fromJson(getResult.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()));
- }
- }
-
- @Override
- public void deleteVertex(String id, String type) throws CrudException {
- String url = baseUrl + "objects/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.delete(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- 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()));
- }
- }
-
- @Override
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties) throws CrudException {
- String url = baseUrl + "relationships";
- Map<String, List<String>> 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())));
-
- // Try requests to ensure source and target exist in Champion
- Vertex dbSource = getVertex(source.getId().get(), source.getType());
- Vertex dbTarget = getVertex(target.getId().get(), target.getType());
-
- Edge.Builder insertEdgeBuilder = new Edge.Builder(type).source(dbSource).target(dbTarget);
- properties.forEach(insertEdgeBuilder::property);
- Edge insertEdge = insertEdgeBuilder.build();
-
- String edgeJson = insertEdge.toJson(championGson);
- OperationResult getResult = client.post(url, edgeJson, headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) {
- return Edge.fromJson(getResult.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()));
- }
- }
-
- @Override
- public Edge updateEdge(Edge edge) throws CrudException {
- if (!edge.getId().isPresent()) {
- throw new CrudException("Unable to identify edge: " + edge.toString(), Response.Status.BAD_REQUEST);
- }
- String url = baseUrl + "relationships/" + edge.getId().get();
- Map<String, List<String>> 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())));
-
- String edgeJson = edge.toJson(championGson);
- OperationResult getResult = client.put(url, edgeJson, headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) {
- return Edge.fromJson(getResult.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()));
- }
- }
-
- @Override
- public void deleteEdge(String id, String type) throws CrudException {
- String url = baseUrl + "relationships/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.delete(url, headers, 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);
- }
- }
-
- @Override
- public String openTransaction() {
- String url = baseUrl + "transaction";
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.post(url, "", headers, MediaType.TEXT_PLAIN_TYPE, MediaType.TEXT_PLAIN_TYPE);
-
- if (getResult.getResultCode() == 200) {
- return getResult.getResult();
- } else {
- return null;
- }
- }
-
- @Override
- public void commitTransaction(String id) throws CrudException {
- String url = baseUrl + "transaction/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.put(url, "{\"method\": \"commit\"}", headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.TEXT_PLAIN_TYPE);
-
- if (getResult.getResultCode() != 200) {
- throw new CrudException("Unable to commit transaction",
- Response.Status.fromStatusCode(getResult.getResultCode()));
- }
- }
-
- @Override
- public void rollbackTransaction(String id) throws CrudException {
- String url = baseUrl + "transaction/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.put(url, "{\"method\": \"rollback\"}", headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.TEXT_PLAIN_TYPE);
-
- if (getResult.getResultCode() != 200) {
- throw new CrudException("Unable to rollback transaction",
- Response.Status.fromStatusCode(getResult.getResultCode()));
- }
- }
-
- @Override
- public boolean transactionExists(String id) throws CrudException {
- String url = baseUrl + "transaction/" + id;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- return getResult.getResultCode() == 200;
- }
-
- @Override
- public Vertex addVertex(String type, Map<String, Object> properties, String txId) throws CrudException {
- String url = baseUrl + "objects?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- // TODO: This probably shouldn't be here
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
- properties.forEach(insertVertexBuilder::property);
- Vertex insertVertex = insertVertexBuilder.build();
-
- OperationResult getResult = client.post(url, insertVertex.toJson(), headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) {
- return Vertex.fromJson(getResult.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()));
- }
- }
-
- @Override
- public Edge addEdge(String type, Vertex source, Vertex target, Map<String, Object> properties, String txId)
- throws CrudException {
- String url = baseUrl + "relationships?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- // Try requests to ensure source and target exist in Champion
- Vertex dbSource = getVertex(source.getId().get(), source.getType(), txId);
- Vertex dbTarget = getVertex(target.getId().get(), target.getType(), txId);
-
- Edge.Builder insertEdgeBuilder = new Edge.Builder(type).source(dbSource).target(dbTarget);
- properties.forEach(insertEdgeBuilder::property);
- Edge insertEdge = insertEdgeBuilder.build();
-
- OperationResult getResult = client.post(url, insertEdge.toJson(championGson), headers,
- MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.CREATED.getStatusCode()) {
- return Edge.fromJson(getResult.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()));
- }
- }
-
- @Override
- public Vertex updateVertex(String id, String type, Map<String, Object> properties, String txId) throws CrudException {
- String url = baseUrl + "objects/" + id + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- // Add the aai_node_type so that AAI can read the data created by gizmo
- // TODO: This probably shouldn't be here
- properties.put(org.openecomp.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
-
- Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
- insertVertexBuilder.id(id);
- properties.forEach(insertVertexBuilder::property);
- Vertex insertVertex = insertVertexBuilder.build();
-
- String payload = insertVertex.toJson(championGson);
- OperationResult getResult = client.put(url, payload, headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) {
- return Vertex.fromJson(getResult.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()));
- }
- }
-
- @Override
- public void deleteVertex(String id, String type, String txId) throws CrudException {
- String url = baseUrl + "objects/" + id + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.delete(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- 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()));
- }
- }
-
- @Override
- public Edge updateEdge(Edge edge, String txId) throws CrudException {
- if (!edge.getId().isPresent()) {
- throw new CrudException("Unable to identify edge: " + edge.toString(), Response.Status.BAD_REQUEST);
- }
- String url = baseUrl + "relationships/" + edge.getId().get() + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.put(url, edge.toJson(championGson), headers, MediaType.APPLICATION_JSON_TYPE,
- MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == Response.Status.OK.getStatusCode()) {
- return Edge.fromJson(getResult.getResult());
- } else {
- // We didn't create an edge with the supplied type, so just throw an
- // exception.
- throw new CrudException("Failed to update edge: " + getResult.getFailureCause(),
- Response.Status.fromStatusCode(getResult.getResultCode()));
- }
- }
-
- @Override
- public void deleteEdge(String id, String type, String txId) throws CrudException {
- String url = baseUrl + "relationships/" + id + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.delete(url, headers, 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);
- }
- }
-
- @Override
- public Edge getEdge(String id, String type, String txId) throws CrudException {
- String url = baseUrl + "relationships/" + id + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, 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);
- }
- }
-
- public Vertex getVertex(String id, String type, String txId) throws CrudException {
- String url = baseUrl + "objects/" + id + "?transactionId=" + txId;
- Map<String, List<String>> 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())));
-
- OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
-
- if (getResult.getResultCode() == 200) {
- Vertex vert = Vertex.fromJson(getResult.getResult());
-
- 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",
- 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);
- }
- }
-
- // https://stackoverflow.com/questions/26942330/convert-mapstring-string-to-listnamevaluepair-is-this-the-most-efficient
- private List<NameValuePair> convertToNameValuePair(Map<String, Object> pairs) {
- List<NameValuePair> nvpList = new ArrayList<>(pairs.size());
-
- pairs.forEach((key, value) -> nvpList.add(new BasicNameValuePair(key, value.toString())));
-
- return nvpList;
- }
-}
diff --git a/src/main/java/org/openecomp/crud/dao/champion/ChampionEdgeSerializer.java b/src/main/java/org/openecomp/crud/dao/champion/ChampionEdgeSerializer.java
deleted file mode 100644
index 5ca6c2c..0000000
--- a/src/main/java/org/openecomp/crud/dao/champion/ChampionEdgeSerializer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.dao.champion;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-
-import java.lang.reflect.Type;
-
-public class ChampionEdgeSerializer implements JsonSerializer<Edge> {
- @Override
- public JsonElement serialize(Edge edge, Type type, JsonSerializationContext jsonSerializationContext) {
- final JsonObject edgeObj = new JsonObject();
- if (edge.getId().isPresent()) {
- edgeObj.add("key", jsonSerializationContext.serialize(edge.getId().get()));
- }
- edgeObj.add("type", jsonSerializationContext.serialize(edge.getType()));
- edgeObj.add("properties", jsonSerializationContext.serialize(edge.getProperties()));
- edgeObj.add("source", jsonSerializationContext.serialize(edge.getSource()));
- edgeObj.add("target", jsonSerializationContext.serialize(edge.getTarget()));
- return edgeObj;
- }
-}
diff --git a/src/main/java/org/openecomp/crud/dao/champion/ChampionVertexSerializer.java b/src/main/java/org/openecomp/crud/dao/champion/ChampionVertexSerializer.java
deleted file mode 100644
index ab743d7..0000000
--- a/src/main/java/org/openecomp/crud/dao/champion/ChampionVertexSerializer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.dao.champion;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-import org.openecomp.crud.entity.Vertex;
-
-import java.lang.reflect.Type;
-
-public class ChampionVertexSerializer implements JsonSerializer<Vertex> {
- @Override
- public JsonElement serialize(Vertex vertex, Type type, JsonSerializationContext jsonSerializationContext) {
- final JsonObject vertexObj = new JsonObject();
- if (vertex.getId().isPresent()) {
- vertexObj.add("key", jsonSerializationContext.serialize(vertex.getId().get()));
- }
- vertexObj.add("type", jsonSerializationContext.serialize(vertex.getType()));
- vertexObj.add("properties", jsonSerializationContext.serialize(vertex.getProperties()));
-
- return vertexObj;
- }
-}
diff --git a/src/main/java/org/openecomp/crud/entity/Edge.java b/src/main/java/org/openecomp/crud/entity/Edge.java
deleted file mode 100644
index 4d2de24..0000000
--- a/src/main/java/org/openecomp/crud/entity/Edge.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.entity;
-
-import net.dongliu.gson.GsonJava8TypeAdapterFactory;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.annotations.SerializedName;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-public class Edge {
- private static final Gson gson = new GsonBuilder().registerTypeAdapterFactory(new GsonJava8TypeAdapterFactory())
- .create();
-
- @SerializedName(value = "id", alternate = { "key" })
- private final Optional<String> id;
- private final String type;
- private final Map<String, Object> properties;
- private final Vertex source;
- private final Vertex target;
-
- private Edge(Builder builder) {
- this.id = builder.id;
- this.type = builder.type;
- this.source = builder.source;
- this.target = builder.target;
- this.properties = builder.properties;
- }
-
- public static class Builder {
- private Optional<String> id = Optional.empty();
- private final String type;
- private Vertex source;
- private Vertex target;
- private final Map<String, Object> properties = new HashMap<String, Object>();
-
- public Builder(String type) {
- if (type == null) {
- throw new IllegalArgumentException("Type cannot be null");
- }
-
- this.type = type;
- }
-
- public Builder id(String id) {
- if (id == null) {
- throw new IllegalArgumentException("id cannot be null");
- }
-
- this.id = Optional.of(id);
- return this;
- }
-
- public Builder property(String key, Object value) {
- if (key == null || value == null) {
- throw new IllegalArgumentException("Property key/value cannot be null");
- }
- properties.put(key, value);
- return this;
- }
-
- public Builder source(Vertex source) {
- this.source = source;
- return this;
- }
-
- public Builder target(Vertex target) {
- this.target = target;
- return this;
- }
-
- public Edge build() {
- return new Edge(this);
- }
- }
-
- @Override
- public String toString() {
- return "Edge [id=" + id + ", type=" + type + ", properties=" + properties + ", source=" + source + ", target="
- + target + "]";
- }
-
- public String toJson() {
- return gson.toJson(this);
- }
-
- public String toJson(Gson customGson) {
- return customGson.toJson(this);
- }
-
- public static Edge fromJson(String jsonString) {
- return gson.fromJson(jsonString, Edge.class);
- }
-
- public Optional<String> getId() {
- return id;
- }
-
- public String getType() {
- return type;
- }
-
- public Map<String, Object> getProperties() {
- return properties;
- }
-
- public Vertex getSource() {
- return source;
- }
-
- public Vertex getTarget() {
- return target;
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/entity/Vertex.java b/src/main/java/org/openecomp/crud/entity/Vertex.java
deleted file mode 100644
index 12c274f..0000000
--- a/src/main/java/org/openecomp/crud/entity/Vertex.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.entity;
-
-import net.dongliu.gson.GsonJava8TypeAdapterFactory;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.annotations.SerializedName;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-public class Vertex {
- private static final Gson gson = new GsonBuilder().registerTypeAdapterFactory(new GsonJava8TypeAdapterFactory())
- .create();
-
- @SerializedName(value = "id", alternate = { "key" })
- private final Optional<String> id;
-
- private final String type;
- private final Map<String, Object> properties;
-
- private Vertex(Builder builder) {
- this.id = builder.id;
- this.type = builder.type;
- this.properties = builder.properties;
- }
-
- public static class Builder {
- private Optional<String> id = Optional.empty();
- private final String type;
- private final Map<String, Object> properties = new HashMap<String, Object>();
-
- public Builder(String type) {
- if (type == null) {
- throw new IllegalArgumentException("Type cannot be null");
- }
- this.type = type;
- }
-
- public Builder id(String id) {
- if (id == null) {
- throw new IllegalArgumentException("id cannot be null");
- }
-
- this.id = Optional.of(id);
- return this;
- }
-
- public Builder property(String key, Object value) {
- if (key == null || value == null) {
- throw new IllegalArgumentException("Property key/value cannot be null");
- }
- properties.put(key, value);
- return this;
- }
-
- public Vertex build() {
- return new Vertex(this);
- }
- }
-
- public String toJson() {
- return gson.toJson(this);
- }
-
- public String toJson(Gson customGson) {
- return customGson.toJson(this);
- }
-
- public static Vertex fromJson(String jsonString) {
- return gson.fromJson(jsonString, Vertex.class);
- }
-
- @Override
- public String toString() {
- return "Vertex [id=" + id + ", type=" + type + ", properties=" + properties + "]";
- }
-
- public Optional<String> getId() {
- return id;
- }
-
- public String getType() {
- return type;
- }
-
- public Map<String, Object> getProperties() {
- return properties;
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/event/GraphEvent.java b/src/main/java/org/openecomp/crud/event/GraphEvent.java
deleted file mode 100644
index 392bf2d..0000000
--- a/src/main/java/org/openecomp/crud/event/GraphEvent.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.event;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.annotations.SerializedName;
-
-import org.openecomp.crud.exception.CrudException;
-
-import javax.ws.rs.core.Response.Status;
-
-public class GraphEvent {
-
- public enum GraphEventOperation {
- CREATE, UPDATE, DELETE
- }
-
- public enum GraphEventResult {
- SUCCESS, FAILURE
- }
-
- private GraphEventOperation operation;
-
- @SerializedName("transaction-id")
- private String transactionId;
-
- private long timestamp;
-
- private GraphEventVertex vertex;
-
- private GraphEventEdge edge;
-
- private GraphEventResult result;
-
- @SerializedName("error-message")
- private String errorMessage;
-
- private Status httpErrorStatus;
-
- /**
- * Marshaller/unmarshaller for converting to/from JSON.
- */
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping()
- .setPrettyPrinting().create();
-
- public static Builder builder(GraphEventOperation operation) {
- return new Builder(operation);
- }
-
- public GraphEventOperation getOperation() {
- return operation;
- }
-
- public String getTransactionId() {
- return transactionId;
- }
-
- public long getTimestamp() {
- return timestamp;
- }
-
- public GraphEventVertex getVertex() {
- return vertex;
- }
-
- public GraphEventEdge getEdge() {
- return edge;
- }
-
- public GraphEventResult getResult() {
- return result;
- }
-
- public String getErrorMessage() {
- return errorMessage;
- }
-
- public void setResult(GraphEventResult result) {
- this.result = result;
- }
-
-
- public Status getHttpErrorStatus() {
- return httpErrorStatus;
- }
-
- public void setHttpErrorStatus(Status httpErrorStatus) {
- this.httpErrorStatus = httpErrorStatus;
- }
-
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- }
-
- public void setErrorMessage(String errorMessage) {
- this.errorMessage = errorMessage;
- }
-
- public void setVertex(GraphEventVertex vertex) {
- this.vertex = vertex;
- }
-
- public void setEdge(GraphEventEdge edge) {
- this.edge = edge;
- }
-
- /**
- * Unmarshalls this Vertex object into a JSON string.
- *
- * @return - A JSON format string representation of this Vertex.
- */
- public String toJson() {
- return gson.toJson(this);
- }
-
- /**
- * Marshalls the provided JSON string into a Vertex object.
- *
- * @param json - The JSON string to produce the Vertex from.
- * @return - A Vertex object.
- * @throws SpikeException
- */
- public static GraphEvent fromJson(String json) throws CrudException {
-
- try {
-
- // Make sure that we were actually provided a non-empty string
- // before we
- // go any further.
- if (json == null || json.isEmpty()) {
- throw new CrudException("Empty or null JSON string.", Status.BAD_REQUEST);
- }
-
- // Marshall the string into a Vertex object.
- return gson.fromJson(json, GraphEvent.class);
-
- } catch (Exception ex) {
- throw new CrudException("Unable to parse JSON string: ", Status.BAD_REQUEST);
- }
- }
-
- @Override
- public String toString() {
-
- return toJson();
- }
-
- public String getObjectKey() {
- if (this.getVertex() != null) {
- return this.getVertex().getId();
- } else if (this.getEdge() != null) {
- return this.getEdge().getId();
- }
-
- return null;
-
- }
-
- public String getObjectType() {
- if (this.getVertex() != null) {
- return "vertex->" + this.getVertex().getType();
- } else if (this.getEdge() != null) {
- return "edge->" + this.getEdge().getType();
- }
-
- return null;
-
- }
-
- public static class Builder {
-
- GraphEvent event = null;
-
- public Builder(GraphEventOperation operation) {
- event = new GraphEvent();
- event.operation = operation;
- }
-
- public Builder vertex(GraphEventVertex vertex) {
- event.vertex = vertex;
- return this;
- }
-
- public Builder edge(GraphEventEdge edge) {
- event.edge = edge;
- return this;
- }
-
- public Builder result(GraphEventResult result) {
- event.result = result;
- return this;
- }
-
- public Builder errorMessage(String errorMessage) {
- event.errorMessage = errorMessage;
- return this;
- }
-
- public Builder httpErrorStatus(Status httpErrorStatus) {
- event.httpErrorStatus = httpErrorStatus;
- return this;
- }
-
- public GraphEvent build() {
-
- event.timestamp = System.currentTimeMillis();
- event.transactionId = java.util.UUID.randomUUID().toString();
-
- return event;
- }
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/event/GraphEventEdge.java b/src/main/java/org/openecomp/crud/event/GraphEventEdge.java
deleted file mode 100644
index aaf9b72..0000000
--- a/src/main/java/org/openecomp/crud/event/GraphEventEdge.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.event;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.SerializedName;
-import com.google.gson.reflect.TypeToken;
-
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-
-import java.util.Map;
-import javax.ws.rs.core.Response.Status;
-
-/**
- * This class provides a generic representation of an Edge as provided by the
- * graph data store.
- */
-public class GraphEventEdge {
-
- /**
- * The unique identifier used to identify this edge in the graph data store.
- */
- @SerializedName("key")
- private String id;
-
- @SerializedName("schema-version")
- private String modelVersion;
-
- /**
- * Type label assigned to this vertex.
- */
- private String type;
-
- /**
- * Source vertex for our edge.
- */
- private GraphEventVertex source;
-
- /**
- * Target vertex for our edge.
- */
- private GraphEventVertex target;
-
- /**
- * Map of all of the properties assigned to this vertex.
- */
- private JsonElement properties;
-
- /**
- * Marshaller/unmarshaller for converting to/from JSON.
- */
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
-
- public GraphEventEdge(String id, String modelVersion, String type, GraphEventVertex source,
- GraphEventVertex target, JsonElement properties) {
- this.id = id;
- this.modelVersion = modelVersion;
- this.type = type;
- this.source = source;
- this.target = target;
- this.properties = properties;
- }
-
- public GraphEventEdge() {
-
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public GraphEventVertex getSource() {
- return source;
- }
-
- public void setSource(GraphEventVertex source) {
- this.source = source;
- }
-
- public GraphEventVertex getTarget() {
- return target;
- }
-
- public void setTarget(GraphEventVertex target) {
- this.target = target;
- }
-
- public JsonElement getProperties() {
- return properties;
- }
-
- public void setProperties(JsonElement properties) {
- this.properties = properties;
- }
-
- public String getModelVersion() {
- return modelVersion;
- }
-
- public void setModelVersion(String modelVersion) {
- this.modelVersion = modelVersion;
- }
-
- /**
- * Unmarshalls this Edge object into a JSON string.
- *
- * @return - A JSON format string representation of this Edge.
- */
- public String toJson() {
- return gson.toJson(this);
- }
-
- /**
- * Marshalls the provided JSON string into a Edge object.
- *
- * @param json - The JSON string to produce the Edge from.
- * @return - A Edge object.
- * @throws SpikeException
- */
- public static GraphEventEdge fromJson(String json) throws CrudException {
-
- try {
-
- // Make sure that we were actually provided a non-empty string
- // before we
- // go any further.
- if (json == null || json.isEmpty()) {
- throw new CrudException("Unable to parse JSON string: ", Status.BAD_REQUEST);
- }
-
- // Marshall the string into an Edge object.
- return gson.fromJson(json, GraphEventEdge.class);
-
- } catch (Exception ex) {
- throw new CrudException("Unable to parse JSON string: ", Status.BAD_REQUEST);
- }
- }
-
- public static GraphEventEdge fromEdge(Edge edge, String modelVersion) {
-
- java.lang.reflect.Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
- JsonObject props = gson.toJsonTree(edge.getProperties(), mapType).getAsJsonObject();
-
- GraphEventEdge graphEventEdge = new GraphEventEdge(edge.getId().orElse(""), modelVersion,
- edge.getType(), new GraphEventVertex(edge.getSource().getId().orElse(""), null,
- edge.getSource().getType(), null), new GraphEventVertex(edge.getTarget().getId().orElse(""),
- null, edge.getTarget().getType(), null), props);
-
- return graphEventEdge;
-
- }
-
- public Edge toEdge() {
- Edge.Builder builder = new Edge.Builder(this.getType()).id(this.getId());
- if (this.getSource() != null) {
- builder.source(new Vertex.Builder(this.getSource().getType()).id(this.getSource().getId())
- .build());
- }
- if (this.getTarget() != null) {
- builder.target(new Vertex.Builder(this.getTarget().getType()).id(this.getTarget().getId())
- .build());
- }
-
- if (this.getProperties() != null) {
- java.lang.reflect.Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
- Map<String, Object> propertiesMap = gson.fromJson(this.getProperties(), mapType);
- for (String key : propertiesMap.keySet()) {
- builder.property(key, propertiesMap.get(key));
- }
- }
- return builder.build();
-
- }
-}
diff --git a/src/main/java/org/openecomp/crud/event/GraphEventVertex.java b/src/main/java/org/openecomp/crud/event/GraphEventVertex.java
deleted file mode 100644
index 7fde12a..0000000
--- a/src/main/java/org/openecomp/crud/event/GraphEventVertex.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.event;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.SerializedName;
-import com.google.gson.reflect.TypeToken;
-
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-
-import java.util.Map;
-import javax.ws.rs.core.Response.Status;
-
-/**
- * This class provides a generic representation of a Vertex as provided by the
- * graph data store.
- */
-public class GraphEventVertex {
-
- /**
- * The unique identifier used to identify this vertex in the graph data
- * store.
- */
- @SerializedName("key")
- private String id;
-
- @SerializedName("schema-version")
- private String modelVersion;
-
- /**
- * Type label assigned to this vertex.
- */
- private String type;
-
- /**
- * Map of all of the properties assigned to this vertex.
- */
- private JsonElement properties;
-
- /**
- * Marshaller/unmarshaller for converting to/from JSON.
- */
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
-
- public GraphEventVertex(String id, String modelVersion, String type, JsonElement properties) {
- this.id = id;
- this.modelVersion = modelVersion;
- this.type = type;
- this.properties = properties;
- }
-
- public GraphEventVertex() {
-
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
-
- public JsonElement getProperties() {
- return properties;
- }
-
- public void setProperties(JsonElement properties) {
- this.properties = properties;
- }
-
- public String getModelVersion() {
- return modelVersion;
- }
-
- public void setModelVersion(String modelVersion) {
- this.modelVersion = modelVersion;
- }
-
- /**
- * Unmarshalls this Vertex object into a JSON string.
- *
- * @return - A JSON format string representation of this Vertex.
- */
- public String toJson() {
- return gson.toJson(this);
- }
-
- /**
- * Marshalls the provided JSON string into a Vertex object.
- *
- * @param json - The JSON string to produce the Vertex from.
- * @return - A Vertex object.
- * @throws SpikeException
- */
- public static GraphEventVertex fromJson(String json) throws CrudException {
-
- try {
-
- // Make sure that we were actually provided a non-empty string
- // before we
- // go any further.
- if (json == null || json.isEmpty()) {
- throw new CrudException("Empty or null JSON string.", Status.BAD_REQUEST);
- }
-
- // Marshall the string into a Vertex object.
- return gson.fromJson(json, GraphEventVertex.class);
-
- } catch (Exception ex) {
- throw new CrudException("Unable to parse JSON string: ", Status.BAD_REQUEST);
- }
- }
-
- @Override
- public String toString() {
-
- return toJson();
- }
-
- public static GraphEventVertex fromVertex(Vertex vertex, String modelVersion) {
-
- java.lang.reflect.Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
- JsonObject props = gson.toJsonTree(vertex.getProperties(), mapType).getAsJsonObject();
- GraphEventVertex graphEventVertex = new GraphEventVertex(vertex.getId().orElse(""),
- modelVersion, vertex.getType(), props);
- return graphEventVertex;
-
- }
-
- public Vertex toVertex() {
- Vertex.Builder builder = new Vertex.Builder(this.getType()).id(this.getId());
-
- if (this.getProperties() != null) {
- java.lang.reflect.Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
- Map<String, Object> propertiesMap = gson.fromJson(this.getProperties(), mapType);
- for (String key : propertiesMap.keySet()) {
- builder.property(key, propertiesMap.get(key));
- }
- }
-
- return builder.build();
-
- }
-
-
-}
diff --git a/src/main/java/org/openecomp/crud/exception/CrudException.java b/src/main/java/org/openecomp/crud/exception/CrudException.java
deleted file mode 100644
index 2911070..0000000
--- a/src/main/java/org/openecomp/crud/exception/CrudException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.exception;
-
-import javax.ws.rs.core.Response.Status;
-
-public class CrudException extends Exception {
-
- private static final long serialVersionUID = 8162385108397238865L;
-
- private Status httpStatus;
-
- public CrudException() {
- }
-
- public CrudException(String message, Status httpStatus) {
- super(message);
- this.setHttpStatus(httpStatus);
- }
-
- public CrudException(Throwable cause) {
- super(cause);
- }
-
- public CrudException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public CrudException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
- public Status getHttpStatus() {
- return httpStatus;
- }
-
- public void setHttpStatus(Status httpStatus) {
- this.httpStatus = httpStatus;
- }
-}
diff --git a/src/main/java/org/openecomp/crud/logging/CrudServiceMsgs.java b/src/main/java/org/openecomp/crud/logging/CrudServiceMsgs.java
deleted file mode 100644
index 4298709..0000000
--- a/src/main/java/org/openecomp/crud/logging/CrudServiceMsgs.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.logging;
-
-import com.att.eelf.i18n.EELFResourceManager;
-
-import org.openecomp.cl.eelf.LogMessageEnum;
-
-public enum CrudServiceMsgs implements LogMessageEnum {
-
- /**
- * Received request {0} {1} from {2}. Sending response: {3}
- *
- * <p>
- * Arguments: {0} = operation {1} = target URL {2} = source {3} = response
- * code
- */
- PROCESS_REST_REQUEST,
-
- INVALID_OXM_FILE, INVALID_OXM_DIR, OXM_FILE_CHANGED, TRANSACTION,
-
- /**
- * Successfully loaded schema: {0}
- *
- * <p>
- * Arguments: {0} = oxm filename
- */
- LOADED_OXM_FILE,
-
- /**
- * Unable to load OXM schema: {0}
- *
- * <p>
- * Arguments: {0} = error
- */
- OXM_LOAD_ERROR,
-
- /**
- * Stopping ChampDAO...
- *
- * <p>
- * Arguments:
- */
- STOPPING_CHAMP_DAO,
-
- /**
- * Failure instantiating CRUD Rest Service. Cause: {0}
- *
- * <p>
- * Arguments: {0} - Failure cause.
- */
- INSTANTIATE_AUTH_ERR,
-
- /**
- * Arguments: {0} Opertaion {1} URI {2} = Exception
- */
- EXCEPTION_DURING_METHOD_CALL;
-
- /**
- * Static initializer to ensure the resource bundles for this class are
- * loaded...
- */
- static {
- EELFResourceManager.loadMessageBundle("logging/CrudServiceMsgs");
- }
-}
diff --git a/src/main/java/org/openecomp/crud/logging/LoggingUtil.java b/src/main/java/org/openecomp/crud/logging/LoggingUtil.java
deleted file mode 100644
index b66a309..0000000
--- a/src/main/java/org/openecomp/crud/logging/LoggingUtil.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.logging;
-
-import org.openecomp.cl.api.LogFields;
-import org.openecomp.cl.api.LogLine;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.mdc.MdcContext;
-import org.openecomp.crud.util.CrudServiceConstants;
-import org.slf4j.MDC;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Response;
-
-public class LoggingUtil {
- /**
- * Initializes mdc context.
- */
- public static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) {
- String fromIp = httpReq.getRemoteAddr();
- String fromAppId = "";
- String transId = null;
-
- if (headers.getRequestHeaders().getFirst("X-FromAppId") != null) {
- fromAppId = headers.getRequestHeaders().getFirst("X-FromAppId");
- }
-
- if ((headers.getRequestHeaders().getFirst("X-TransactionId") == null)
- || headers.getRequestHeaders().getFirst("X-TransactionId").isEmpty()) {
- transId = java.util.UUID.randomUUID().toString();
- } else {
- transId = headers.getRequestHeaders().getFirst("X-TransactionId");
- }
-
- MdcContext.initialize(transId, CrudServiceConstants.CRD_SERVICE_NAME, "", fromAppId, fromIp);
- }
-
- /**
- * Logs the rest request.
- */
- public static void logRestRequest(Logger logger, Logger auditLogger, HttpServletRequest req, Response response) {
- String respStatusString = "";
- if (Response.Status.fromStatusCode(response.getStatus()) != null) {
- respStatusString = Response.Status.fromStatusCode(response.getStatus()).toString();
- }
-
- // Generate error log
- logger.info(CrudServiceMsgs.PROCESS_REST_REQUEST, req.getMethod(), req.getRequestURL().toString(),
- req.getRemoteHost(), Integer.toString(response.getStatus()));
-
- // Generate audit log.
- auditLogger.info(CrudServiceMsgs.PROCESS_REST_REQUEST,
- new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, response.getStatus())
- .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, respStatusString),
- (req != null) ? req.getMethod() : "Unknown", (req != null) ? req.getRequestURL().toString() : "Unknown",
- (req != null) ? req.getRemoteHost() : "Unknown", Integer.toString(response.getStatus()) + " payload: "
- + (response.getEntity() == null ? "" : response.getEntity().toString()));
- MDC.clear();
- }
-}
diff --git a/src/main/java/org/openecomp/crud/parser/CrudResponseBuilder.java b/src/main/java/org/openecomp/crud/parser/CrudResponseBuilder.java
deleted file mode 100644
index b527fa1..0000000
--- a/src/main/java/org/openecomp/crud/parser/CrudResponseBuilder.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.parser;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.service.BulkPayload;
-import org.openecomp.crud.service.EdgePayload;
-import org.openecomp.crud.service.VertexPayload;
-import org.openecomp.schema.RelationshipSchemaLoader;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-public class CrudResponseBuilder {
-
- private static final Gson gson = new GsonBuilder().create();
-
- public static final String SOURCE = "source";
- public static final String TARGET = "target";
- public static final String URL_BASE = "services/inventory/";
-
- public static String buildUpsertBulkResponse(HashMap<String, Vertex> vertices, HashMap<String, Edge> edges,
- String version, BulkPayload incomingPayload) throws CrudException {
-
- for (JsonElement e : incomingPayload.getObjects()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- e.getAsJsonObject().entrySet());
-
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- Vertex responseVertex = vertices.get(item.getKey());
- if (responseVertex != null) {
- JsonObject v = gson.fromJson(buildUpsertVertexResponse(responseVertex, version), JsonObject.class);
- item.setValue(v);
- } else {
- item.setValue(gson.fromJson("{}", JsonObject.class));
- }
-
- }
- for (JsonElement e : incomingPayload.getRelationships()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- e.getAsJsonObject().entrySet());
-
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- Edge responseEdge = edges.get(item.getKey());
- if (responseEdge != null) {
- JsonObject v = gson.fromJson(buildUpsertEdgeResponse(responseEdge, version), JsonObject.class);
- item.setValue(v);
- } else {
- item.setValue(gson.fromJson("{}", JsonObject.class));
- }
-
- }
- return incomingPayload.toJson();
- }
-
- public static String buildUpsertVertexResponse(Vertex vertex, String version) throws CrudException {
- VertexPayload payload = new VertexPayload();
- payload.setId(vertex.getId().get());
- payload.setType(vertex.getType());
- payload.setUrl(URL_BASE + version + "/" + vertex.getType() + "/" + vertex.getId().get());
- JsonObject props = new JsonObject();
- for (String key : vertex.getProperties().keySet()) {
- addJsonProperperty(props, key, vertex.getProperties().get(key));
- }
- payload.setProperties(props);
- return payload.toJson();
- }
-
- public static String buildUpsertEdgeResponse(Edge edge, String version) throws CrudException {
- return buildGetEdgeResponse(edge, version);
- }
-
- public static String buildGetVertexResponse(Vertex vertex, List<Edge> edges, String version) throws CrudException {
- VertexPayload vertexPayload = new VertexPayload();
- vertexPayload.setId(vertex.getId().get());
- vertexPayload.setType(vertex.getType());
- vertexPayload.setUrl(URL_BASE + version + "/" + vertex.getType() + "/" + vertex.getId().get());
- JsonObject props = new JsonObject();
- for (String key : vertex.getProperties().keySet()) {
- addJsonProperperty(props, key, vertex.getProperties().get(key));
- }
- vertexPayload.setProperties(props);
- List<EdgePayload> inEdges = new ArrayList<EdgePayload>();
- List<EdgePayload> outEdges = new ArrayList<EdgePayload>();
- for (Edge e : edges) {
- if (e.getTarget().getId().get().equals(vertex.getId().get())) {
- EdgePayload inEdge = new EdgePayload();
- inEdge.setId(e.getId().get());
- inEdge.setType(e.getType());
- inEdge.setUrl(URL_BASE + "relationships/" + RelationshipSchemaLoader.getLatestSchemaVersion() + "/"
- + e.getType() + "/" + e.getId().get());
- inEdge.setSource(URL_BASE + version + "/" + e.getSource().getType() + "/" + e.getSource().getId().get());
-
- inEdges.add(inEdge);
- } else if (e.getSource().getId().get().equals(vertex.getId().get())) {
- EdgePayload outEdge = new EdgePayload();
- outEdge.setId(e.getId().get());
- outEdge.setType(e.getType());
- outEdge.setUrl(URL_BASE + "relationships/" + RelationshipSchemaLoader.getLatestSchemaVersion() + "/"
- + e.getType() + "/" + e.getId().get());
- outEdge.setTarget(URL_BASE + version + "/" + e.getTarget().getType() + "/" + e.getTarget().getId().get());
- outEdges.add(outEdge);
- }
- }
-
- vertexPayload.setIn(inEdges);
- vertexPayload.setOut(outEdges);
-
- return vertexPayload.toJson();
- }
-
- public static String buildGetVerticesResponse(List<Vertex> items, String version) throws CrudException {
-
- JsonArray arry = new JsonArray();
- for (Vertex v : items) {
- JsonObject item = new JsonObject();
- item.addProperty("id", v.getId().get());
- item.addProperty("type", v.getType());
- item.addProperty("url", "services/inventory/" + version + "/" + v.getType() + "/" + v.getId().get());
-
- arry.add(item);
- }
-
- return gson.toJson(arry);
- }
-
- public static String buildGetEdgeResponse(Edge edge, String version) throws CrudException {
-
- EdgePayload payload = new EdgePayload();
- payload.setId(edge.getId().get());
- payload.setType(edge.getType());
- payload.setUrl(URL_BASE + "relationships/" + version + "/" + edge.getType() + "/" + edge.getId().get());
- payload.setSource(URL_BASE + version + "/" + edge.getSource().getType() + "/" + edge.getSource().getId().get());
- payload.setTarget(URL_BASE + version + "/" + edge.getTarget().getType() + "/" + edge.getTarget().getId().get());
-
- JsonObject props = new JsonObject();
- for (String key : edge.getProperties().keySet()) {
- addJsonProperperty(props, key, edge.getProperties().get(key));
- }
- payload.setProperties(props);
- return payload.toJson();
- }
-
- public static String buildGetEdgesResponse(List<Edge> items, String version) throws CrudException {
-
- JsonArray arry = new JsonArray();
- for (Edge e : items) {
- JsonObject item = new JsonObject();
- item.addProperty("id", e.getId().get());
- item.addProperty("type", e.getType());
- item.addProperty("url", URL_BASE + "relationships/" + version + "/" + e.getType() + "/" + e.getId().get());
- item.addProperty(SOURCE,
- "services/inventory/" + version + "/" + e.getSource().getType() + "/" + e.getSource().getId().get());
- item.addProperty(TARGET,
- "services/inventory/" + version + "/" + e.getTarget().getType() + "/" + e.getTarget().getId().get());
- arry.add(item);
- }
-
- return gson.toJson(arry);
- }
-
- private static void addJsonProperperty(JsonObject jsonObj, String key, Object value) {
- if (value instanceof Integer) {
- jsonObj.addProperty(key, (Integer) value);
- } else if (value instanceof Boolean) {
- jsonObj.addProperty(key, (Boolean) value);
- } else if (value instanceof Double) {
- jsonObj.addProperty(key, (Double) value);
- } else if (value instanceof String) {
- jsonObj.addProperty(key, (String) value);
- } else {
- jsonObj.addProperty(key, value.toString());
- }
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/service/AaiResourceService.java b/src/main/java/org/openecomp/crud/service/AaiResourceService.java
deleted file mode 100644
index 9c6565a..0000000
--- a/src/main/java/org/openecomp/crud/service/AaiResourceService.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import java.security.cert.X509Certificate;
-import java.util.AbstractMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.security.auth.x500.X500Principal;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.aai.exceptions.AAIException;
-import org.onap.aai.serialization.db.EdgeProperty;
-import org.onap.aai.serialization.db.EdgeRule;
-import org.onap.aai.serialization.db.EdgeRules;
-import org.onap.aai.serialization.db.EdgeType;
-import org.openecomp.auth.Auth;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.logging.CrudServiceMsgs;
-import org.openecomp.crud.logging.LoggingUtil;
-import org.openecomp.crud.service.CrudRestService.Action;
-import org.openecomp.crud.util.CrudServiceConstants;
-import org.openecomp.schema.RelationshipSchemaLoader;
-import org.openecomp.schema.RelationshipSchemaValidator;
-import org.slf4j.MDC;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-
-/**
- * This defines a set of REST endpoints which allow clients to create or update graph edges
- * where the edge rules defined by the A&AI will be invoked to automatically populate the
- * defined edge properties.
- */
-public class AaiResourceService {
-
- private String mediaType = MediaType.APPLICATION_JSON;
- public static final String HTTP_PATCH_METHOD_OVERRIDE = "X-HTTP-Method-Override";
-
- private Auth auth;
- CrudGraphDataService crudGraphDataService;
- Gson gson = new Gson();
-
- private Logger logger = LoggerFactory.getInstance().getLogger(AaiResourceService.class.getName());
- private Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(AaiResourceService.class.getName());
-
- public AaiResourceService() {}
-
- /**
- * Creates a new instance of the AaiResourceService.
- *
- * @param crudGraphDataService - Service used for interacting with the graph.
- *
- * @throws Exception
- */
- public AaiResourceService(CrudGraphDataService crudGraphDataService) throws Exception {
- this.crudGraphDataService = crudGraphDataService;
- this.auth = new Auth(CrudServiceConstants.CRD_AUTH_FILE);
- }
-
- /**
- * Perform any one-time initialization required when starting the service.
- */
- public void startup() {
-
- if(logger.isDebugEnabled()) {
- logger.debug("AaiResourceService started!");
- }
- }
-
-
- /**
- * Creates a new relationship in the graph, automatically populating the edge
- * properties based on the A&AI edge rules.
- *
- * @param content - Json structure describing the relationship to create.
- * @param type - Relationship type supplied as a URI parameter.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- */
- @POST
- @Path("/relationships/{type}/")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response createRelationship(String content,
- @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- if(logger.isDebugEnabled()) {
- logger.debug("Incoming request..." + content);
- }
-
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
- if (payload.getType() != null && !payload.getType().equals(type)) {
- throw new CrudException("Edge Type mismatch", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
-
- if(logger.isDebugEnabled()) {
- logger.debug("Creating AAI edge using version " + RelationshipSchemaLoader.getLatestSchemaVersion() );
- }
-
- // Now, create our edge in the graph store.
- String result = crudGraphDataService.addEdge(RelationshipSchemaLoader.getLatestSchemaVersion(), type, payload);
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
-
- } catch (CrudException e) {
-
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
- /**
- * Creates a new relationship in the graph, automatically populating the edge
- * properties based on the A&AI edge rules.
- *
- * @param content - Json structure describing the relationship to create.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- *
- */
- @POST
- @Path("/relationships/")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response createRelationship(String content,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
- if (payload.getType() == null || payload.getType().isEmpty()) {
- throw new CrudException("Missing Edge Type ", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
-
- // Now, create our edge in the graph store.
- String result = crudGraphDataService.addEdge(RelationshipSchemaLoader.getLatestSchemaVersion(), payload.getType(), payload);
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
-
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content)
- .type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
-
- /**
- * Upserts a relationship into the graph, automatically populating the edge properties
- * based on the A&AI edge rules. The behaviour is as follows:
- * <p>
- * <li>If no relationship with the supplied identifier already exists, then a new relationship
- * is created with that id.<br>
- * <li>If a relationship with the supplied id DOES exist, then it is replaced with the supplied
- * content.
- *
- * @param content - Json structure describing the relationship to create.
- * @param type - Relationship type supplied as a URI parameter.
- * @param id - Edge identifier.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- */
- @PUT
- @Path("/relationships/{type}/{id}")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response upsertEdge(String content,
- @PathParam("type") String type,
- @PathParam("id") String id,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
-
- String result;
- if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null &&
- headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE).equalsIgnoreCase("PATCH")) {
- result = crudGraphDataService.patchEdge(RelationshipSchemaLoader.getLatestSchemaVersion(), id, type, payload);
- } else {
-
- result = crudGraphDataService.updateEdge(RelationshipSchemaLoader.getLatestSchemaVersion(), id, type, payload);
- }
-
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
-
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
-
- } else {
-
- response = Response.status(Status.FORBIDDEN).entity(content)
- .type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
- /**
- * Retrieves the properties defined in the edge rules for a relationship between the
- * supplied vertex types.
- *
- * @param sourceVertexType - Type of source vertex for the relationship.
- * @param targetVertexType - Type of target vertex for the relationship.
- *
- * @return - The defined properties for the relationship type.
- *
- * @throws CrudException
- */
- private Map<EdgeProperty, String> getEdgeRuleProperties(String sourceVertexType, String targetVertexType) throws CrudException {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup db edge rules for " + sourceVertexType + " -> " + targetVertexType);
- }
-
- EdgeRules rules = EdgeRules.getInstance();
- EdgeRule rule;
- try {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup by edge type TREE");
- }
-
- // We have no way of knowing in advance whether our relationship is considered to
- // be a tree or cousing relationship, so try looking it up as a tree type first.
- rule = rules.getEdgeRule(EdgeType.TREE, sourceVertexType, targetVertexType);
-
- } catch (AAIException e) {
- try {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup by edge type COUSIN");
- }
-
- // If we are here, then our lookup by 'tree' type failed, so try looking it up
- // as a 'cousin' relationship.
- rule = rules.getEdgeRule(EdgeType.COUSIN, sourceVertexType, targetVertexType);
-
- } catch (AAIException e1) {
-
- // If we're here then we failed to find edge rules for this relationship. Time to
- // give up...
- throw new CrudException("No edge rules for " + sourceVertexType + " -> " + targetVertexType, Status.NOT_FOUND);
- }
- } catch (Exception e) {
-
- throw new CrudException("General failure getting edge rule properties - " +
- e.getMessage(), Status.INTERNAL_SERVER_ERROR);
- }
-
- return rule.getEdgeProperties();
- }
-
-
- /**
- * This method takes an inbound edge request payload, looks up the edge rules for the
- * sort of relationship defined in the payload, and automatically applies the defined
- * edge properties to it.
- *
- * @param payload - The original edge request payload
- *
- * @return - An updated edge request payload, with the properties defined in the edge
- * rules automatically populated.
- *
- * @throws CrudException
- */
- public EdgePayload applyEdgeRulesToPayload(EdgePayload payload) throws CrudException {
-
- // Extract the types for both the source and target vertices.
- String srcType = RelationshipSchemaValidator.vertexTypeFromUri(payload.getSource());
- String tgtType = RelationshipSchemaValidator.vertexTypeFromUri(payload.getTarget());
-
- // Now, get the default properties for this edge based on the edge rules definition...
- Map<EdgeProperty, String> props = getEdgeRuleProperties(srcType, tgtType);
-
- // ...and merge them with any custom properties provided in the request.
- JsonElement mergedProperties = mergeProperties(payload.getProperties(), props);
- payload.setProperties(mergedProperties);
-
-
- if(logger.isDebugEnabled()) {
- logger.debug("Edge properties after applying rules for '" + srcType + " -> " + tgtType + "': " + mergedProperties);
- }
-
- return payload;
- }
-
-
- /**
- * Given a set of edge properties extracted from an edge request payload and a set of properties
- * taken from the db edge rules, this method merges them into one set of properties.
- * <p>
- * If the client has attempted to override the defined value for a property in the db edge rules
- * then the request will be rejected as invalid.
- *
- * @param propertiesFromRequest - Set of properties from the edge request.
- * @param propertyDefaults - Set of properties from the db edge rules.
- *
- * @return - A merged set of properties.
- *
- * @throws CrudException
- */
- public JsonElement mergeProperties(JsonElement propertiesFromRequest, Map<EdgeProperty, String> propertyDefaults) throws CrudException {
-
- // Convert the properties from the edge payload into something we can
- // manipulate.
- Set<Map.Entry<String, JsonElement>> properties = new HashSet<Map.Entry<String, JsonElement>>();
- properties.addAll(propertiesFromRequest.getAsJsonObject().entrySet());
-
- Set<String> propertyKeys = new HashSet<String>();
- for(Map.Entry<String, JsonElement> property : properties) {
- propertyKeys.add(property.getKey());
- }
-
- // Now, merge in the properties specified in the Db Edge Rules.
- for(EdgeProperty defProperty : propertyDefaults.keySet()) {
-
- // If the edge rules property was explicitly specified by the
- // client then we will reject the request...
- if(!propertyKeys.contains(defProperty.toString())) {
- properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(defProperty.toString(),
- (JsonElement)(new JsonPrimitive(propertyDefaults.get(defProperty)))));
-
- } else {
- throw new CrudException("Property " + defProperty + " defined in db edge rules can not be overriden by the client.",
- Status.BAD_REQUEST);
- }
- }
-
- Object[] propArray = properties.toArray();
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- boolean first=true;
- for(int i=0; i<propArray.length; i++) {
-
- Map.Entry<String, JsonElement> entry = (Entry<String, JsonElement>) propArray[i];
- if(!first) {
- sb.append(",");
- }
- sb.append("\"").append(entry.getKey()).append("\"").append(":").append(entry.getValue());
- first=false;
- }
- sb.append("}");
-
- // We're done. Return the result as a JsonElement.
- return gson.fromJson(sb.toString(), JsonElement.class);
- }
-
-
- /**
- * Invokes authentication validation on an incoming HTTP request.
- *
- * @param req - The HTTP request.
- * @param uri - HTTP URI
- * @param content - Payload of the HTTP request.
- * @param action - What HTTP action is being performed (GET/PUT/POST/PATCH/DELETE)
- * @param authPolicyFunctionName - Policy function being invoked.
- *
- * @return true - if the request passes validation,
- * false - otherwise.
- */
- protected boolean validateRequest(HttpServletRequest req,
- String uri,
- String content,
- Action action,
- String authPolicyFunctionName) {
- try {
- String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
- String authUser = null;
- if (cipherSuite != null) {
-
- X509Certificate[] certChain = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
- X509Certificate clientCert = certChain[0];
- X500Principal subjectDn = clientCert.getSubjectX500Principal();
- authUser = subjectDn.toString();
- }
-
- return this.auth.validateRequest(authUser.toLowerCase(), action.toString() + ":" + authPolicyFunctionName);
-
- } catch (Exception e) {
- logResult(action, uri, e);
- return false;
- }
- }
-
- protected void logResult(Action op, String uri, Exception e) {
-
- logger.error(CrudServiceMsgs.EXCEPTION_DURING_METHOD_CALL,
- op.toString(),
- uri,
- e.getStackTrace().toString());
-
- // Clear the MDC context so that no other transaction inadvertently
- // uses our transaction id.
- MDC.clear();
- }
-}
diff --git a/src/main/java/org/openecomp/crud/service/BulkPayload.java b/src/main/java/org/openecomp/crud/service/BulkPayload.java
deleted file mode 100644
index 619c53b..0000000
--- a/src/main/java/org/openecomp/crud/service/BulkPayload.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import org.openecomp.crud.exception.CrudException;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ws.rs.core.Response.Status;
-
-public class BulkPayload {
- public enum OperationType {
- CREATE, UPDATE, DELETE
- }
-
- private List<JsonElement> objects = new ArrayList<JsonElement>();
- private List<JsonElement> relationships = new ArrayList<JsonElement>();
-
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
-
- public String toJson() {
- return gson.toJson(this);
- }
-
- public static BulkPayload fromJson(String payload) throws CrudException {
- try {
- if (payload == null || payload.isEmpty()) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- return gson.fromJson(payload, BulkPayload.class);
- } catch (Exception ex) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- }
-
- public List<JsonElement> getObjects() {
- return objects;
- }
-
- public void setObjects(List<JsonElement> objects) {
- this.objects = objects;
- }
-
- public List<JsonElement> getRelationships() {
- return relationships;
- }
-
- public void setRelationships(List<JsonElement> relationships) {
- this.relationships = relationships;
- }
-
- @Override
- public String toString() {
- return "BulkPayload [objects=" + objects + ", relationships=" + relationships + "]";
- }
-
- public static void main(String[] args) throws Exception {
- BulkPayload p = new BulkPayload();
- JsonObject root = new JsonObject();
- JsonArray vertices = new JsonArray();
- JsonObject v1 = new JsonObject();
- JsonObject v2 = new JsonObject();
- JsonObject prop = new JsonObject();
-
- prop.addProperty("p1", "value1");
- prop.addProperty("p2", "value2");
- v1.add("v1", prop);
- v2.add("v2", prop);
-
- vertices.add(v1);
- vertices.add(v2);
-
- root.add("objects", vertices);
-
- String s = "{\"objects\":[{\"v1\":{\"p1\":\"value1\",\"p2\":\"value2\"}},{\"v2\":{\"p1\":\"value1\",\"p2\":\"value2\"}}]}";
-
- p = BulkPayload.fromJson(s);
-
- List<JsonElement> po = p.getObjects();
- List<String> ids = new ArrayList<String>();
- for (JsonElement e : po) {
- Set<Map.Entry<String, JsonElement>> entries = e.getAsJsonObject().entrySet();
-
- for (Map.Entry<String, JsonElement> entry : entries) {
- ids.add(entry.getKey());
- }
- }
-
- System.out.println("root: " + root.toString());
- System.out.println("payload ids: " + ids.toString());
-
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/openecomp/crud/service/CrudGraphDataService.java b/src/main/java/org/openecomp/crud/service/CrudGraphDataService.java
deleted file mode 100644
index 340fafa..0000000
--- a/src/main/java/org/openecomp/crud/service/CrudGraphDataService.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.aaiutils.oxm.OxmModelLoader;
-import org.openecomp.aai.champcore.ChampGraph;
-import org.openecomp.crud.dao.GraphDao;
-import org.openecomp.crud.dao.champ.ChampDao;
-import org.openecomp.crud.entity.Edge;
-
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.parser.CrudResponseBuilder;
-import org.openecomp.schema.OxmModelValidator;
-import org.openecomp.schema.RelationshipSchemaLoader;
-import org.openecomp.schema.RelationshipSchemaValidator;
-
-import com.google.gson.JsonElement;
-
-public class CrudGraphDataService {
-
- private GraphDao dao;
-
- public CrudGraphDataService(ChampGraph graphImpl) throws CrudException {
- this.dao = new ChampDao(graphImpl);
-
- loadModels();
- }
-
- public CrudGraphDataService(GraphDao dao) throws CrudException {
- this.dao = dao;
-
- loadModels();
- }
-
- private void loadModels() throws CrudException {
- // load the schemas
- try {
- OxmModelLoader.loadModels();
- } catch (Exception e) {
- throw new CrudException(e);
- }
- RelationshipSchemaLoader.loadModels();
- }
-
- public String addVertex(String version, String type, VertexPayload payload) throws CrudException {
- Vertex vertex = OxmModelValidator.validateIncomingUpsertPayload(null, version, type, payload.getProperties());
- return addVertex(version, vertex);
- }
-
- public String addBulk(String version, BulkPayload payload) throws CrudException {
- HashMap<String, Vertex> vertices = new HashMap<String, Vertex>();
- HashMap<String, Edge> edges = new HashMap<String, Edge>();
- String txId = dao.openTransaction();
- try {
- // Handle vertices
- for (JsonElement v : payload.getObjects()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- v.getAsJsonObject().entrySet());
-
- if (entries.size() != 2) {
- throw new CrudException("", Status.BAD_REQUEST);
- }
- Map.Entry<String, JsonElement> opr = entries.get(0);
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- VertexPayload vertexPayload = VertexPayload.fromJson(item.getValue().getAsJsonObject().toString());
-
- if (opr.getValue().getAsString().equalsIgnoreCase("add")
- || opr.getValue().getAsString().equalsIgnoreCase("modify")) {
- Vertex validatedVertex;
- Vertex persistedVertex;
- if (opr.getValue().getAsString().equalsIgnoreCase("add")) {
- validatedVertex = OxmModelValidator.validateIncomingUpsertPayload(null, version, vertexPayload.getType(),
- vertexPayload.getProperties());
- // Call champDAO to add the vertex
- persistedVertex = dao.addVertex(validatedVertex.getType(), validatedVertex.getProperties(), txId);
- } else {
- validatedVertex = OxmModelValidator.validateIncomingUpsertPayload(vertexPayload.getId(), version,
- vertexPayload.getType(), vertexPayload.getProperties());
- // Call champDAO to update the vertex
- persistedVertex = dao.updateVertex(vertexPayload.getId(), validatedVertex.getType(),
- validatedVertex.getProperties(), txId);
- }
-
- Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex);
-
- vertices.put(item.getKey(), outgoingVertex);
-
- } else if (opr.getValue().getAsString().equalsIgnoreCase("delete")) {
- dao.deleteVertex(vertexPayload.getId(),
- OxmModelValidator.resolveCollectionType(version, vertexPayload.getType()), txId);
- }
-
- }
- // Handle Edges
- for (JsonElement v : payload.getRelationships()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- v.getAsJsonObject().entrySet());
-
- if (entries.size() != 2) {
- throw new CrudException("", Status.BAD_REQUEST);
- }
- Map.Entry<String, JsonElement> opr = entries.get(0);
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- EdgePayload edgePayload = EdgePayload.fromJson(item.getValue().getAsJsonObject().toString());
-
- if (opr.getValue().getAsString().equalsIgnoreCase("add")
- || opr.getValue().getAsString().equalsIgnoreCase("modify")) {
- Edge validatedEdge;
- Edge persistedEdge;
- if (opr.getValue().getAsString().equalsIgnoreCase("add")) {
- // Fix the source/detination
- if (edgePayload.getSource().startsWith("$")) {
- Vertex source = vertices.get(edgePayload.getSource().substring(1));
- if (source == null) {
- throw new CrudException("Not able to find vertex: " + edgePayload.getSource().substring(1),
- Status.INTERNAL_SERVER_ERROR);
- }
- edgePayload
- .setSource("services/inventory/" + version + "/" + source.getType() + "/" + source.getId().get());
- }
- if (edgePayload.getTarget().startsWith("$")) {
- Vertex target = vertices.get(edgePayload.getTarget().substring(1));
- if (target == null) {
- throw new CrudException("Not able to find vertex: " + edgePayload.getTarget().substring(1),
- Status.INTERNAL_SERVER_ERROR);
- }
- edgePayload
- .setTarget("services/inventory/" + version + "/" + target.getType() + "/" + target.getId().get());
- }
- validatedEdge = RelationshipSchemaValidator.validateIncomingAddPayload(version, edgePayload.getType(),
- edgePayload);
- persistedEdge = dao.addEdge(validatedEdge.getType(), validatedEdge.getSource(), validatedEdge.getTarget(),
- validatedEdge.getProperties(), txId);
- } else {
- Edge edge = dao.getEdge(edgePayload.getId(), edgePayload.getType(), txId);
- validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload);
- persistedEdge = dao.updateEdge(edge, txId);
- }
-
- Edge outgoingEdge = RelationshipSchemaValidator.validateOutgoingPayload(version, persistedEdge);
-
- edges.put(item.getKey(), outgoingEdge);
-
- } else if (opr.getValue().getAsString().equalsIgnoreCase("delete")) {
- RelationshipSchemaValidator.validateType(version, edgePayload.getType());
- dao.deleteEdge(edgePayload.getId(), edgePayload.getType(), txId);
- }
-
- }
- // close champ TX
- dao.commitTransaction(txId);
- } catch (CrudException ex) {
- dao.rollbackTransaction(txId);
- throw ex;
- } catch (Exception ex) {
- dao.rollbackTransaction(txId);
- throw ex;
- } finally {
- if (dao.transactionExists(txId)) {
- dao.rollbackTransaction(txId);
- }
- }
-
- return CrudResponseBuilder.buildUpsertBulkResponse(vertices, edges, version, payload);
- }
-
- private String addVertex(String version, Vertex vertex) throws CrudException {
- Vertex addedVertex = dao.addVertex(vertex.getType(), vertex.getProperties());
- return CrudResponseBuilder
- .buildUpsertVertexResponse(OxmModelValidator.validateOutgoingPayload(version, addedVertex), version);
- }
-
- public String addEdge(String version, String type, EdgePayload payload) throws CrudException {
- Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload);
- return addEdge(version, edge);
- }
-
- private String addEdge(String version, Edge edge) throws CrudException {
- Edge addedEdge = dao.addEdge(edge.getType(), edge.getSource(), edge.getTarget(), edge.getProperties());
- return CrudResponseBuilder
- .buildUpsertEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, addedEdge), version);
- }
-
- public String getEdge(String version, String id, String type) throws CrudException {
- RelationshipSchemaValidator.validateType(version, type);
- Edge edge = dao.getEdge(id, type);
-
- return CrudResponseBuilder.buildGetEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, edge),
- version);
- }
-
- public String getEdges(String version, String type, Map<String, String> filter) throws CrudException {
- RelationshipSchemaValidator.validateType(version, type);
- List<Edge> items = dao.getEdges(type, RelationshipSchemaValidator.resolveCollectionfilter(version, type, filter));
- return CrudResponseBuilder.buildGetEdgesResponse(items, version);
- }
-
- public String updateVertex(String version, String id, String type, VertexPayload payload) throws CrudException {
- Vertex vertex = OxmModelValidator.validateIncomingUpsertPayload(id, version, type, payload.getProperties());
- return updateVertex(version, vertex);
-
- }
-
- private String updateVertex(String version, Vertex vertex) throws CrudException {
- Vertex updatedVertex = dao.updateVertex(vertex.getId().get(), vertex.getType(), vertex.getProperties());
- return CrudResponseBuilder
- .buildUpsertVertexResponse(OxmModelValidator.validateOutgoingPayload(version, updatedVertex), version);
- }
-
- public String patchVertex(String version, String id, String type, VertexPayload payload) throws CrudException {
- Vertex existingVertex = dao.getVertex(id, OxmModelValidator.resolveCollectionType(version, type));
- Vertex vertex = OxmModelValidator.validateIncomingPatchPayload(id, version, type, payload.getProperties(),
- existingVertex);
- return updateVertex(version, vertex);
-
- }
-
- public String deleteVertex(String version, String id, String type) throws CrudException {
- type = OxmModelValidator.resolveCollectionType(version, type);
- dao.deleteVertex(id, type);
- return "";
-
- }
-
- public String deleteEdge(String version, String id, String type) throws CrudException {
- RelationshipSchemaValidator.validateType(version, type);
- dao.deleteEdge(id, type);
- return "";
-
- }
-
- public String updateEdge(String version, String id, String type, EdgePayload payload) throws CrudException {
- Edge edge = dao.getEdge(id, type);
- Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload);
- return updateEdge(version, validatedEdge);
-
- }
-
- private String updateEdge(String version, Edge edge) throws CrudException {
- Edge updatedEdge = dao.updateEdge(edge);
- return CrudResponseBuilder
- .buildUpsertEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, updatedEdge), version);
- }
-
- public String patchEdge(String version, String id, String type, EdgePayload payload) throws CrudException {
- Edge edge = dao.getEdge(id, type);
- Edge patchedEdge = RelationshipSchemaValidator.validateIncomingPatchPayload(edge, version, payload);
- return updateEdge(version, patchedEdge);
-
- }
-
- public Vertex getVertex(String id) throws CrudException {
- return dao.getVertex(id);
- }
-
- public String getVertex(String version, String id, String type) throws CrudException {
- type = OxmModelValidator.resolveCollectionType(version, type);
- Vertex vertex = dao.getVertex(id, type);
- List<Edge> edges = dao.getVertexEdges(id);
- return CrudResponseBuilder.buildGetVertexResponse(OxmModelValidator.validateOutgoingPayload(version, vertex), edges,
- version);
- }
-
- public String getVertices(String version, String type, Map<String, String> filter) throws CrudException {
- type = OxmModelValidator.resolveCollectionType(version, type);
- List<Vertex> items = dao.getVertices(type, OxmModelValidator.resolveCollectionfilter(version, type, filter));
- return CrudResponseBuilder.buildGetVerticesResponse(items, version);
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/service/CrudRestService.java b/src/main/java/org/openecomp/crud/service/CrudRestService.java
deleted file mode 100644
index 79b5624..0000000
--- a/src/main/java/org/openecomp/crud/service/CrudRestService.java
+++ /dev/null
@@ -1,784 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.security.auth.x500.X500Principal;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
-
-import org.apache.cxf.jaxrs.ext.PATCH;
-import org.openecomp.auth.Auth;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.logging.CrudServiceMsgs;
-import org.openecomp.crud.logging.LoggingUtil;
-import org.openecomp.crud.util.CrudServiceConstants;
-import org.slf4j.MDC;
-
-import com.google.gson.JsonElement;
-
-public class CrudRestService {
-
- private CrudGraphDataService crudGraphDataService;
- Logger logger = LoggerFactory.getInstance().getLogger(CrudRestService.class.getName());
- Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(CrudRestService.class.getName());
- private Auth auth;
-
- private String mediaType = MediaType.APPLICATION_JSON;
- public static final String HTTP_PATCH_METHOD_OVERRIDE = "X-HTTP-Method-Override";
-
- public CrudRestService(CrudGraphDataService crudGraphDataService) throws Exception {
- this.crudGraphDataService = crudGraphDataService;
- this.auth = new Auth(CrudServiceConstants.CRD_AUTH_FILE);
- }
-
- public enum Action {
- POST, GET, PUT, DELETE, PATCH
- }
-
- ;
-
- public void startup() {
-
- }
-
- @GET
- @Path("/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getVertex(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- String result = crudGraphDataService.getVertex(version, id, type);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @GET
- @Path("/{version}/{type}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getVertices(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers, @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
- if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- Map<String, String> filter = new HashMap<String, String>();
- for (Map.Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {
- filter.put(e.getKey(), e.getValue().get(0));
- }
-
- try {
- String result = crudGraphDataService.getVertices(version, type, filter);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @GET
- @Path("/relationships/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getEdge(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- String result = crudGraphDataService.getEdge(version, id, type);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @GET
- @Path("/relationships/{version}/{type}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getEdges(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers, @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- Map<String, String> filter = new HashMap<String, String>();
- for (Map.Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {
- filter.put(e.getKey(), e.getValue().get(0));
- }
-
- try {
- String result = crudGraphDataService.getEdges(version, type, filter);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
-
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @PUT
- @Path("/relationships/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response updateEdge(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- EdgePayload payload = EdgePayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
- String result;
-
- if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null
- && headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE).equalsIgnoreCase("PATCH")) {
- result = crudGraphDataService.patchEdge(version, id, type, payload);
- } else {
-
- result = crudGraphDataService.updateEdge(version, id, type, payload);
- }
-
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
-
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @PATCH
- @Path("/relationships/{version}/{type}/{id}")
- @Consumes({ "application/merge-patch+json" })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response patchEdge(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
- if (validateRequest(req, uri, content, Action.PATCH, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- EdgePayload payload = EdgePayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
-
- String result = crudGraphDataService.patchEdge(version, id, type, payload);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @PUT
- @Path("/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response updateVertex(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- VertexPayload payload = VertexPayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
- String result;
- if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null
- && headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE).equalsIgnoreCase("PATCH")) {
- result = crudGraphDataService.patchVertex(version, id, type, payload);
- } else {
-
- result = crudGraphDataService.updateVertex(version, id, type, payload);
- }
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @PATCH
- @Path("/{version}/{type}/{id}")
- @Consumes({ "application/merge-patch+json" })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response patchVertex(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.PATCH, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
- try {
- VertexPayload payload = VertexPayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
-
- String result = crudGraphDataService.patchVertex(version, id, type, payload);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @POST
- @Path("/{version}/{type}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response addVertex(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers, @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- VertexPayload payload = VertexPayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Vertex", Status.BAD_REQUEST);
- }
-
- if (payload.getType() != null && !payload.getType().equals(type)) {
- throw new CrudException("Vertex Type mismatch", Status.BAD_REQUEST);
- }
-
- String result = crudGraphDataService.addVertex(version, type, payload);
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- private void validateBulkPayload(BulkPayload payload) throws CrudException {
- List<String> vertices = new ArrayList<String>();
- List<String> edges = new ArrayList<String>();
-
- for (JsonElement v : payload.getObjects()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- v.getAsJsonObject().entrySet());
-
- if (entries.size() != 2) {
- throw new CrudException("", Status.BAD_REQUEST);
- }
- Map.Entry<String, JsonElement> opr = entries.get(0);
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- if (vertices.contains(item.getKey())) {
- throw new CrudException("duplicate vertex in payload: " + item.getKey(), Status.BAD_REQUEST);
- }
- VertexPayload vertexPayload = VertexPayload.fromJson(item.getValue().getAsJsonObject().toString());
- if (vertexPayload.getType() == null) {
- throw new CrudException("Vertex Type cannot be null for: " + item.getKey(), Status.BAD_REQUEST);
- }
-
- if (!opr.getKey().equalsIgnoreCase("operation")) {
- throw new CrudException("operation missing in item: " + item.getKey(), Status.BAD_REQUEST);
- }
-
- if (!opr.getValue().getAsString().equalsIgnoreCase("add")
- && !opr.getValue().getAsString().equalsIgnoreCase("modify")
- && !opr.getValue().getAsString().equalsIgnoreCase("delete")) {
- throw new CrudException("Invalid operation at item: " + item.getKey(), Status.BAD_REQUEST);
- }
- // check if ID is populate for modify/delete operation
- if ((opr.getValue().getAsString().equalsIgnoreCase("modify")
- || opr.getValue().getAsString().equalsIgnoreCase("delete")) && (vertexPayload.getId() == null)) {
-
- throw new CrudException("Mising ID at item: " + item.getKey(), Status.BAD_REQUEST);
-
- }
-
- vertices.add(item.getKey());
- }
-
- for (JsonElement v : payload.getRelationships()) {
- List<Map.Entry<String, JsonElement>> entries = new ArrayList<Map.Entry<String, JsonElement>>(
- v.getAsJsonObject().entrySet());
-
- if (entries.size() != 2) {
- throw new CrudException("", Status.BAD_REQUEST);
- }
- Map.Entry<String, JsonElement> opr = entries.get(0);
- Map.Entry<String, JsonElement> item = entries.get(1);
-
- if (edges.contains(item.getKey())) {
- throw new CrudException("duplicate Edge in payload: " + item.getKey(), Status.BAD_REQUEST);
- }
-
- EdgePayload edgePayload = EdgePayload.fromJson(item.getValue().getAsJsonObject().toString());
-
- if (edgePayload.getType() == null) {
- throw new CrudException("Edge Type cannot be null for: " + item.getKey(), Status.BAD_REQUEST);
- }
-
- if (!opr.getKey().equalsIgnoreCase("operation")) {
- throw new CrudException("operation missing in item: " + item.getKey(), Status.BAD_REQUEST);
- }
-
- if (!opr.getValue().getAsString().equalsIgnoreCase("add")
- && !opr.getValue().getAsString().equalsIgnoreCase("modify")
- && !opr.getValue().getAsString().equalsIgnoreCase("delete")) {
- throw new CrudException("Invalid operation at item: " + item.getKey(), Status.BAD_REQUEST);
- }
- // check if ID is populate for modify/delete operation
- if ((edgePayload.getId() == null) && (opr.getValue().getAsString().equalsIgnoreCase("modify")
- || opr.getValue().getAsString().equalsIgnoreCase("delete"))) {
-
- throw new CrudException("Mising ID at item: " + item.getKey(), Status.BAD_REQUEST);
-
- }
- if (opr.getValue().getAsString().equalsIgnoreCase("add")) {
- if (edgePayload.getSource() == null || edgePayload.getTarget() == null) {
- throw new CrudException("Source/Target cannot be null for edge: " + item.getKey(), Status.BAD_REQUEST);
- }
- if (edgePayload.getSource().startsWith("$") && !vertices.contains(edgePayload.getSource().substring(1))) {
- throw new CrudException(
- "Source Vertex " + edgePayload.getSource().substring(1) + " not found for Edge: " + item.getKey(),
- Status.BAD_REQUEST);
- }
-
- if (edgePayload.getTarget().startsWith("$") && !vertices.contains(edgePayload.getTarget().substring(1))) {
- throw new CrudException(
- "Target Vertex " + edgePayload.getSource().substring(1) + " not found for Edge: " + item.getKey(),
- Status.BAD_REQUEST);
- }
- }
- edges.add(item.getKey());
-
- }
-
- }
-
- @POST
- @Path("/{version}/bulk/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response addBulk(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers, @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- BulkPayload payload = BulkPayload.fromJson(content);
- if ((payload.getObjects() == null && payload.getRelationships() == null)
- || (payload.getObjects() != null && payload.getObjects().isEmpty() && payload.getRelationships() != null
- && payload.getRelationships().isEmpty())) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
-
- validateBulkPayload(payload);
- String result = crudGraphDataService.addBulk(version, payload);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @POST
- @Path("/{version}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response addVertex(String content, @PathParam("version") String version, @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers, @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
- try {
-
- VertexPayload payload = VertexPayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Vertex", Status.BAD_REQUEST);
- }
-
- if (payload.getType() == null || payload.getType().isEmpty()) {
- throw new CrudException("Missing Vertex Type ", Status.BAD_REQUEST);
- }
- String result = crudGraphDataService.addVertex(version, payload.getType(), payload);
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @POST
- @Path("/relationships/{version}/{type}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response addEdge(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers, @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- EdgePayload payload = EdgePayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
-
- if (payload.getType() != null && !payload.getType().equals(type)) {
- throw new CrudException("Edge Type mismatch", Status.BAD_REQUEST);
- }
- String result = crudGraphDataService.addEdge(version, type, payload);
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @POST
- @Path("/relationships/{version}/")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response addEdge(String content, @PathParam("version") String version, @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers, @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- EdgePayload payload = EdgePayload.fromJson(content);
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
-
- if (payload.getType() == null || payload.getType().isEmpty()) {
- throw new CrudException("Missing Edge Type ", Status.BAD_REQUEST);
- }
- String result = crudGraphDataService.addEdge(version, payload.getType(), payload);
-
- response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @DELETE
- @Path("/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response deleteVertex(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.DELETE, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- String result = crudGraphDataService.deleteVertex(version, id, type);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- @DELETE
- @Path("/relationships/{version}/{type}/{id}")
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response deleteEdge(String content, @PathParam("version") String version, @PathParam("type") String type,
- @PathParam("id") String id, @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
- @Context UriInfo uriInfo, @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
- if (validateRequest(req, uri, content, Action.DELETE, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
- String result = crudGraphDataService.deleteEdge(version, id, type);
- response = Response.status(Status.OK).entity(result).type(mediaType).build();
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content).type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
- protected boolean validateRequest(HttpServletRequest req, String uri, String content, Action action,
- String authPolicyFunctionName) {
- try {
- String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
- String authUser = null;
- if (cipherSuite != null) {
- X509Certificate[] certChain = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
- X509Certificate clientCert = certChain[0];
- X500Principal subjectDn = clientCert.getSubjectX500Principal();
- authUser = subjectDn.toString();
- }
- return this.auth.validateRequest(authUser.toLowerCase(), action.toString() + ":" + authPolicyFunctionName);
- } catch (Exception e) {
- logResult(action, uri, e);
- return false;
- }
- }
-
- void logResult(Action op, String uri, Exception e) {
-
- logger.error(CrudServiceMsgs.EXCEPTION_DURING_METHOD_CALL, op.toString(), uri, e.getStackTrace().toString());
-
- // Clear the MDC context so that no other transaction inadvertently
- // uses our transaction id.
- MDC.clear();
- }
-}
diff --git a/src/main/java/org/openecomp/crud/service/EdgePayload.java b/src/main/java/org/openecomp/crud/service/EdgePayload.java
deleted file mode 100644
index d098d16..0000000
--- a/src/main/java/org/openecomp/crud/service/EdgePayload.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-
-import org.openecomp.crud.exception.CrudException;
-
-import javax.ws.rs.core.Response.Status;
-
-public class EdgePayload {
-
- private String id;
- private String type;
- private String url;
- private String source;
- private String target;
- private JsonElement properties;
-
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
-
-
- @Override
- public String toString() {
- return "EdgePayload [id=" + id + ", type=" + type + ", url=" + url + ", source="
- + source + ", target=" + target + ", properties=" + properties + "]";
- }
-
- public String toJson() {
- return gson.toJson(this);
- }
-
- public static EdgePayload fromJson(String payload) throws CrudException {
- try {
- if (payload == null || payload.isEmpty()) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- return gson.fromJson(payload, EdgePayload.class);
- } catch (Exception ex) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public String getSource() {
- return source;
- }
-
- public void setSource(String source) {
- this.source = source;
- }
-
- public String getTarget() {
- return target;
- }
-
- public void setTarget(String target) {
- this.target = target;
- }
-
- public JsonElement getProperties() {
- return properties;
- }
-
- public void setProperties(JsonElement properties) {
- this.properties = properties;
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/openecomp/crud/service/JaxrsEchoService.java b/src/main/java/org/openecomp/crud/service/JaxrsEchoService.java
deleted file mode 100644
index 0edd316..0000000
--- a/src/main/java/org/openecomp/crud/service/JaxrsEchoService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.logging.LoggingUtil;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
-
-
-public class JaxrsEchoService {
-
- private static Logger logger = LoggerFactory.getInstance()
- .getLogger(JaxrsEchoService.class.getName());
- private static Logger auditLogger = LoggerFactory.getInstance()
- .getAuditLogger(JaxrsEchoService.class.getName());
-
- @GET
- @Path("echo/{input}")
- @Produces("text/plain")
- public String ping(@PathParam("input") String input,
- @Context HttpHeaders headers,
- @Context UriInfo info,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
- LoggingUtil.logRestRequest(logger, auditLogger, req, Response.status(Status.OK)
- .entity("OK").build());
-
- return "Hello, " + input + ".";
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/openecomp/crud/service/VertexPayload.java b/src/main/java/org/openecomp/crud/service/VertexPayload.java
deleted file mode 100644
index ed79002..0000000
--- a/src/main/java/org/openecomp/crud/service/VertexPayload.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.service;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-
-import org.openecomp.crud.exception.CrudException;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.ws.rs.core.Response.Status;
-
-public class VertexPayload {
-
- private String id;
- private String type;
- private String url;
- private JsonElement properties;
- private List<EdgePayload> in = new ArrayList<EdgePayload>();
- private List<EdgePayload> out = new ArrayList<EdgePayload>();
-
- private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
-
- public String toJson() {
- return gson.toJson(this);
- }
-
- public static VertexPayload fromJson(String payload) throws CrudException {
- try {
- if (payload == null || payload.isEmpty()) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- return gson.fromJson(payload, VertexPayload.class);
- } catch (Exception ex) {
- throw new CrudException("Invalid Json Payload", Status.BAD_REQUEST);
- }
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public JsonElement getProperties() {
- return properties;
- }
-
- public void setProperties(JsonElement properties) {
- this.properties = properties;
- }
-
- public List<EdgePayload> getIn() {
- return in;
- }
-
- public void setIn(List<EdgePayload> in) {
- this.in = in;
- }
-
- public List<EdgePayload> getOut() {
- return out;
- }
-
- public void setOut(List<EdgePayload> out) {
- this.out = out;
- }
-
-
- @Override
- public String toString() {
- return "VertexPayload [id=" + id + ", type=" + type + ", url=" + url + ", properties="
- + properties + ", in=" + in + ", out=" + out + "]";
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/openecomp/crud/util/CrudJaxbTransformation.java b/src/main/java/org/openecomp/crud/util/CrudJaxbTransformation.java
deleted file mode 100644
index c1a1e18..0000000
--- a/src/main/java/org/openecomp/crud/util/CrudJaxbTransformation.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.util;
-
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.jaxb.JAXBMarshaller;
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.eclipse.persistence.jaxb.UnmarshallerProperties;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import javax.ws.rs.core.MediaType;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.stream.StreamSource;
-
-public class CrudJaxbTransformation {
- /**
- * Marshal a dynamic entity into a string.
- *
- * @param entity the dynamic entity
- * @param jaxbContext the dynamic jaxb context
- * @return the marshaled entity
- * @throws RouterException on error
- */
- public static String marshal(MediaType mediaType, final DynamicEntity entity,
- final DynamicJAXBContext jaxbContext) throws JAXBException {
-
- final JAXBMarshaller marshaller = jaxbContext.createMarshaller();
- marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, false);
-
- if (MediaType.APPLICATION_JSON_TYPE.isCompatible(mediaType)) {
- marshaller.setProperty("eclipselink.media-type", "application/json");
- marshaller.setProperty("eclipselink.json.include-root", false);
- marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE);
- }
-
- final StringWriter writer = new StringWriter();
- marshaller.marshal(entity, writer);
- return writer.toString();
-
- }
-
- /**
- * @param type
- * @param json
- * @param mediaType
- * @return
- * @throws JAXBException
- * @throws Exception
- */
- public static Object unmarshal(String javaClass, String content, MediaType mediaType,
- final DynamicJAXBContext jaxbContext) throws JAXBException {
- Object clazz = null;
- Unmarshaller unmarshaller = null;
-
- clazz = jaxbContext.newDynamicEntity(javaClass);
-
- unmarshaller = jaxbContext.createUnmarshaller();
- if (mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) {
- unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json");
- unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
- unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
- }
-
- return unmarshaller.unmarshal(new StreamSource(new StringReader(content)),
- clazz.getClass()).getValue();
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/util/CrudProperties.java b/src/main/java/org/openecomp/crud/util/CrudProperties.java
deleted file mode 100644
index 69b2e16..0000000
--- a/src/main/java/org/openecomp/crud/util/CrudProperties.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-public class CrudProperties {
-
- private static Properties properties;
-
- static {
- properties = new Properties();
- File file = new File(CrudServiceConstants.CRD_CONFIG_FILE);
- try {
- properties.load(new FileInputStream(file));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public static String get(String key) {
- return properties.getProperty(key);
- }
-
- public static String get(String key, String defaultValue) {
- return properties.getProperty(key, defaultValue);
- }
-
- public static void put(String key, String value) {
- properties.setProperty(key, value);
- FileOutputStream fileOut = null;
- try {
- fileOut = new FileOutputStream(new File(CrudServiceConstants.CRD_CONFIG_FILE));
- properties.store(fileOut, "Added property: " + key);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
-
- try {
- fileOut.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
-
- }
-
-
-}
diff --git a/src/main/java/org/openecomp/crud/util/CrudServiceConstants.java b/src/main/java/org/openecomp/crud/util/CrudServiceConstants.java
deleted file mode 100644
index 1a4858f..0000000
--- a/src/main/java/org/openecomp/crud/util/CrudServiceConstants.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.util;
-
-public class CrudServiceConstants {
- public static final String CRD_SERVICE_NAME = "Crud-Service";
-
- public static final String CRD_FILESEP = (System.getProperty("file.separator") == null) ? "/"
- : System.getProperty("file.separator");
-
- public static final String CRD_SPECIFIC_CONFIG = System.getProperty("CONFIG_HOME") + CRD_FILESEP;
-
- public static final String CRD_HOME_MODEL = CRD_SPECIFIC_CONFIG + "model" + CRD_FILESEP;
- public static final String CRD_HOME_AUTH = CRD_SPECIFIC_CONFIG + "auth" + CRD_FILESEP;
-
- public static final String CRD_GRAPH_HOST = "crud.graph.host";
- public static final String CRD_GRAPH_PORT = "crud.graph.port";
- public static final String CRD_GRAPH_NAME = "crud.graph.name";
- public static final String CRD_STORAGE_BACKEND_DB = "crud.storage.backend.db";
- public static final String CRD_HBASE_ZNODE_PARENT
- = "crud.storage.hbase.ext.zookeeper.znode.parent";
-
- public static final String CRD_CONFIG_FILE = CRD_SPECIFIC_CONFIG + "crud-api.properties";
- public static final String CRD_AUTH_FILE = CRD_HOME_AUTH + "crud_policy.json";
- public static final String CRD_CHAMPION_AUTH_FILE = CRD_HOME_AUTH + "champion-cert.p12";
-
- public static final String CRD_AUTH_POLICY_NAME = "crud";
-
- public static final String CRD_EVENT_STREAM_HOSTS = "event.stream.hosts";
-
-
-
-}
diff --git a/src/main/java/org/openecomp/crud/util/CrudServiceUtil.java b/src/main/java/org/openecomp/crud/util/CrudServiceUtil.java
deleted file mode 100644
index b88f20b..0000000
--- a/src/main/java/org/openecomp/crud/util/CrudServiceUtil.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.util;
-
-import org.openecomp.crud.exception.CrudException;
-
-import javax.ws.rs.core.Response.Status;
-
-public class CrudServiceUtil {
-
-
- public static Object validateFieldType(String value, Class clazz) throws CrudException {
- try {
- if (clazz.isAssignableFrom(Integer.class)) {
- return Integer.parseInt(value);
- } else if (clazz.isAssignableFrom(Long.class)) {
- return Long.parseLong(value);
- } else if (clazz.isAssignableFrom(Float.class)) {
- return Float.parseFloat(value);
- } else if (clazz.isAssignableFrom(Double.class)) {
- return Double.parseDouble(value);
- } else if (clazz.isAssignableFrom(Boolean.class)) {
-
- // If the value is an IN/OUT direction, this gets seen as a boolean, so
- // check for that first.
- if (value.equals("OUT") || value.equals("IN")) {
- return value;
- }
-
- if (!value.equals("true") && !value.equals("false")) {
- throw new CrudException("Invalid propertry value: " + value, Status.BAD_REQUEST);
- }
- return Boolean.parseBoolean(value);
- } else {
- return value;
- }
- } catch (Exception e) {
- throw new CrudException("Invalid property value: " + value, Status.BAD_REQUEST);
- }
- }
-
-}
diff --git a/src/main/java/org/openecomp/crud/util/FileWatcher.java b/src/main/java/org/openecomp/crud/util/FileWatcher.java
deleted file mode 100644
index 8c7cbc1..0000000
--- a/src/main/java/org/openecomp/crud/util/FileWatcher.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.crud.util;
-
-import java.io.File;
-import java.util.TimerTask;
-
-public abstract class FileWatcher extends TimerTask {
- private long timeStamp;
- private File file;
-
- public FileWatcher(File file) {
- this.file = file;
- this.timeStamp = file.lastModified();
- }
-
- public final void run() {
- long timeStamp = file.lastModified();
-
- if ((timeStamp - this.timeStamp) > 500) {
- this.timeStamp = timeStamp;
- onChange(file);
- }
- }
-
- protected abstract void onChange(File file);
-} \ No newline at end of file
diff --git a/src/main/java/org/openecomp/schema/OxmModelValidator.java b/src/main/java/org/openecomp/schema/OxmModelValidator.java
deleted file mode 100644
index 79136e4..0000000
--- a/src/main/java/org/openecomp/schema/OxmModelValidator.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.schema;
-
-import com.google.common.base.CaseFormat;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-import org.eclipse.persistence.dynamic.DynamicType;
-import org.eclipse.persistence.internal.helper.DatabaseField;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-import org.eclipse.persistence.mappings.DatabaseMapping;
-import org.eclipse.persistence.oxm.XMLField;
-import org.onap.aaiutils.oxm.OxmModelLoader;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.util.CrudServiceUtil;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.ws.rs.core.Response.Status;
-
-public class OxmModelValidator {
- public enum Metadata {
- NODE_TYPE("aai-node-type"), URI("aai-uri"), CREATED_TS("aai-created-ts"), SOT("source-of-truth"), LAST_MOD_SOT(
- "last-mod-source-of-truth");
-
- private final String propName;
-
- Metadata(String propName) {
- this.propName = propName;
- }
-
- public String propertyName() {
- return propName;
- }
-
- public static boolean isProperty(String property) {
- for (Metadata meta : Metadata.values()) {
- if (meta.propName.equals(property)) {
- return true;
- }
- }
- return false;
- }
- }
-
- public static Map<String, Object> resolveCollectionfilter(String version, String type, Map<String, String> filter)
- throws CrudException {
-
- DynamicJAXBContext jaxbContext = null;
- try {
- jaxbContext = OxmModelLoader.getContextForVersion(version);
- } catch (Exception e) {
- throw new CrudException(e);
- }
-
- Map<String, Object> result = new HashMap<String, Object>();
- if (jaxbContext == null) {
- throw new CrudException("", Status.NOT_FOUND);
- }
- final DynamicType modelObjectType = jaxbContext.getDynamicType(
- CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type)));
-
- for (String key : filter.keySet()) {
- String keyJavaName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, key);
- if (modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName) != null) {
- try {
- DatabaseMapping mapping = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName);
- Object value = CrudServiceUtil.validateFieldType(filter.get(key), mapping.getField().getType());
- result.put(key, value);
- } catch (Exception ex) {
- // Skip any exceptions thrown while validating the filter
- // key value
- continue;
- }
- }
- }
-
- return result;
-
- }
-
- public static String resolveCollectionType(String version, String type) throws CrudException {
-
- DynamicJAXBContext jaxbContext = null;
- try {
- jaxbContext = OxmModelLoader.getContextForVersion(version);
- } catch (Exception e) {
- throw new CrudException(e);
- }
-
- if (jaxbContext == null) {
- throw new CrudException("", Status.NOT_FOUND);
- }
- // Determine if the Object part is a collection type in the model
- // definition
- final DynamicType modelObjectType = jaxbContext.getDynamicType(
- CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type)));
-
- if (modelObjectType == null) {
- throw new CrudException("", Status.NOT_FOUND);
- }
-
- if (modelObjectType.getDescriptor().getMappings().size() == 1
- && modelObjectType.getDescriptor().getMappings().get(0).isCollectionMapping()) {
- String childJavaObjectName = modelObjectType.getDescriptor().getMappings().get(0).getAttributeName();
- childJavaObjectName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, childJavaObjectName);
- final DynamicType childObjectType = jaxbContext.getDynamicType(childJavaObjectName);
- if (childObjectType == null) {
- // Should not happen as child object is defined in oxm model
- // itself
- throw new CrudException("", Status.NOT_FOUND);
- }
- return childObjectType.getDescriptor().getTableName();
- } else {
- return modelObjectType.getDescriptor().getTableName();
- }
-
- }
-
- public static Vertex validateIncomingUpsertPayload(String id, String version, String type, JsonElement properties)
- throws CrudException {
-
- try {
- type = resolveCollectionType(version, type);
- DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
- String modelObjectClass = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL,
- CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type));
-
- final DynamicType modelObjectType = jaxbContext.getDynamicType(modelObjectClass);
- final DynamicType reservedType = jaxbContext.getDynamicType("ReservedPropNames");
-
- Set<Map.Entry<String, JsonElement>> payloadEntriesSet = properties.getAsJsonObject().entrySet();
-
- // loop through input to validate against schema
- for (Map.Entry<String, JsonElement> entry : payloadEntriesSet) {
- String keyJavaName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, entry.getKey());
-
- // check for valid field
- if (modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName) == null) {
- if (reservedType.getDescriptor().getMappingForAttributeName(keyJavaName) == null) {
- throw new CrudException("Invalid field: " + entry.getKey(), Status.BAD_REQUEST);
- }
- }
-
- }
-
- Map<String, JsonElement> entriesMap = new HashMap<String, JsonElement>();
- for (Map.Entry<String, JsonElement> entry : payloadEntriesSet) {
- entriesMap.put(entry.getKey(), entry.getValue());
- }
-
- Vertex.Builder modelVertexBuilder = new Vertex.Builder(type);
- if (id != null) {
- modelVertexBuilder.id(id);
- }
- for (DatabaseMapping mapping : modelObjectType.getDescriptor().getMappings()) {
- if (mapping.isAbstractDirectMapping()) {
- DatabaseField field = mapping.getField();
- String defaultValue = mapping.getProperties().get("defaultValue") == null ? ""
- : mapping.getProperties().get("defaultValue").toString();
-
- String keyName = field.getName().substring(0, field.getName().indexOf("/"));
-
- if (((XMLField) field).isRequired() && !entriesMap.containsKey(keyName) && !defaultValue.isEmpty()) {
- modelVertexBuilder.property(keyName, CrudServiceUtil.validateFieldType(defaultValue, field.getType()));
- }
- // if schema field is required and not set then reject
- if (((XMLField) field).isRequired() && !entriesMap.containsKey(keyName) && defaultValue.isEmpty()) {
- throw new CrudException("Missing required field: " + keyName, Status.BAD_REQUEST);
- }
- // If invalid field then reject
- if (entriesMap.containsKey(keyName)) {
- Object value = CrudServiceUtil.validateFieldType(entriesMap.get(keyName).getAsString(), field.getType());
- modelVertexBuilder.property(keyName, value);
- }
-
- // Set defaults
- if (!defaultValue.isEmpty() && !entriesMap.containsKey(keyName)) {
- modelVertexBuilder.property(keyName, CrudServiceUtil.validateFieldType(defaultValue, field.getType()));
- }
- }
- }
-
- // Handle reserved properties
- for (DatabaseMapping mapping : reservedType.getDescriptor().getMappings()) {
- if (mapping.isAbstractDirectMapping()) {
- DatabaseField field = mapping.getField();
- String keyName = field.getName().substring(0, field.getName().indexOf("/"));
-
- if (entriesMap.containsKey(keyName)) {
- Object value = CrudServiceUtil.validateFieldType(entriesMap.get(keyName).getAsString(), field.getType());
- modelVertexBuilder.property(keyName, value);
- }
- }
- }
-
- return modelVertexBuilder.build();
- } catch (Exception e) {
- throw new CrudException(e.getMessage(), Status.BAD_REQUEST);
- }
- }
-
- public static Vertex validateIncomingPatchPayload(String id, String version, String type, JsonElement properties,
- Vertex existingVertex) throws CrudException {
-
- try {
- type = resolveCollectionType(version, type);
- DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
- String modelObjectClass = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL,
- CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type));
-
- final DynamicType modelObjectType = jaxbContext.getDynamicType(modelObjectClass);
- final DynamicType reservedType = jaxbContext.getDynamicType("ReservedPropNames");
-
- Set<Map.Entry<String, JsonElement>> payloadEntriesSet = properties.getAsJsonObject().entrySet();
-
- // Loop through the payload properties and merge with existing
- // vertex props
- for (Map.Entry<String, JsonElement> entry : payloadEntriesSet) {
-
- String keyJavaName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, entry.getKey());
-
- DatabaseField field = null;
- String defaultValue = null;
-
- if (modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName) != null) {
- field = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName).getField();
- defaultValue = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName).getProperties()
- .get("defaultValue") == null ? ""
- : modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName).getProperties()
- .get("defaultValue").toString();
- } else if (reservedType.getDescriptor().getMappingForAttributeName(keyJavaName) != null) {
- field = reservedType.getDescriptor().getMappingForAttributeName(keyJavaName).getField();
- defaultValue = "";
- }
-
- if (field == null) {
- throw new CrudException("Invalid field: " + entry.getKey(), Status.BAD_REQUEST);
- }
-
- // check if mandatory field is not set to null
- if (((XMLField) field).isRequired() && entry.getValue() instanceof JsonNull && !defaultValue.isEmpty()) {
- existingVertex.getProperties().put(entry.getKey(),
- CrudServiceUtil.validateFieldType(defaultValue, field.getType()));
- } else if (((XMLField) field).isRequired() && entry.getValue() instanceof JsonNull && defaultValue.isEmpty()) {
- throw new CrudException("Mandatory field: " + entry.getKey() + " can't be set to null", Status.BAD_REQUEST);
- } else if (!((XMLField) field).isRequired() && entry.getValue() instanceof JsonNull
- && existingVertex.getProperties().containsKey(entry.getKey())) {
- existingVertex.getProperties().remove(entry.getKey());
- } else if (!(entry.getValue() instanceof JsonNull)) {
- // add/update the value if found in existing vertex
- Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(), field.getType());
- existingVertex.getProperties().put(entry.getKey(), value);
- }
-
- }
-
- return existingVertex;
- } catch (Exception e) {
- throw new CrudException(e.getMessage(), Status.BAD_REQUEST);
- }
-
- }
-
- private static DatabaseField getDatabaseField(String fieldName, DynamicType modelObjectType) {
- for (DatabaseField field : modelObjectType.getDescriptor().getAllFields()) {
- int ix = field.getName().indexOf("/");
- if (ix <= 0) {
- ix = field.getName().length();
- }
-
- String keyName = field.getName().substring(0, ix);
- if (fieldName.equals(keyName)) {
- return field;
- }
- }
- return null;
- }
-
- public static Vertex validateOutgoingPayload(String version, Vertex vertex) {
-
- Vertex.Builder modelVertexBuilder = new Vertex.Builder(vertex.getType()).id(vertex.getId().get());
-
- try {
- DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
- String modelObjectClass = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL,
- CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL,
- vertex.getProperties().get(Metadata.NODE_TYPE.propertyName()) != null
- ? vertex.getProperties().get(Metadata.NODE_TYPE.propertyName()).toString() : vertex.getType()));
- final DynamicType modelObjectType = jaxbContext.getDynamicType(modelObjectClass);
-
- for (String key : vertex.getProperties().keySet()) {
- DatabaseField field = getDatabaseField(key, modelObjectType);
- if (field != null) {
- if (!Metadata.isProperty(key)) {
- modelVertexBuilder.property(key, vertex.getProperties().get(key));
- }
- }
- }
- return modelVertexBuilder.build();
- } catch (Exception ex) {
- return vertex;
- }
-
- }
-
-}
diff --git a/src/main/java/org/openecomp/schema/RelationshipSchema.java b/src/main/java/org/openecomp/schema/RelationshipSchema.java
deleted file mode 100644
index a8d101d..0000000
--- a/src/main/java/org/openecomp/schema/RelationshipSchema.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.schema;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-import org.codehaus.jackson.map.ObjectMapper;
-import org.openecomp.crud.exception.CrudException;
-
-import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
-import javax.ws.rs.core.Response.Status;
-
-
-public class RelationshipSchema {
- private static final Gson gson = new GsonBuilder().create();
-
- public static final String SCHEMA_SOURCE_NODE_TYPE = "from";
- public static final String SCHEMA_TARGET_NODE_TYPE = "to";
- public static final String SCHEMA_RELATIONSHIP_TYPE = "label";
- public static final String SCHEMA_RULES_ARRAY = "rules";
-
-
- private Map<String, Map<String, Class<?>>> relations = new HashMap<>();
- /**
- * Hashmap of valid relationship types along with properties.
- */
- private Map<String, Map<String, Class<?>>> relationTypes = new HashMap<>();
-
-
- public RelationshipSchema(List<String> jsonStrings) throws CrudException, IOException {
- String edgeRules = jsonStrings.get(0);
- String props = jsonStrings.get(1);
-
- HashMap<String, ArrayList<LinkedHashMap<String, String>>> rules = new ObjectMapper().readValue(edgeRules, HashMap.class);
- HashMap<String, String> properties = new ObjectMapper().readValue(props, HashMap.class);
- Map<String, Class<?>> edgeProps = properties.entrySet().stream().collect(Collectors.toMap(p -> p.getKey(), p -> {
- try {
- return resolveClass(p.getValue());
- } catch (CrudException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- return null;
- }));
-
- rules.get(SCHEMA_RULES_ARRAY).forEach(l -> {
- relationTypes.put(l.get(SCHEMA_RELATIONSHIP_TYPE), edgeProps);
- relations.put(buildRelation(l.get(SCHEMA_SOURCE_NODE_TYPE), l.get(SCHEMA_TARGET_NODE_TYPE), l.get(SCHEMA_RELATIONSHIP_TYPE)), edgeProps);
- });
- }
-
-
-
- public Map<String, Class<?>> lookupRelation(String key) {
- return this.relations.get(key);
- }
-
- public Map<String, Class<?>> lookupRelationType(String type) {
- return this.relationTypes.get(type);
- }
-
- public boolean isValidType(String type) {
- return relationTypes.containsKey(type);
- }
-
-
- private String buildRelation(String source, String target, String relation){
- return source + ":" + target + ":" + relation;
- }
-
- private Class<?> resolveClass(String type) throws CrudException, ClassNotFoundException {
- Class<?> clazz = Class.forName(type);
- validateClassTypes(clazz);
- return clazz;
- }
-
- private void validateClassTypes(Class<?> clazz) throws CrudException {
- if (!clazz.isAssignableFrom(Integer.class) && !clazz.isAssignableFrom(Double.class)
- && !clazz.isAssignableFrom(Boolean.class) && !clazz.isAssignableFrom(String.class)) {
- throw new CrudException("", Status.BAD_REQUEST);
- }
- }
-}
-
-
diff --git a/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java b/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java
deleted file mode 100644
index cc6315c..0000000
--- a/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.schema;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.apache.commons.io.IOUtils;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.logging.CrudServiceMsgs;
-import org.openecomp.crud.util.CrudServiceConstants;
-import org.openecomp.crud.util.FileWatcher;
-import org.springframework.core.io.UrlResource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-
-public class RelationshipSchemaLoader {
-
- private static Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
- private static SortedSet<Integer> versions = new TreeSet<Integer>();
- private static Map<String, Timer> timers = new ConcurrentHashMap<String, Timer>();
- final static String edgePropsFiles = "edge_properties_";
- final static String fileExt = ".json";
- final static Pattern rulesFilePattern = Pattern.compile("DbEdgeRules(.*)" + fileExt);
- final static Pattern propsFilePattern = Pattern.compile(edgePropsFiles + "(.*)" + fileExt);
- final static Pattern versionPattern = Pattern.compile(".*(v\\d+)" + fileExt);
-
- private static org.openecomp.cl.api.Logger logger = LoggerFactory.getInstance()
- .getLogger(RelationshipSchemaLoader.class.getName());
-
- public synchronized static void loadModels() throws CrudException {
- load(rulesFilePattern, propsFilePattern);
- }
-
- public synchronized static void loadModels(String version) throws CrudException {
- String pattern = String.format(".*(%s)" + fileExt, version);
- load(Pattern.compile(pattern), Pattern.compile(edgePropsFiles + version + fileExt));
- }
-
- public static RelationshipSchema getSchemaForVersion(String version) throws CrudException {
- if (versionContextMap == null || versionContextMap.isEmpty()) {
- loadModels();
- } else if (!versionContextMap.containsKey(version)) {
- try {
- loadModels(version);
- } catch (Exception e) {
- throw new CrudException("", Status.NOT_FOUND);
- }
- }
- RelationshipSchema schema = versionContextMap.get(version);
- if (schema == null) {
- throw new CrudException("", Status.NOT_FOUND);
- } else
- return schema;
- }
-
- public static String getLatestSchemaVersion() throws CrudException {
- return "v" + versions.last();
- }
-
- public static Map<String, RelationshipSchema> getVersionContextMap() {
- return versionContextMap;
- }
-
- public static void setVersionContextMap(Map<String, RelationshipSchema> versionContextMap) {
- RelationshipSchemaLoader.versionContextMap = versionContextMap;
- }
-
- public static void resetVersionContextMap() {
- RelationshipSchemaLoader.versionContextMap = new ConcurrentHashMap<>();
- }
-
- private static void load(Pattern rulesPattern, Pattern edgePropsPattern) throws CrudException {
- ClassLoader cl = RelationshipSchemaLoader.class.getClassLoader();
- ResourcePatternResolver rulesResolver = new PathMatchingResourcePatternResolver(cl);
- List<Object> rulesFiles;
- String rulesDir = CrudServiceConstants.CRD_HOME_MODEL;
- try {
-
- // getResources method returns objects of type "Resource"
- // 1. We are getting all the objects from the classpath which has
- // "DbEdgeRules" in the name.
- // 2. We run them through a filter and return only the objects which match
- // the supplied pattern "p"
- // 3. We then collect the objects in a list. At this point we have a list
- // of the kind of files we require.
- rulesFiles = Arrays.stream(rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt))
- .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList());
-
- // This gets all the objects of type "File" from external directory (not
- // on the classpath)
- // 1. From an external directory (one not on the classpath) we get all the
- // objects of type "File"
- // 2. We only return the files whose names matched the supplied pattern
- // "p2".
- // 3. We then collect all the objects in a list and add the contents of
- // this list
- // to the previous collection (rulesFiles)
- rulesFiles
- .addAll(Arrays.stream(new File(rulesDir).listFiles((d, name) -> edgePropsPattern.matcher(name).matches()))
- .collect(Collectors.toList()));
-
- if (rulesFiles.isEmpty()) {
- logger.error(CrudServiceMsgs.INVALID_OXM_DIR, rulesDir);
- throw new FileNotFoundException("DbEdgeRules and edge_properties files were not found.");
- }
-
- // Sort and then group the files with their versions, convert them to the
- // schema, and add them to versionContextMap
- // 1. Sort the files. We need the DbEdgeRules files to be before the
- // edgeProperties files.
- // 2. Group the files with their versions. ie. v11 ->
- // ["DbEdgeRule_v11.json", "edgeProperties_v11.json"].
- // The "group method" returns a HashMap whose key is the version and the
- // value is a list of objects.
- // 3. Go through each version and map the files into one schema using the
- // "jsonFilesLoader" method.
- // Also update the "versionContextMap" with the version and it's schema.
- rulesFiles.stream().sorted(Comparator.comparing(RelationshipSchemaLoader::filename))
- .collect(Collectors.groupingBy(f -> myMatcher(versionPattern, filename(f))))
- .forEach((version, resourceAndFile) -> {
- if (resourceAndFile.size() == 2) {
- versionContextMap.put(version, jsonFilesLoader(version, resourceAndFile));
- } else {
- String filenames = resourceAndFile.stream().map(f -> filename(f)).collect(Collectors.toList()).toString();
- String errorMsg = "Expecting a rules and a edge_properties files for " + version + ". Found: "
- + filenames;
- logger.warn(CrudServiceMsgs.INVALID_OXM_FILE, errorMsg);
- }
- });
- logger.info(CrudServiceMsgs.LOADED_OXM_FILE, "Relationship Schema and Properties files: "
- + rulesFiles.stream().map(f -> filename(f)).collect(Collectors.toList()));
- } catch (IOException e) {
- logger.error(CrudServiceMsgs.INVALID_OXM_DIR, rulesDir);
- throw new CrudException("DbEdgeRules or edge_properties files were not found.", new FileNotFoundException());
- }
- }
-
- private static String filename(Object k) throws ClassCastException {
- if (k instanceof UrlResource) {
- return ((UrlResource) k).getFilename();
- } else if (k instanceof File) {
- return ((File) k).getName();
- } else {
- throw new ClassCastException();
- }
- }
-
- private static RelationshipSchema jsonFilesLoader(String version, List<Object> files) {
- List<String> fileContents = new ArrayList<>();
- RelationshipSchema rsSchema = null;
- if (files.size() == 2) {
- for (Object file : files) {
- fileContents.add(jsonToRelationSchema(version, file));
- versions.add(Integer.parseInt(version.substring(1)));
- }
-
- try {
- rsSchema = new RelationshipSchema(fileContents);
- } catch (CrudException | IOException e) {
- e.printStackTrace();
- logger.error(CrudServiceMsgs.INVALID_OXM_FILE,
- files.stream().map(f -> filename(f)).collect(Collectors.toList()).toString(), e.getMessage());
- }
- return rsSchema;
- }
- return rsSchema;
- }
-
- private synchronized static void updateVersionContext(String version, RelationshipSchema rs) {
- versionContextMap.put(version, rs);
- }
-
- private synchronized static String jsonToRelationSchema(String version, Object file) {
- InputStream inputStream = null;
- String content = null;
-
- try {
- if (file instanceof UrlResource) {
- inputStream = ((UrlResource) file).getInputStream();
- } else {
- inputStream = new FileInputStream((File) file);
- addtimer(version, file);
- }
- content = IOUtils.toString(inputStream, "UTF-8");
- } catch (IOException e) {
- e.printStackTrace();
- }
- return content;
- }
-
- private static void addtimer(String version, Object file) {
- TimerTask task = null;
- task = new FileWatcher((File) file) {
- protected void onChange(File file) {
- // here we implement the onChange
- logger.info(CrudServiceMsgs.OXM_FILE_CHANGED, file.getName());
-
- try {
- // Cannot use the file object here because we also have to get the
- // edge properties associated with that version.
- // The properties are stored in a different file.
- RelationshipSchemaLoader.loadModels(version);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- };
-
- if (!timers.containsKey(version)) {
- Timer timer = new Timer("db_edge_rules_" + version);
- timer.schedule(task, new Date(), 10000);
- timers.put(version, timer);
-
- }
- }
-
- private static String myMatcher(Pattern p, String s) {
- Matcher m = p.matcher(s);
- return m.matches() ? m.group(1) : "";
- }
-}
diff --git a/src/main/java/org/openecomp/schema/RelationshipSchemaValidator.java b/src/main/java/org/openecomp/schema/RelationshipSchemaValidator.java
deleted file mode 100644
index e2374be..0000000
--- a/src/main/java/org/openecomp/schema/RelationshipSchemaValidator.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * Gizmo
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * 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.openecomp.schema;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-import org.openecomp.crud.entity.Edge;
-import org.openecomp.crud.entity.Vertex;
-import org.openecomp.crud.exception.CrudException;
-import org.openecomp.crud.service.EdgePayload;
-import org.openecomp.crud.util.CrudServiceUtil;
-import org.radeox.util.logging.Logger;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.ws.rs.core.Response.Status;
-
-public class RelationshipSchemaValidator {
-
- public static final String SOURCE_NODE = "source";
- public static final String TARGET_NODE = "target";
-
- final static Pattern urlPattern = Pattern.compile("services/inventory/(.*)/(.*)/(.*)");
-
- public static Map<String, Object> resolveCollectionfilter(String version, String type,
- Map<String, String> filter)
- throws CrudException {
-
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
- if (schema == null) {
- throw new CrudException("", Status.NOT_FOUND);
- }
-
- Map<String, Class<?>> props = schema.lookupRelationType(type);
- Map<String, Object> result = new HashMap<String, Object>();
-
- for (String key : filter.keySet()) {
-
- if (props.containsKey(key)) {
- try {
- Object value = CrudServiceUtil.validateFieldType(filter.get(key), props.get(key));
- result.put(key, value);
- } catch (Exception ex) {
- // Skip any exceptions thrown while validating the filter
- // key value
- continue;
- }
- }
- }
-
- return result;
-
- }
-
- public static void validateType(String version, String type) throws CrudException {
-
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
- if (!schema.isValidType(type)) {
- throw new CrudException("Invalid " + RelationshipSchema.SCHEMA_RELATIONSHIP_TYPE
- + ": " + type,
- Status.BAD_REQUEST);
- }
-
- }
-
- public static Edge validateIncomingAddPayload(String version, String type, Vertex sourceNode,
- Vertex targetNode, JsonElement properties)
- throws CrudException {
- EdgePayload payload = new EdgePayload();
- payload.setSource("services/inventory/" + version + "/" + sourceNode.getType()
- + "/" + sourceNode.getId().get());
- payload.setTarget("services/inventory/" + version + "/" + targetNode.getType()
- + "/" + targetNode.getId().get());
- payload.setType(type);
- payload.setProperties(properties);
- return validateIncomingAddPayload(version, type, payload);
- }
-
- public static Edge validateIncomingAddPayload(String version, String type, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
-
- try {
-
- if (payload.getSource() == null || payload.getTarget() == null) {
- throw new CrudException("Source/Target not specified", Status.BAD_REQUEST);
- }
-
- Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
- Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
-
- if (!sourceMatcher.matches() || !targetMatcher.matches()) {
- throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);
- }
-
- // create key based on source:target:relationshipType
- String sourceNodeType = sourceMatcher.group(2);
- String targetNodeType = targetMatcher.group(2);
-
- String sourceNodeId = sourceMatcher.group(3);
- String targetNodeId = targetMatcher.group(3);
-
- String key = sourceNodeType + ":" + targetNodeType + ":" + type;
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- throw new CrudException("Invalid source/target/relationship type: " + key,
- Status.BAD_REQUEST);
- }
-
- Edge.Builder modelEdgeBuilder = new Edge.Builder(type);
-
- modelEdgeBuilder.source(new Vertex.Builder(sourceNodeType).id(sourceNodeId).build());
- modelEdgeBuilder.target(new Vertex.Builder(targetNodeType).id(targetNodeId).build());
-
- // validate it properties
- validateEdgeProps(modelEdgeBuilder, payload.getProperties(), schemaObject);
-
- return modelEdgeBuilder.build();
- } catch (Exception ex) {
-
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
-
- }
-
- public static Edge validateIncomingPatchPayload(Edge edge, String version, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
-
- try {
- if (payload.getSource() != null) {
- Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
-
- if (!sourceMatcher.matches()) {
- throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
- }
- String sourceNodeId = sourceMatcher.group(3);
- if (!sourceNodeId.equals(edge.getSource().getId().get())) {
- throw new CrudException("Source can't be updated", Status.BAD_REQUEST);
- }
- }
-
- if (payload.getTarget() != null) {
- Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
-
- if (!targetMatcher.matches()) {
- throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
- }
- String sourceNodeId = targetMatcher.group(3);
- if (!sourceNodeId.equals(edge.getTarget().getId().get())) {
- throw new CrudException("Target can't be updated", Status.BAD_REQUEST);
- }
- }
- // create key based on source:target:relationshipType
-
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- Logger.warn("key :" + key
- + " not found in relationship schema . Skipping the schema validation");
- return edge;
- }
-
- Set<Map.Entry<String, JsonElement>> entries = payload.getProperties()
- .getAsJsonObject().entrySet();
-
- for (Map.Entry<String, JsonElement> entry : entries) {
-
- if (!schemaObject.containsKey(entry.getKey())) {
- throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
- } else if (entry.getValue() instanceof JsonNull && edge.getProperties()
- .containsKey(entry.getKey())) {
- edge.getProperties().remove(entry.getKey());
- } else if (!(entry.getValue() instanceof JsonNull)) {
- Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(),
- schemaObject.get(entry.getKey()));
- edge.getProperties().put(entry.getKey(), value);
- }
-
- }
-
- return edge;
-
- } catch (Exception ex) {
-
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
- }
-
- public static Edge validateIncomingUpdatePayload(Edge edge, String version, Vertex sourceNode,
- Vertex targetNode, JsonElement properties)
- throws CrudException {
- EdgePayload payload = new EdgePayload();
- payload.setSource("services/inventory/" + version + "/" + sourceNode.getType()
- + "/" + sourceNode.getId().get());
- payload.setTarget("services/inventory/" + version + "/" + targetNode.getType()
- + "/" + targetNode.getId().get());
- payload.setType(edge.getType());
- payload.setProperties(properties);
- return validateIncomingUpdatePayload(edge, version, payload);
- }
-
- public static Edge validateIncomingUpdatePayload(Edge edge, String version, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
-
- try {
-
- if (payload.getSource() != null) {
- Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
-
- if (!sourceMatcher.matches()) {
- throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
- }
- String sourceNodeId = sourceMatcher.group(3);
- if (!sourceNodeId.equals(edge.getSource().getId().get())) {
- throw new CrudException("Source can't be updated", Status.BAD_REQUEST);
- }
- }
-
- if (payload.getTarget() != null) {
- Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
-
- if (!targetMatcher.matches()) {
- throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
- }
- String sourceNodeId = targetMatcher.group(3);
- if (!sourceNodeId.equals(edge.getTarget().getId().get())) {
- throw new CrudException("Target can't be updated", Status.BAD_REQUEST);
- }
- }
- // create key based on source:target:relationshipType
-
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- Logger.warn("key :" + key
- + " not found in relationship schema . Skipping the schema validation");
- return edge;
- }
-
- Edge.Builder updatedEdgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId().get());
-
- updatedEdgeBuilder
- .source(new Vertex.Builder(edge.getSource().getType()).id(edge.getSource().getId()
- .get()).build());
- updatedEdgeBuilder
- .target(new Vertex.Builder(edge.getTarget().getType()).id(edge.getTarget().getId()
- .get()).build());
-
- validateEdgeProps(updatedEdgeBuilder, payload.getProperties(), schemaObject);
-
- return updatedEdgeBuilder.build();
- } catch (Exception ex) {
-
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
- }
-
-
- private static void validateEdgeProps(Edge.Builder builder, JsonElement props,
- Map<String, Class<?>> schemaObject)
- throws CrudException {
- Set<Map.Entry<String, JsonElement>> entries = props.getAsJsonObject().entrySet();
-
- for (Map.Entry<String, JsonElement> entry : entries) {
-
- if (!schemaObject.containsKey(entry.getKey())) {
- throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
- } else {
- Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(),
- schemaObject.get(entry.getKey()));
- builder.property(entry.getKey(), value);
- }
-
- }
-
- }
-
- public static Edge validateOutgoingPayload(String version, Edge edge) throws CrudException {
-
- Edge.Builder modelEdgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId()
- .get()).source(edge.getSource())
- .target(edge.getTarget());
-
- RelationshipSchema schema = RelationshipSchemaLoader.getSchemaForVersion(version);
-
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null || schemaObject.isEmpty()) {
- return edge;
- }
-
- for (String prop : edge.getProperties().keySet()) {
- if (schemaObject.containsKey(prop)) {
- modelEdgeBuilder.property(prop, edge.getProperties().get(prop));
- }
-
- }
- return modelEdgeBuilder.build();
- }
-
-
- public static String vertexTypeFromUri(String uri) throws CrudException {
-
- Matcher matcher = urlPattern.matcher(uri);
-
- if (!matcher.matches()) {
- throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);
- }
-
- return matcher.group(2);
- }
-}