Catalog alignment
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / operations / impl / ConsumerOperation.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.operations.impl;
22
23 import fj.data.Either;
24 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
25 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
26 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
27 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
28 import org.openecomp.sdc.be.model.operations.api.IConsumerOperation;
29 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
30 import org.openecomp.sdc.be.resources.data.ConsumerData;
31 import org.openecomp.sdc.common.log.wrappers.Logger;
32 import org.springframework.beans.factory.annotation.Qualifier;
33 import org.springframework.stereotype.Component;
34
35 import java.util.Collections;
36 import java.util.List;
37
38 @Component("consumer-operation")
39 public class ConsumerOperation implements IConsumerOperation {
40
41     private JanusGraphGenericDao janusGraphGenericDao;
42
43     private static final Logger log = Logger.getLogger(ConsumerOperation.class.getName());
44
45     public ConsumerOperation(@Qualifier("janusgraph-generic-dao")
46                                  JanusGraphGenericDao janusGraphGenericDao) {
47         this.janusGraphGenericDao = janusGraphGenericDao;
48     }
49
50     @Override
51     public Either<ConsumerData, StorageOperationStatus> getCredentials(String consumerName) {
52         Either<ConsumerData, StorageOperationStatus> result = null;
53         log.debug("retriving Credentials for: {}", consumerName);
54         Either<ConsumerData, JanusGraphOperationStatus> getNode = janusGraphGenericDao
55             .getNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
56         if (getNode.isRight()) {
57             JanusGraphOperationStatus status = getNode.right().value();
58             log.error("Error returned after get Consumer Data node {}. status returned is {}", consumerName, status);
59             result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
60             return result;
61         }
62         ConsumerData consumerData = getNode.left().value();
63         return Either.left(consumerData);
64     }
65
66     @Override
67     public Either<List<ConsumerData>, StorageOperationStatus> getAll() {
68         log.debug("retrieving all consumers");
69         return janusGraphGenericDao
70             .getByCriteria(NodeTypeEnum.ConsumerCredentials, Collections.emptyMap(), ConsumerData.class)
71                 .right().map(DaoStatusConverter::convertJanusGraphStatusToStorageStatus);
72     }
73
74     @Override
75     public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData) {
76         return createCredentials(consumerData, false);
77     }
78
79     @Override
80     public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData, boolean inTransaction) {
81         Either<ConsumerData, StorageOperationStatus> result = null;
82         try {
83             log.debug("creating Credentials for: {}", consumerData.getUniqueId());
84             Either<ConsumerData, JanusGraphOperationStatus> createNode = janusGraphGenericDao
85                 .createNode(consumerData, ConsumerData.class);
86             if (createNode.isRight()) {
87                 JanusGraphOperationStatus status = createNode.right().value();
88                 log.error("Error returned after creating Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
89                 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
90                 return result;
91             }
92             ConsumerData createdConsumerData = createNode.left().value();
93             result = Either.left(createdConsumerData);
94             return result;
95         } finally {
96             handleTransaction(inTransaction, result);
97         }
98     }
99
100     @Override
101     public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName) {
102         return deleteCredentials(consumerName, false);
103     }
104
105     @Override
106     public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName, boolean inTransaction) {
107         Either<ConsumerData, StorageOperationStatus> result = null;
108         try {
109             log.debug("delete Credentials for: {}", consumerName);
110             Either<ConsumerData, JanusGraphOperationStatus> deleteNode = janusGraphGenericDao
111                 .deleteNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
112             if (deleteNode.isRight()) {
113                 JanusGraphOperationStatus status = deleteNode.right().value();
114                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerName, status);
115                 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
116                 return result;
117             }
118
119             ConsumerData deletedConsumerData = deleteNode.left().value();
120             result = Either.left(deletedConsumerData);
121             return result;
122         } finally {
123             handleTransaction(inTransaction, result);
124         }
125
126     }
127
128     @Override
129     public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData) {
130         return updateCredentials(consumerData, false);
131     }
132
133     @Override
134     public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData, boolean inTransaction) {
135
136         Either<ConsumerData, StorageOperationStatus> result = null;
137         try {
138             log.debug("update Credentials for: {}", consumerData.getUniqueId());
139             Either<ConsumerData, JanusGraphOperationStatus> updateNode = janusGraphGenericDao
140                 .updateNode(consumerData, ConsumerData.class);
141             if (updateNode.isRight()) {
142                 JanusGraphOperationStatus status = updateNode.right().value();
143                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
144                 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
145                 return result;
146             }
147             ConsumerData updatedConsumerData = updateNode.left().value();
148             result = Either.left(updatedConsumerData);
149             return result;
150         } finally {
151             handleTransaction(inTransaction, result);
152         }
153     }
154
155     private void handleTransaction(boolean inTransaction, Either<ConsumerData, StorageOperationStatus> result) {
156         if (!inTransaction) {
157             if (result == null || result.isRight()) {
158                 log.error("Going to execute rollback on graph.");
159                 janusGraphGenericDao.rollback();
160             } else {
161                 log.debug("Going to execute commit on graph.");
162                 janusGraphGenericDao.commit();
163             }
164         }
165     }
166
167 }