re base 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.IMigrationStage;
6 import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage.AspectMigrationEnum;
7 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
8 import org.openecomp.sdc.asdctool.migration.resolver.MigrationResolver;
9 import org.openecomp.sdc.asdctool.migration.service.SdcRepoService;
10 import org.openecomp.sdc.common.log.wrappers.Logger;
11
12 import java.util.List;
13
14 public class SdcMigrationTool {
15
16     private static final Logger LOGGER = Logger.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<IMigrationStage> migrations = migrationsResolver.resolveMigrations();
34         LOGGER.info("there are {} migrations task to execute", migrations.size());
35         for (IMigrationStage 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                 if(migration.getAspectMigration() == AspectMigrationEnum.MIGRATION)
43                         sdcRepoService.createMigrationTask(executionResult.toMigrationTaskEntry());
44             } catch (RuntimeException e) {
45                 LOGGER.error("migration {} with version {} has failed. error msg: {}", migration.getClass().getName(), migration.getVersion().toString(), e);
46                 return false;
47             }
48         }
49         return true;
50     }
51
52     private boolean migrationHasFailed(MigrationExecutionResult migrationResult) {
53         return migrationResult.getMigrationStatus().equals(MigrationResult.MigrationStatus.FAILED);
54     }
55
56     private void handleEnforceMigrationFlag(boolean enforceAll) {
57         if (enforceAll) {
58             LOGGER.info("enforcing migration for current version");
59             sdcRepoService.clearTasksForCurrentMajor();
60         }
61     }
62
63 }