[SDC] rebase 1710 code
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / migration / core / execution / MigrationExecutorImpl.java
1 package org.openecomp.sdc.asdctool.migration.core.execution;
2
3 import org.openecomp.sdc.asdctool.migration.core.MigrationException;
4 import org.openecomp.sdc.asdctool.migration.core.task.Migration;
5 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
8 import org.springframework.util.StopWatch;
9
10
11 public class MigrationExecutorImpl implements MigrationExecutor {
12
13     private static final Logger LOGGER = LoggerFactory.getLogger(MigrationExecutorImpl.class);
14
15     @Override
16     public MigrationExecutionResult execute(Migration migration) throws MigrationException {
17         try {
18             LOGGER.info("starting migration {}. description: {}. version {}", migration.getClass().getName(), migration.description(),  migration.getVersion().toString());
19             StopWatch stopWatch = new StopWatch();
20             stopWatch.start();
21             MigrationResult migrationResult = migration.migrate();
22             stopWatch.stop();
23             double executionTime = stopWatch.getTotalTimeSeconds();
24             return logAndCreateExecutionResult(migration, migrationResult, executionTime);
25         } catch (RuntimeException e) {
26             LOGGER.error("migration {} has failed!", migration.description(), e);
27             throw new MigrationException("migration %s failed!!!", e);
28
29         }
30     }
31
32     private MigrationExecutionResult logAndCreateExecutionResult(Migration migration, MigrationResult migrationResult, double executionTime) {
33         LOGGER.info("finished migration {}. with version {}. migration status: {}, migration message: {}, execution time: {}", migration.getClass().getName(),  migration.getVersion().toString(), migrationResult.getMigrationStatus().name(), migrationResult.getMsg(), executionTime);
34         return createMigrationTask(migration, migrationResult, executionTime);
35     }
36
37     private MigrationExecutionResult createMigrationTask(Migration migration, MigrationResult migrationResult, double totalTimeSeconds) {
38         MigrationExecutionResult migrationExecutionResult = new MigrationExecutionResult();
39         migrationExecutionResult.setExecutionTime(totalTimeSeconds);
40         migrationExecutionResult.setMigrationStatus(migrationResult.getMigrationStatus());
41         migrationExecutionResult.setMsg(migrationResult.getMsg());
42         migrationExecutionResult.setTaskName(migration.getClass().getName());
43         migrationExecutionResult.setVersion(migration.getVersion());
44         return migrationExecutionResult;
45     }
46
47 }