Catalog alignment
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / migration / tasks / mig1902 / SdcConsumerMigration.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2020 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.asdctool.migration.tasks.mig1902;
22
23 import fj.data.Either;
24 import org.openecomp.sdc.asdctool.migration.core.DBVersion;
25 import org.openecomp.sdc.asdctool.migration.core.task.Migration;
26 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
27 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
28 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
29 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
30 import org.openecomp.sdc.be.resources.data.ConsumerData;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33 import org.springframework.stereotype.Component;
34
35 import java.math.BigInteger;
36 import java.util.List;
37
38 @Component
39 public class SdcConsumerMigration implements Migration {
40
41     private static final Logger logger = LoggerFactory.getLogger(SdcConsumerMigration.class);
42
43     private JanusGraphGenericDao janusGraphGenericDao;
44
45     public SdcConsumerMigration(JanusGraphGenericDao janusGraphGenericDao) {
46         this.janusGraphGenericDao = janusGraphGenericDao;
47     }
48
49     @Override
50     public String description() {
51         return "remove all consumer nodes";
52     }
53
54     @Override
55     public DBVersion getVersion() {
56         return DBVersion.from(BigInteger.valueOf(1902), BigInteger.valueOf(0));
57     }
58
59     @Override
60     public MigrationResult migrate() {
61         JanusGraphOperationStatus status = null;
62         try {
63             status = handleConsumerNodes();
64             if (status == JanusGraphOperationStatus.OK){
65                 logger.info("removed all consumer nodes.");
66                 return MigrationResult.success();
67             } else {
68                 return MigrationResult.error("failed to remove consumer nodes. error: " + status);
69             }
70         } finally {
71             commitOrRollBack(status);
72         }
73     }
74
75     private void commitOrRollBack(JanusGraphOperationStatus status) {
76         if (status == JanusGraphOperationStatus.OK) {
77             janusGraphGenericDao.commit();
78         } else {
79             janusGraphGenericDao.rollback();
80         }
81     }
82
83     private JanusGraphOperationStatus handleConsumerNodes() {
84         logger.info("getting all consumer nodes.");
85         return janusGraphGenericDao.getAll(NodeTypeEnum.ConsumerCredentials, ConsumerData.class)
86                 .either(this::removeConsumerNodes, this::handleError);
87     }
88
89     private JanusGraphOperationStatus removeConsumerNodes(List<ConsumerData> consumerNodes){
90         logger.info("found {} consumer nodes.", consumerNodes.size());
91         return consumerNodes.stream()
92                 .map(consumerNode -> janusGraphGenericDao.deleteNode(consumerNode, ConsumerData.class))
93                 .filter(Either::isRight)
94                 .map(either -> either.right().value())
95                 .findAny()
96                 .orElse(JanusGraphOperationStatus.OK);
97     }
98
99     private JanusGraphOperationStatus handleError(JanusGraphOperationStatus status){
100         if (status == JanusGraphOperationStatus.NOT_FOUND) {
101             logger.info("found 0 consumer nodes.");
102             return JanusGraphOperationStatus.OK;
103         } else{
104             return status;
105         }
106     }
107
108 }