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