package hudson.plugins.promoted_builds.integrations.jobdsl; import groovy.util.Node; import java.util.Collection; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.converters.reflection.ReflectionConverter; import com.thoughtworks.xstream.converters.reflection.ReflectionProvider; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.mapper.Mapper; /** * XStream Converter for the ManualCondition for the Job DSL Plugin * * @author Dennis Schulte */ public class ManualConditionConverter extends ReflectionConverter { public ManualConditionConverter(Mapper mapper, ReflectionProvider reflectionProvider) { super(mapper, reflectionProvider); // TODO Auto-generated constructor stub } @Override public boolean canConvert(@SuppressWarnings("rawtypes") Class type) { return type.equals(JobDslManualCondition.class); } @Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { JobDslManualCondition mc = (JobDslManualCondition) source; if (mc.getUsers() != null) { writer.startNode("users"); writer.setValue(mc.getUsers()); writer.endNode(); } writer.startNode("parameterDefinitions"); Collection<Node> parameterDefinitionNodes = mc.getParameterDefinitionNodes(); if(parameterDefinitionNodes != null && !parameterDefinitionNodes.isEmpty()){ for (Node node : mc.getParameterDefinitionNodes()) { writer.startNode(node.name().toString()); if (node.value() instanceof Collection) { for (Object subNode : (Collection) node.value()) { convertNode((Node) subNode, writer); } } else { writer.setValue(node.value().toString()); } writer.endNode(); } } writer.endNode(); } private void convertNode(Node node, HierarchicalStreamWriter writer) { writer.startNode(node.name().toString()); if (node.value() instanceof Collection) { for (Object subNode : (Collection) node.value()) { convertNode((Node) subNode, writer); } } else { writer.setValue(node.value().toString()); } writer.endNode(); } }