Performance Improvements for Gizmo bulk API
[aai/gizmo.git] / src / main / java / org / onap / crud / service / AbstractGraphDataService.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21 package org.onap.crud.service;
22
23 import com.google.gson.Gson;
24 import com.google.gson.GsonBuilder;
25 import com.google.gson.reflect.TypeToken;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.Set;
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;
44
45 public abstract class AbstractGraphDataService {
46   protected GraphDao daoForGet;
47   protected GraphDao dao;
48
49   public AbstractGraphDataService() throws CrudException {
50   }
51
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));
58   }
59
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>>() {
68     }.getType());
69     EntityTag entityTag = CrudServiceUtil.getETagFromHeader(operationResult.getHeaders());
70     return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetEdgesResponse(items, version));
71   }
72
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,
80         version));
81   }
82
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));
89   }
90
91   public abstract ImmutablePair<EntityTag, String> addVertex(String version, String type, VertexPayload payload)
92             throws CrudException;
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)
99             throws CrudException;
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;
105   
106   public abstract String addBulk(String version, BulkPayload payload, HttpHeaders headers) throws CrudException;
107
108 }