[SDC] rebase 1710 code
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / migration / core / SdcMigrationTool.java
1 package org.openecomp.sdc.asdctool.migration.core;
2
3 import org.openecomp.sdc.asdctool.migration.core.execution.MigrationExecutionResult;
4 import org.openecomp.sdc.asdctool.migration.core.execution.MigrationExecutorImpl;
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.asdctool.migration.resolver.MigrationResolver;
8 import org.openecomp.sdc.asdctool.migration.service.SdcRepoService;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import java.util.List;
13
14 public class SdcMigrationTool {
15
16     private static final Logger LOGGER = LoggerFactory.getLogger(SdcMigrationTool.class);
17
18     private MigrationResolver migrationsResolver;
19
20     private SdcRepoService sdcRepoService;
21
22     public SdcMigrationTool(MigrationResolver migrationsResolver, SdcRepoService sdcRepoService) {
23         this.migrationsResolver = migrationsResolver;
24         this.sdcRepoService = sdcRepoService;
25     }
26
27     public SdcMigrationTool() {
28     }
29
30     public boolean migrate(boolean enforceAll) {
31         LOGGER.info("starting migration process");
32         handleEnforceMigrationFlag(enforceAll);
33         List<Migration> migrations = migrationsResolver.resolveMigrations();
34         LOGGER.info("there are {} migrations task to execute", migrations.size());
35         for (Migration migration : migrations) {
36             try {
37                 MigrationExecutionResult executionResult = new MigrationExecutorImpl().execute(migration);
38                 if (migrationHasFailed(executionResult)) {
39                     LOGGER.error("migration {} with version {} has failed. error msg: {}", migration.getClass().getName(), migration.getVersion().toString(), executionResult.getMsg());
40                     return false;
41                 }
42                 sdcRepoService.createMigrationTask(executionResult.toMigrationTaskEntry());
43             } catch (RuntimeException e) {
44                 LOGGER.error("migration {} with version {} has failed. error msg: {}", migration.getClass().getName(), migration.getVersion().toString(), e);
45                 return false;
46             }
47         }
48         return true;
49     }
50
51     private boolean migrationHasFailed(MigrationExecutionResult migrationResult) {
52         return migrationResult.getMigrationStatus().equals(MigrationResult.MigrationStatus.FAILED);
53     }
54
55     private void handleEnforceMigrationFlag(boolean enforceAll) {
56         if (enforceAll) {
57             LOGGER.info("enforcing migration for current version");
58             sdcRepoService.clearTasksForCurrentMajor();
59         }
60     }
61
62 }