Sync Integ to Master
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / migration / resolver / SpringBeansMigrationResolver.java
1 package org.openecomp.sdc.asdctool.migration.resolver;
2
3
4 import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage;
5 import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage;
6 import org.openecomp.sdc.asdctool.migration.core.task.PostMigration;
7 import org.openecomp.sdc.asdctool.migration.core.task.PostMigration;
8 import java.util.ArrayList;
9 import java.util.Comparator;
10 import java.util.List;
11 import java.util.stream.Collectors;
12
13 import org.openecomp.sdc.asdctool.migration.core.DBVersion;
14 import org.openecomp.sdc.asdctool.migration.core.task.IMigrationStage;
15 import org.openecomp.sdc.asdctool.migration.core.task.Migration;
16 import org.openecomp.sdc.asdctool.migration.core.task.PostMigration;
17 import org.openecomp.sdc.asdctool.migration.service.SdcRepoService;
18
19 public class SpringBeansMigrationResolver implements MigrationResolver {
20
21     private List<Migration> migrations = new ArrayList<>();
22     private List<PostMigration> postMigrations = new ArrayList<>();
23     
24     private SdcRepoService sdcRepoService;
25
26     public SpringBeansMigrationResolver(List<Migration> migrations, List<PostMigration> postMigrations, SdcRepoService sdcRepoService) {
27         this.migrations = migrations;
28         this.postMigrations = postMigrations;
29         this.sdcRepoService = sdcRepoService;
30     }
31
32     @Override
33     public List<IMigrationStage> resolveMigrations() {
34         migrations.sort(Comparator.comparing(Migration::getVersion));
35         List<IMigrationStage> allTasks = resolveNonExecutedMigrations();
36         allTasks.addAll(postMigrations);
37         return allTasks;
38     }
39
40     //package private for testing
41     void setMigrations(List<Migration> migrations) {
42         this.migrations = migrations;
43     }
44     
45     //package private for testing
46     void setPostMigrations(List<PostMigration> postMigrations) {
47         this.postMigrations = postMigrations;
48     }
49
50     private List<IMigrationStage> resolveNonExecutedMigrations() {
51         DBVersion latestDBVersion = sdcRepoService.getLatestDBVersion();
52         return migrations.stream()
53                 .filter(mig -> isMigrationVersionGreaterThanLatestVersion(latestDBVersion, mig))
54                 .collect(Collectors.toList());
55     }
56
57     private boolean isMigrationVersionGreaterThanLatestVersion(DBVersion latestDBVersion, Migration mig) {
58         return mig.getVersion().compareTo(latestDBVersion) > 0;
59     }
60 }