/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.cpacs.vampzeroinitializer.gui; import java.util.List; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import de.rcenvironment.components.cpacs.vampzeroinitializer.gui.model.Component; import de.rcenvironment.components.cpacs.vampzeroinitializer.gui.model.Discipline; import de.rcenvironment.components.cpacs.vampzeroinitializer.gui.model.Parameter; import de.rcenvironment.core.utils.common.xml.XMLException; import de.rcenvironment.core.utils.common.xml.api.XMLSupportService; import de.rcenvironment.core.utils.incubator.ServiceRegistry; /** * Write the XML that describes the toolspecific VampZero input. * * @author Arne Bachmann * @author Markus Kunde * @author Brigitte Boden */ public final class ToolspecificOutputWriter { private static final String NAME = "name"; private XMLSupportService xmlSupport; /** * Constructor. * */ public ToolspecificOutputWriter() { xmlSupport = ServiceRegistry.createAccessFor(this).getService(XMLSupportService.class); } String createOutput(final List<Component> components) { try { final Document doc = xmlSupport.createDocument(); final Node componentsNode = xmlSupport.createElementTree(doc, "/cpacs/toolspecific/vampZero/components"); for (final Component component : components) { final Node disciplinesNode = createNodes(doc, componentsNode, "component", "disciplines"); createNodeAndValue(doc, disciplinesNode.getParentNode(), NAME, component.getName(), true); for (final Discipline discipline : component.getDisciplines()) { final Node parametersNode = createNodes(doc, disciplinesNode, "discipline", "parameters"); createNodeAndValue(doc, parametersNode.getParentNode(), NAME, discipline.getName(), true); for (final Parameter parameter : discipline.getParameters()) { final Node parameterNode = createNodes(doc, parametersNode, "parameter"); createNodeAndValue(doc, parameterNode, NAME, parameter.getName()); createNodeAndValue(doc, parameterNode, "description", parameter.getDescription()); createNodeAndValue(doc, parameterNode, "value", parameter.getValue()); createNodeAndValue(doc, parameterNode, "factor", parameter.getFactor()); } } } return xmlSupport.writeXMLToString(doc); } catch (XMLException e) { LogFactory.getLog(ToolspecificOutputWriter.class).error("Error while creating output: " + e.toString()); return null; } } private Node createNodes(final Document doc, final Node parent, final String... names) { Node node = null; Node father = parent; for (final String name : names) { node = doc.createElement(name); doc.importNode(node, false); father.appendChild(node); father = node; } return node; } private void createNodeAndValue(final Document doc, final Node parent, final String name, final String value, final boolean... insertBefore) { final Node node = doc.createElement(name); doc.importNode(node, false); if ((insertBefore.length) > 0 && insertBefore[0]) { parent.insertBefore(node, parent.getFirstChild()); } else { parent.appendChild(node); } node.setTextContent(value); } }