diff options
Diffstat (limited to 'dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java')
-rw-r--r-- | dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java | 63 |
1 files changed, 58 insertions, 5 deletions
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java index 224fc24..522b866 100644 --- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java @@ -18,6 +18,8 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import static org.springframework.util.CollectionUtils.isEmpty; @@ -52,25 +54,31 @@ public class ReferenceBusinessLogic extends BaseBusinessLogic { debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Finished to delete vfcmt reference. serviceUuid {}, vfcmtUuid {}", serviceUuid, vfcmtUuid); } + // 1810 US436244 MC table functionality + public void deleteVfcmtReference(String userId, String context, String serviceUuid, String vfiName, String vfcmtUuid, String revertedUuid, String requestId) { + deleteVfcmtReference(userId, context, serviceUuid, vfiName, vfcmtUuid, requestId); + deleteVfcmtReference(userId, context, serviceUuid, vfiName, revertedUuid.concat(REVERTED_REF), requestId); + } + // 1806 US381853 Return a list of monitoring components by external reference id. Support partial success - public Map<String, List<MonitoringComponent>> fetchMonitoringComponents(ExternalReferencesMap mcRefs, String requestId) { + // 1810 US436244 Return a list of monitoring components by external reference id - group latest version (x.y) with submitted version (x.0) + public Map<String, Collection<MonitoringComponent>> fetchMonitoringComponents(ExternalReferencesMap mcRefs, String requestId) { debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Going to fetch monitoring components metadata for vfis {}", mcRefs.keySet()); - Map<String, List<MonitoringComponent>> result = new LinkedHashMap<>(); + Map<String, Collection<MonitoringComponent>> result = new LinkedHashMap<>(); List<MonitoringComponent> monitoringComponents = Collections.synchronizedList(new ArrayList<>()); List<MonitoringComponent> unavailable = Collections.synchronizedList(new ArrayList<>()); mcRefs.entrySet().parallelStream().forEach(entry -> entry.getValue().parallelStream().forEach(id -> { try{ - monitoringComponents.add(new MonitoringComponent(getSdcRestClient().getResource(id, requestId), entry.getKey())); + monitoringComponents.add(new MonitoringComponent(getSdcRestClient().getResource(id.replace(REVERTED_REF, ""), requestId), entry.getKey())); } catch (Exception e) { debugLogger.log(LogLevel.DEBUG, this.getClass().getName(),"Failed to fetch monitoring component with uuid {}. message: {} ", id, e); unavailable.add(new MonitoringComponent(id, entry.getKey(), "unavailable")); } - }) ); - result.put("monitoringComponents", monitoringComponents); + result.put("monitoringComponents", groupMonitoringComponentsForRepresentation(mcRefs.values().stream().flatMap(List::stream).collect(Collectors.toList()), monitoringComponents)); if(!isEmpty(unavailable)) { result.put("unavailable", unavailable); } @@ -100,4 +108,49 @@ public class ReferenceBusinessLogic extends BaseBusinessLogic { } } + public ResponseEntity checkoutAndUndoRevertMC(String userId, String contextType, String serviceUuid, String vfiName, String vfcmtUuid, String revertedUuid, String requestId) { + try { + cloneArtifactsToRevertedMC(userId, vfcmtUuid, revertedUuid, requestId, true); + ResourceDetailed vfcmt = sdcRestClient.getResource(revertedUuid, requestId); + undoRevert(userId, contextType, serviceUuid, vfiName, revertedUuid, requestId); + return new ResponseEntity<>(new VfcmtData(vfcmt), HttpStatus.OK); + } catch (Exception e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "clone action failed: {}", e); + return ErrConfMgr.INSTANCE.handleException(e, ErrConfMgr.ApiType.CLONE_VFCMT); + } + } + + public MonitoringComponent revertToSubmittedMC(String userId, String contextType, String serviceUuid, String vfiName, String vfcmtUuid, String submittedUuid, String requestId) { + //TODO validations + MonitoringComponent res = new MonitoringComponent(sdcRestClient.getResource(submittedUuid, requestId), vfiName); + // this should always be the case + if (!submittedUuid.equals(vfcmtUuid)) { + sdcRestClient.updateExternalMonitoringReference(userId, contextType, serviceUuid, vfiName, vfcmtUuid, new ReferenceUUID(vfcmtUuid.concat(REVERTED_REF)), requestId); + res.setUuid(submittedUuid.concat("/").concat(vfcmtUuid)); + } + return res; + } + + + private Collection<MonitoringComponent> groupMonitoringComponentsForRepresentation(List<String> mcRefs, List<MonitoringComponent> components) { + return components.stream().collect(Collectors.toMap(MonitoringComponent::getInvariantUUID, Function.identity(), + (mc1, mc2) -> mergeMcInfo(mc1, mc2, !mcRefs.contains(mc1.getUuid()) || !mcRefs.contains(mc2.getUuid())))).values(); + } + + private MonitoringComponent mergeMcInfo(MonitoringComponent mc1, MonitoringComponent mc2, boolean reverted) { + MonitoringComponent submittedVersion = mc1; + MonitoringComponent latestVersion = mc2; + if("Submitted".equals(mc2.getStatus())) { + submittedVersion = mc2; + latestVersion = mc1; + } + if(reverted) { + submittedVersion.setUuid(submittedVersion.getUuid().concat("/").concat(latestVersion.getUuid())); + return submittedVersion; + } + latestVersion.setSubmittedUuid(submittedVersion.getUuid()); + latestVersion.setStatus(submittedVersion.getStatus()); + return latestVersion; + } + } |