re base code
[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.neo4j.GraphPropertiesDictionary;
25 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
26 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
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 TitanGenericDao titanGenericDao;
42
43     private static final Logger log = Logger.getLogger(ConsumerOperation.class.getName());
44
45     public ConsumerOperation(@Qualifier("titan-generic-dao") TitanGenericDao titanGenericDao) {
46         this.titanGenericDao = titanGenericDao;
47     }
48
49     @Override
50     public Either<ConsumerData, StorageOperationStatus> getCredentials(String consumerName) {
51         Either<ConsumerData, StorageOperationStatus> result = null;
52         log.debug("retriving Credentials for: {}", consumerName);
53         Either<ConsumerData, TitanOperationStatus> getNode = titanGenericDao.getNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
54         if (getNode.isRight()) {
55             TitanOperationStatus status = getNode.right().value();
56             log.error("Error returned after get Consumer Data node {}. status returned is {}", consumerName, status);
57             result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
58             return result;
59         }
60         ConsumerData consumerData = getNode.left().value();
61         return Either.left(consumerData);
62     }
63
64     @Override
65     public Either<List<ConsumerData>, StorageOperationStatus> getAll() {
66         log.debug("retrieving all consumers");
67         return titanGenericDao.getByCriteria(NodeTypeEnum.ConsumerCredentials, Collections.emptyMap(), ConsumerData.class)
68                 .right().map(DaoStatusConverter::convertTitanStatusToStorageStatus);
69     }
70
71     @Override
72     public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData) {
73         return createCredentials(consumerData, false);
74     }
75
76     @Override
77     public Either<ConsumerData, StorageOperationStatus> createCredentials(ConsumerData consumerData, boolean inTransaction) {
78         Either<ConsumerData, StorageOperationStatus> result = null;
79         try {
80             log.debug("creating Credentials for: {}", consumerData.getUniqueId());
81             Either<ConsumerData, TitanOperationStatus> createNode = titanGenericDao.createNode(consumerData, ConsumerData.class);
82             if (createNode.isRight()) {
83                 TitanOperationStatus status = createNode.right().value();
84                 log.error("Error returned after creating Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
85                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
86                 return result;
87             }
88             ConsumerData createdConsumerData = createNode.left().value();
89             result = Either.left(createdConsumerData);
90             return result;
91         } finally {
92             handleTransaction(inTransaction, result);
93         }
94     }
95
96     @Override
97     public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName) {
98         return deleteCredentials(consumerName, false);
99     }
100
101     @Override
102     public Either<ConsumerData, StorageOperationStatus> deleteCredentials(String consumerName, boolean inTransaction) {
103         Either<ConsumerData, StorageOperationStatus> result = null;
104         try {
105             log.debug("delete Credentials for: {}", consumerName);
106             Either<ConsumerData, TitanOperationStatus> deleteNode = titanGenericDao.deleteNode(GraphPropertiesDictionary.CONSUMER_NAME.getProperty(), consumerName, ConsumerData.class);
107             if (deleteNode.isRight()) {
108                 TitanOperationStatus status = deleteNode.right().value();
109                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerName, status);
110                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
111                 return result;
112             }
113
114             ConsumerData deletedConsumerData = deleteNode.left().value();
115             result = Either.left(deletedConsumerData);
116             return result;
117         } finally {
118             handleTransaction(inTransaction, result);
119         }
120
121     }
122
123     @Override
124     public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData) {
125         return updateCredentials(consumerData, false);
126     }
127
128     @Override
129     public Either<ConsumerData, StorageOperationStatus> updateCredentials(ConsumerData consumerData, boolean inTransaction) {
130
131         Either<ConsumerData, StorageOperationStatus> result = null;
132         try {
133             log.debug("update Credentials for: {}", consumerData.getUniqueId());
134             Either<ConsumerData, TitanOperationStatus> updateNode = titanGenericDao.updateNode(consumerData, ConsumerData.class);
135             if (updateNode.isRight()) {
136                 TitanOperationStatus status = updateNode.right().value();
137                 log.error("Error returned after delete Consumer Data node {}. status returned is {}", consumerData.getUniqueId(), status);
138                 result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
139                 return result;
140             }
141             ConsumerData updatedConsumerData = updateNode.left().value();
142             result = Either.left(updatedConsumerData);
143             return result;
144         } finally {
145             handleTransaction(inTransaction, result);
146         }
147     }
148
149     private void handleTransaction(boolean inTransaction, Either<ConsumerData, StorageOperationStatus> result) {
150         if (!inTransaction) {
151             if (result == null || result.isRight()) {
152                 log.error("Going to execute rollback on graph.");
153                 titanGenericDao.rollback();
154             } else {
155                 log.debug("Going to execute commit on graph.");
156                 titanGenericDao.commit();
157             }
158         }
159     }
160
161 }