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