Upgrade SDC from Titan to Janus Graph
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / migration / tasks / mig1806 / SdcArchiveMigration.java
1 package org.openecomp.sdc.asdctool.migration.tasks.mig1806;
2
3 import fj.data.Either;
4 import org.openecomp.sdc.asdctool.migration.core.DBVersion;
5 import org.openecomp.sdc.asdctool.migration.core.task.Migration;
6 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
7 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
8 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
9 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
10 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
11 import org.openecomp.sdc.be.dao.jsongraph.utils.IdBuilderUtils;
12 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
13 import org.openecomp.sdc.common.log.wrappers.Logger;
14 import org.springframework.stereotype.Component;
15
16 import java.math.BigInteger;
17
18 @Component
19 public class SdcArchiveMigration implements Migration {
20     private static final Logger logger = Logger.getLogger(SdcArchiveMigration.class);
21
22     private JanusGraphDao janusGraphDao;
23
24     public SdcArchiveMigration(JanusGraphDao janusGraphDao) {
25         this.janusGraphDao = janusGraphDao;
26     }
27
28     @Override
29     public String description() {
30         return "add archive node for archiving/restoring components ";
31     }
32
33     @Override
34     public DBVersion getVersion() {
35         return DBVersion.from(BigInteger.valueOf(1806), BigInteger.valueOf(0));
36     }
37
38     @Override
39     public MigrationResult migrate() {
40         JanusGraphOperationStatus status = null;
41         try {
42             status = getOrCreateArchiveRoot();
43             return status == JanusGraphOperationStatus.OK ? MigrationResult.success() : MigrationResult.error("failed to create archive root node. error: " + status);
44         } finally {
45             commitOrRollBack(status);
46         }
47     }
48
49     private void commitOrRollBack(JanusGraphOperationStatus status) {
50         if (status == JanusGraphOperationStatus.OK) {
51             janusGraphDao.commit();
52         } else {
53             janusGraphDao.rollback();
54         }
55     }
56
57     private JanusGraphOperationStatus getOrCreateArchiveRoot() {
58         logger.info("creating or getting catalog archive vertex");
59         return janusGraphDao.getVertexByLabel(VertexTypeEnum.ARCHIVE_ROOT)
60                 .either(v -> JanusGraphOperationStatus.OK, s -> this.createRootArchiveVertex());
61     }
62
63     private JanusGraphOperationStatus createRootArchiveVertex() {
64         GraphVertex archiveRootVertex = new GraphVertex(VertexTypeEnum.ARCHIVE_ROOT);
65         archiveRootVertex.setUniqueId(IdBuilderUtils.generateUniqueId());
66         archiveRootVertex.addMetadataProperty(GraphPropertyEnum.LABEL, VertexTypeEnum.ARCHIVE_ROOT);
67         archiveRootVertex.addMetadataProperty(GraphPropertyEnum.UNIQUE_ID, archiveRootVertex.getUniqueId());
68
69         logger.info("Creating root archive vertex {}", archiveRootVertex.getUniqueId());
70
71         final Either<GraphVertex, JanusGraphOperationStatus> vertexE = janusGraphDao.createVertex(archiveRootVertex);
72
73         return vertexE.isLeft() ? JanusGraphOperationStatus.OK : vertexE.right().value();
74     }
75
76 }