InstallPlanAssembler.java
/*
assembler pattern to adapt AnalysisReport to InstallPlan.
*/
package org.entando.kubernetes.client.model.assembler;
import java.util.AbstractMap;
import java.util.AbstractMap.SimpleEntry;
import java.util.Map;
import java.util.stream.Collectors;
import org.entando.kubernetes.client.model.AnalysisReport;
import org.entando.kubernetes.controller.digitalexchange.job.model.ComponentInstallPlan;
import org.entando.kubernetes.controller.digitalexchange.job.model.InstallPlan;
import org.entando.kubernetes.controller.digitalexchange.job.model.Status;
public class InstallPlanAssembler {
private InstallPlanAssembler() {
}
public static InstallPlan toInstallPlan(AnalysisReport analysisReport) {
if (null == analysisReport) {
return new InstallPlan();
}
return InstallPlan.builder()
.hasConflicts(analysisReportHasConflicts(analysisReport))
.widgets(toComponentInstallPlan(analysisReport.getWidgets()))
.fragments(toComponentInstallPlan(analysisReport.getFragments()))
.pages(toComponentInstallPlan(analysisReport.getPages()))
.pageTemplates(toComponentInstallPlan(analysisReport.getPageTemplates()))
.contents(toComponentInstallPlan(analysisReport.getContents()))
.contentTemplates(toComponentInstallPlan(analysisReport.getContentTemplates()))
.contentTypes(toComponentInstallPlan(analysisReport.getContentTypes()))
.assets(toComponentInstallPlan(analysisReport.getAssets()))
.directories(toComponentInstallPlan(analysisReport.getDirectories()))
.resources(toComponentInstallPlan(analysisReport.getResources()))
.plugins(toComponentInstallPlan(analysisReport.getPlugins()))
.categories(toComponentInstallPlan(analysisReport.getCategories()))
.groups(toComponentInstallPlan(analysisReport.getGroups()))
.labels(toComponentInstallPlan(analysisReport.getLabels()))
.languages(toComponentInstallPlan(analysisReport.getLanguages()))
.build();
}
private static Map<String, ComponentInstallPlan> toComponentInstallPlan(
Map<String, Status> components) {
return components.entrySet().stream()
.map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(),
ComponentInstallPlan.builder().status(entry.getValue()).build()))
.collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));
}
private static boolean analysisReportHasConflicts(AnalysisReport analysisReport) {
return componentsHaveConflicts(analysisReport.getWidgets())
|| componentsHaveConflicts(analysisReport.getFragments())
|| componentsHaveConflicts(analysisReport.getPages())
|| componentsHaveConflicts(analysisReport.getPageTemplates())
|| componentsHaveConflicts(analysisReport.getContents())
|| componentsHaveConflicts(analysisReport.getContentTemplates())
|| componentsHaveConflicts(analysisReport.getContentTypes())
|| componentsHaveConflicts(analysisReport.getAssets())
|| componentsHaveConflicts(analysisReport.getDirectories())
|| componentsHaveConflicts(analysisReport.getResources())
|| componentsHaveConflicts(analysisReport.getPlugins())
|| componentsHaveConflicts(analysisReport.getCategories())
|| componentsHaveConflicts(analysisReport.getGroups())
|| componentsHaveConflicts(analysisReport.getLabels())
|| componentsHaveConflicts(analysisReport.getLanguages());
}
private static boolean componentsHaveConflicts(Map<String, Status> components) {
return components.values().stream()
.anyMatch(status -> status == Status.DIFF);
}
}