[SDC-29] rebase continue work to align source
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / impl / migration / v1707 / jsonmodel / InvariantUUIDResolver.java
1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
2
3 import org.openecomp.sdc.be.model.Component;
4 import org.openecomp.sdc.be.model.operations.migration.MigrationMalformedDataLogger;
5
6 import java.util.Collection;
7 import java.util.List;
8 import java.util.Optional;
9
10 public class InvariantUUIDResolver <T extends Component> {
11
12     public String resolveInvariantUUID(List<T> components, T missingInvariantCmpt) {
13         String uuid = missingInvariantCmpt.getUUID();
14         String systemName = missingInvariantCmpt.getSystemName();
15         String invariantUid = findInvariantUUidByAllVersionsMap(missingInvariantCmpt, components).orElseGet(() -> findInvariantUUidByUUIDOrSystemName(components, uuid, systemName));
16         if (invariantUid == null) {
17             MigrationMalformedDataLogger.logMalformedDataMsg(String.format("could not find invariant uuid for component %s with id %s", missingInvariantCmpt.getName(), missingInvariantCmpt.getUniqueId()));
18         }
19         return invariantUid;
20     }
21
22     private String findInvariantUUidByUUIDOrSystemName(List<T> components, String uuid, String systemName) {
23         return components.stream()
24                 .filter(c -> c.getUUID().equals(uuid) || c.getSystemName().equals(systemName))
25                 .map(Component::getInvariantUUID)
26                 .filter(c -> c != null)
27                 .findAny().orElse(null);
28     }
29
30     private Optional<String> findInvariantUUidByAllVersionsMap(T component, List<T> allComponents) {
31         if (component.getAllVersions() == null) return Optional.empty();
32         Collection<String> allVersionsComponentIds = component.getAllVersions().values();
33         return allComponents.stream().filter(c -> allVersionsComponentIds.contains(c.getUniqueId()))
34                 .map(Component::getInvariantUUID)
35                 .filter(c -> c != null)
36                 .findAny();
37
38
39     }
40
41 }