2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 package org.onap.crud.service;
23 import com.google.gson.Gson;
24 import com.google.gson.GsonBuilder;
25 import com.google.gson.reflect.TypeToken;
26 import java.util.List;
29 import javax.ws.rs.core.EntityTag;
30 import javax.ws.rs.core.HttpHeaders;
31 import net.dongliu.gson.GsonJava8TypeAdapterFactory;
32 import org.apache.commons.lang3.tuple.ImmutablePair;
33 import org.onap.aai.restclient.client.OperationResult;
34 import org.onap.crud.dao.GraphDao;
35 import org.onap.crud.dao.champ.ChampEdgeSerializer;
36 import org.onap.crud.dao.champ.ChampVertexSerializer;
37 import org.onap.crud.entity.Edge;
38 import org.onap.crud.entity.Vertex;
39 import org.onap.crud.exception.CrudException;
40 import org.onap.crud.parser.CrudResponseBuilder;
41 import org.onap.crud.util.CrudServiceUtil;
42 import org.onap.schema.OxmModelValidator;
43 import org.onap.schema.RelationshipSchemaValidator;
45 public abstract class AbstractGraphDataService {
46 protected GraphDao daoForGet;
47 protected GraphDao dao;
49 public AbstractGraphDataService() throws CrudException {
52 public ImmutablePair<EntityTag, String> getEdge(String version, String id, String type, Map<String, String> queryParams) throws CrudException {
53 RelationshipSchemaValidator.validateType(version, type);
54 OperationResult operationResult = daoForGet.getEdge(id, type, queryParams);
55 EntityTag entityTag = CrudServiceUtil.getETagFromHeader(operationResult.getHeaders());
56 Edge edge = Edge.fromJson(operationResult.getResult());
57 return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, edge), version));
60 public ImmutablePair<EntityTag, String> getEdges(String version, String type, Map<String, String> filter) throws CrudException {
61 Gson champGson = new GsonBuilder()
62 .registerTypeAdapterFactory(new GsonJava8TypeAdapterFactory())
63 .registerTypeAdapter(Vertex.class, new ChampVertexSerializer())
64 .registerTypeAdapter(Edge.class, new ChampEdgeSerializer()).create();
65 RelationshipSchemaValidator.validateType(version, type);
66 OperationResult operationResult = daoForGet.getEdges(type, RelationshipSchemaValidator.resolveCollectionfilter(version, type, filter));
67 List<Edge> items = champGson.fromJson(operationResult.getResult(), new TypeToken<List<Edge>>() {
69 EntityTag entityTag = CrudServiceUtil.getETagFromHeader(operationResult.getHeaders());
70 return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetEdgesResponse(items, version));
73 public ImmutablePair<EntityTag, String> getVertex(String version, String id, String type, Map<String, String> queryParams) throws CrudException {
74 type = OxmModelValidator.resolveCollectionType(version, type);
75 OperationResult vertexOpResult = daoForGet.getVertex(id, type, version, queryParams);
76 Vertex vertex = Vertex.fromJson(vertexOpResult.getResult(), version);
77 List<Edge> edges = daoForGet.getVertexEdges(id, queryParams, null);
78 EntityTag entityTag = CrudServiceUtil.getETagFromHeader(vertexOpResult.getHeaders());
79 return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetVertexResponse(OxmModelValidator.validateOutgoingPayload(version, vertex), edges,
83 public ImmutablePair<EntityTag, String> getVertices(String version, String type, Map<String, String> filter, Set<String> properties) throws CrudException {
84 type = OxmModelValidator.resolveCollectionType(version, type);
85 OperationResult operationResult = daoForGet.getVertices(type, OxmModelValidator.resolveCollectionfilter(version, type, filter), properties, version);
86 List<Vertex> vertices = Vertex.collectionFromJson(operationResult.getResult(), version);
87 EntityTag entityTag = CrudServiceUtil.getETagFromHeader(operationResult.getHeaders());
88 return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetVerticesResponse(vertices, version));
91 public abstract ImmutablePair<EntityTag, String> addVertex(String version, String type, VertexPayload payload)
93 public abstract ImmutablePair<EntityTag, String> updateVertex(String version, String id, String type,
94 VertexPayload payload) throws CrudException;
95 public abstract ImmutablePair<EntityTag, String> patchVertex(String version, String id, String type,
96 VertexPayload payload) throws CrudException;
97 public abstract String deleteVertex(String version, String id, String type) throws CrudException;
98 public abstract ImmutablePair<EntityTag, String> addEdge(String version, String type, EdgePayload payload)
100 public abstract String deleteEdge(String version, String id, String type) throws CrudException;
101 public abstract ImmutablePair<EntityTag, String> updateEdge(String version, String id, String type,
102 EdgePayload payload) throws CrudException;
103 public abstract ImmutablePair<EntityTag, String> patchEdge(String version, String id, String type,
104 EdgePayload payload) throws CrudException;
106 public abstract String addBulk(String version, BulkPayload payload, HttpHeaders headers) throws CrudException;