aboutsummaryrefslogtreecommitdiffstats
path: root/asdctool/src/main/java/org/openecomp/sdc/asdctool/migration/core/SdcMigrationTool.java
blob: 2435601e7c963ee117d4ee08896e179f3f798811 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package org.openecomp.sdc.asdctool.migration.core;

import org.openecomp.sdc.asdctool.migration.core.execution.MigrationExecutionResult;
import org.openecomp.sdc.asdctool.migration.core.execution.MigrationExecutorImpl;
import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage;
import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage.AspectMigrationEnum;
import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
import org.openecomp.sdc.asdctool.migration.resolver.MigrationResolver;
import org.openecomp.sdc.asdctool.migration.service.SdcRepoService;
import org.openecomp.sdc.common.log.wrappers.Logger;

import java.util.List;

public class SdcMigrationTool {

    private static final Logger LOGGER = Logger.getLogger(SdcMigrationTool.class);

    private MigrationResolver migrationsResolver;

    private SdcRepoService sdcRepoService;

    public SdcMigrationTool(MigrationResolver migrationsResolver, SdcRepoService sdcRepoService) {
        this.migrationsResolver = migrationsResolver;
        this.sdcRepoService = sdcRepoService;
    }

    public SdcMigrationTool() {
    }

    public boolean migrate(boolean enforceAll) {
        LOGGER.info("starting migration process");
        handleEnforceMigrationFlag(enforceAll);
        List<IMigrationStage> migrations = migrationsResolver.resolveMigrations();
        LOGGER.info("there are {} migrations task to execute", migrations.size());
        for (IMigrationStage migration : migrations) {
            try {
                MigrationExecutionResult executionResult = new MigrationExecutorImpl().execute(migration);
                if (migrationHasFailed(executionResult)) {
                    LOGGER.error("migration {} with version {} has failed. error msg: {}", migration.getClass().getName(), migration.getVersion().toString(), executionResult.getMsg());
                    return false;
                }
                if(migration.getAspectMigration() == AspectMigrationEnum.MIGRATION)
                	sdcRepoService.createMigrationTask(executionResult.toMigrationTaskEntry());
            } catch (RuntimeException e) {
                LOGGER.error("migration {} with version {} has failed. error msg: {}", migration.getClass().getName(), migration.getVersion().toString(), e);
                return false;
            }
        }
        return true;
    }

    private boolean migrationHasFailed(MigrationExecutionResult migrationResult) {
        return migrationResult.getMigrationStatus().equals(MigrationResult.MigrationStatus.FAILED);
    }

    private void handleEnforceMigrationFlag(boolean enforceAll) {
        if (enforceAll) {
            LOGGER.info("enforcing migration for current version");
            sdcRepoService.clearTasksForCurrentMajor();
        }
    }

}