diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/handlers/v3/Schemas.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/handlers/v3/Schemas.java index 29a5f65e..bcfb59fd 100644 --- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/handlers/v3/Schemas.java +++ b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/handlers/v3/Schemas.java @@ -12,6 +12,7 @@ public class Schemas extends org.cloudfoundry.multiapps.mta.handlers.v2.Schemas public static final MapElement PROVIDED_DEPENDENCY = new MapElement(); public static final MapElement RESOURCE = new MapElement(); public static final MapElement HOOK = new MapElement(); + public static final MapElement HOOK_PHASE_CONFIG = new MapElement(); public static final MapElement MTAEXT = new MapElement(); public static final MapElement EXT_MODULE = new MapElement(); @@ -47,6 +48,10 @@ public class Schemas extends org.cloudfoundry.multiapps.mta.handlers.v2.Schemas HOOK.add("phases", new ListElement(STRING_REQUIRED)); HOOK.add("parameters", PROPERTIES); HOOK.add("requires", new ListElement(REQUIRED_DEPENDENCY)); + HOOK.add("phase-configs", new ListElement(HOOK_PHASE_CONFIG)); + + HOOK_PHASE_CONFIG.add("phase", STRING_REQUIRED); + HOOK_PHASE_CONFIG.add("target-app", STRING_REQUIRED); REQUIRED_DEPENDENCY.add("name", UNIQUE_MTA_IDENTIFIER); REQUIRED_DEPENDENCY.add("list", STRING); diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Hook.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Hook.java index 75076d48..cb413201 100644 --- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Hook.java +++ b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/model/Hook.java @@ -6,6 +6,7 @@ import java.util.TreeMap; import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonInclude; import org.apache.commons.lang3.ObjectUtils; import org.cloudfoundry.multiapps.common.util.yaml.YamlElement; import org.cloudfoundry.multiapps.mta.parsers.v3.HookParser; @@ -28,6 +29,7 @@ public static Hook copyOf(Hook original) { copy.phases = original.phases; copy.parameters = new TreeMap<>(original.parameters); copy.requiredDependencies = copyRequiredDependencies(original.requiredDependencies); + copy.phaseConfigs = original.phaseConfigs; return copy; } @@ -47,6 +49,9 @@ private static List copyRequiredDependencies(List parameters = Collections.emptyMap(); @YamlElement(HookParser.REQUIRES) private List requiredDependencies = Collections.emptyList(); + @JsonInclude(JsonInclude.Include.NON_EMPTY) + @YamlElement(HookParser.PHASE_CONFIGS) + private List> phaseConfigs = Collections.emptyList(); public static Hook createV3() { return new Hook(3); @@ -98,6 +103,15 @@ public Hook setRequiredDependencies(List requiredDependencie return this; } + public List> getPhaseConfigs() { + return phaseConfigs; + } + + public Hook setPhaseConfigs(List> phaseConfigs) { + this.phaseConfigs = ObjectUtils.defaultIfNull(phaseConfigs, this.phaseConfigs); + return this; + } + @Override public void accept(ElementContext context, Visitor visitor) { visitor.visit(context, this); diff --git a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/v3/HookParser.java b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/v3/HookParser.java index ce2c2870..65b10605 100644 --- a/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/v3/HookParser.java +++ b/multiapps-mta/src/main/java/org/cloudfoundry/multiapps/mta/parsers/v3/HookParser.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Set; - import org.cloudfoundry.multiapps.common.ParsingException; import org.cloudfoundry.multiapps.mta.model.Hook; import org.cloudfoundry.multiapps.mta.model.RequiredDependency; @@ -23,6 +22,7 @@ public class HookParser extends ModelParser { public static final String PHASES = "phases"; public static final String PARAMETERS = "parameters"; public static final String REQUIRES = "requires"; + public static final String PHASE_CONFIGS = "phase-configs"; protected final Set usedRequiredDependencyNames = new HashSet<>(); @@ -41,7 +41,8 @@ public Hook parse() throws ParsingException { .setParameters(getParameters()) .setPhases(getPhases()) .setRequiredDependencies(getRequiredDependencies()) - .setType(getType()); + .setType(getType()) + .setPhaseConfigs(getPhaseConfigs()); } private String getType() { @@ -74,4 +75,9 @@ private String getName() { return getStringElement(NAME); } + @SuppressWarnings("unchecked") + private List> getPhaseConfigs() { + return (List>) source.get(PHASE_CONFIGS); + } + }