package io.cattle.platform.process.common.spring; import io.cattle.platform.engine.process.impl.ResourceStatesDefinition; import io.cattle.platform.process.common.generic.GenericResourceProcessDefinition; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; public class GenericProcessFactory { String name; String start; String transitioning; String done; String stateField; public GenericResourceProcessDefinition getObject() throws Exception { GenericResourceProcessDefinition definition = new GenericResourceProcessDefinition(); definition.setName(name); ResourceStatesDefinition statesDef = new ResourceStatesDefinition(); if (stateField != null) { statesDef.setStateField(stateField); } statesDef.setStartStates(getSet(start)); statesDef.setTransitioningStatesMap(getMap(transitioning)); statesDef.setDoneStatesMap(getMap(done)); definition.setStatesDefinition(statesDef); return definition; } protected Set<String> getSet(String value) { if (StringUtils.isBlank(value)) { return Collections.emptySet(); } return new LinkedHashSet<String>(Arrays.asList(value.trim().split("\\s*,\\s*"))); } protected Map<String, String> getMap(String values) { if (StringUtils.isBlank(values)) { return Collections.emptyMap(); } Map<String, String> result = new LinkedHashMap<String, String>(); if (values.indexOf("=") == -1 && values.indexOf(",") == -1) { result.put(null, values.trim()); } else { for (String value : values.trim().split("\\s*,\\s*")) { if (value.indexOf('=') == -1) { throw new IllegalArgumentException("Setting must be a single state or a list of states in the form from1=to1,from2=to2"); } else { String[] parts = value.split("="); result.put(parts[0], parts[1]); } } } return result; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getStart() { return start; } public void setStart(String start) { this.start = start; } public String getTransitioning() { return transitioning; } public void setTransitioning(String transitioning) { this.transitioning = transitioning; } public String getDone() { return done; } public void setDone(String done) { this.done = done; } public String getStateField() { return stateField; } public void setStateField(String stateField) { this.stateField = stateField; } }