[SDC-29] rebase continue work to align source
[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 org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
24 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
25 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
26 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
27 import org.openecomp.sdc.be.model.operations.api.IConsumerOperation;
28 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
29 import org.openecomp.sdc.be.resources.data.ConsumerData;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32 import org.springframework.beans.factory.annotation.Qualifier;
33 import org.springframework.stereotype.Component;
34
35 import fj.data.Either;
36
37 import java.util.Collections;
38 import java.util.List;
39
40 @Component("consumer-operation")
41 public class ConsumerOperation implements IConsumerOperation {
42
43         private TitanGenericDao titanGenericDao;
44
45         private static Logger log = LoggerFactory.getLogger(ConsumerOperation.class.getName());
46
47         public ConsumerOperation(@Qualifier("titan-generic-dao") TitanGenericDao titanGenericDao) {
48                 this.titanGenericDao = titanGenericDao;
49         }
50
51         @Override
52         public Either<ConsumerData, StorageOperationStatus> getCredentials(String consumerName) {
53                 Either<ConsumerData, StorageOperationStatus> result = null;
54                 log.debug("retriving Credentials for: {}", consumerName);
55                 Either<ConsumerData, TitanOperationStatus> getNode = titanGenericDao.getNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
56                 if (getNode.isRight()) {
57                         TitanOperationStatus status = getNode.right().value();
58                         log.error("Error returned after get Consumer Data node {}. status returned is {}", consumerName, status);
59                         result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(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 titanGenericDao.getByCriteria(NodeTypeEnum.ConsumerCredentials, Collections.emptyMap(), ConsumerData.class)
70                                 .right().map(DaoStatusConverter::convertTitanStatusToStorageStatus);
71         }
72
73         @Override
74         public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData) {
75                 return createCredentials(consumerData, false);
76         }
77
78         @Override
79         public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData, boolean inTransaction) {
80                 Either<ConsumerData, StorageOperationStatus> result = null;
81                 try {
82                         log.debug("creating Credentials for: {}", consumerData.getUniqueId());
83                         Either<ConsumerData, TitanOperationStatus> createNode = titanGenericDao.createNode(consumerData, ConsumerData.class);
84                         if (createNode.isRight()) {
85                                 TitanOperationStatus status = createNode.right().value();
86                                 log.error("Error returned after creating Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
87                                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
88                                 return result;
89                         }
90                         ConsumerData createdConsumerData = createNode.left().value();
91                         result = Either.left(createdConsumerData);
92                         return result;
93                 } finally {
94                         handleTransaction(inTransaction, result);
95                 }
96         }
97
98         @Override
99         public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName) {
100                 return deleteCredentials(consumerName, false);
101         }
102
103         @Override
104         public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName, boolean inTransaction) {
105                 Either<ConsumerData, StorageOperationStatus> result = null;
106                 try {
107                         log.debug("delete Credentials for: {}", consumerName);
108                         Either<ConsumerData, TitanOperationStatus> deleteNode = titanGenericDao.deleteNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
109                         if (deleteNode.isRight()) {
110                                 TitanOperationStatus status = deleteNode.right().value();
111                                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerName, status);
112                                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
113                                 return result;
114                         }
115
116                         ConsumerData deletedConsumerData = deleteNode.left().value();
117                         result = Either.left(deletedConsumerData);
118                         return result;
119                 } finally {
120                         handleTransaction(inTransaction, result);
121                 }
122
123         }
124
125         @Override
126         public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData) {
127                 return updateCredentials(consumerData, false);
128         }
129
130         @Override
131         public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData, boolean inTransaction) {
132
133                 Either<ConsumerData, StorageOperationStatus> result = null;
134                 try {
135                         log.debug("update Credentials for: {}", consumerData.getUniqueId());
136                         Either<ConsumerData, TitanOperationStatus> updateNode = titanGenericDao.updateNode(consumerData, ConsumerData.class);
137                         if (updateNode.isRight()) {
138                                 TitanOperationStatus status = updateNode.right().value();
139                                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
140                                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
141                                 return result;
142                         }
143                         ConsumerData updatedConsumerData = updateNode.left().value();
144                         result = Either.left(updatedConsumerData);
145                         return result;
146                 } finally {
147                         handleTransaction(inTransaction, result);
148                 }
149         }
150
151         private void handleTransaction(boolean inTransaction, Either<ConsumerData, StorageOperationStatus> result) {
152                 if (false == inTransaction) {
153                         if (result == null || result.isRight()) {
154                                 log.error("Going to execute rollback on graph.");
155                                 titanGenericDao.rollback();
156                         } else {
157                                 log.debug("Going to execute commit on graph.");
158                                 titanGenericDao.commit();
159                         }
160                 }
161         }
162
163 }