package io.cattle.platform.process.common.spring; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Element; public class DefaultProcessesParser extends ProcessParser { private static final List<String> PROPS = Arrays.asList(new String[] { "%s.create;requested;registering;inactive;%s.activate", "%s.activate;inactive,registering;activating;active", "%s.deactivate;requested,registering,active,activating,updating-active,updating-inactive;deactivating;inactive", "%s.remove;requested,inactive,registering,updating-active,updating-inactive;removing;removed", "%s.purge;removed;purging;purged", "%s.update;inactive,active;inactive=updating-inactive,active=updating-active;updating-inactive=inactive,updating-active=active", }); @Override public BeanDefinition parse(Element element, ParserContext parserContext) { String id = element.getAttribute("id"); String stateField = element.getAttribute("stateField"); String resourceType = element.getAttribute("resourceType"); String exclude = element.getAttribute("exclude"); Map<String, String> renames = getMap(element.getAttribute("renames"), new HashMap<String, String>()); Map<String, String> processRenames = getMap(element.getAttribute("processRenames"), new HashMap<String, String>()); Set<String> excludes = new HashSet<String>(); if (!StringUtils.isBlank(exclude)) { excludes.addAll(Arrays.asList(exclude.trim().split("\\s*,\\s*"))); } BeanDefinition last = null; for (String value : PROPS) { if (StringUtils.isBlank(value)) { break; } String[] parts = value.trim().split(";"); // if (parts.length != 4 && parts.length != 5) { // throw new IllegalStateException(PROP_PREFIX + i + " must be in the format name;start;transitioning;done;delegate(optional)"); // } String name = String.format(parts[0], resourceType).toLowerCase(); if (processRenames.containsKey(name)) { name = processRenames.get(name); } String start = parts[1]; String transitioning = parts[2]; String done = parts[3]; String delegate = null; if (parts.length > 4) { delegate = String.format(parts[4], resourceType).toLowerCase(); if (processRenames.containsKey(delegate)) { delegate = processRenames.get(delegate); } } if (!excludes.contains(name)) { last = parse(id, stateField, name, start, transitioning, done, resourceType, delegate, renames, parserContext); } } return last; } }