/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.config.xml.util; import java.util.Map; /** * The {@link NodeValue} class contains the node name and its according value for an XML tag. * <p> * This class can be used for an intermediate conversion result of a single value for an XML tag. The conversion can be * done by using the according {@link NodeValueConverter}. * <p> * <b>Hint:</b> This class is immutable. * * @author Michael Grammling - Initial Contribution */ public class NodeValue implements NodeName { private String nodeName; private Map<String, String> attributes; private Object value; /** * Creates a new instance of this class with the specified parameters. * * @param nodeName the name of the node this object belongs to (must neither be null, nor empty) * @param attributes the attributes of the node this object belongs to (could be null or empty) * @param value the value of the node this object belongs to (could be null or empty) * * @throws IllegalArgumentException if the name of the node is null or empty */ public NodeValue(String nodeName, Map<String, String> attributes, Object value) throws IllegalArgumentException { if ((nodeName == null) || (nodeName.isEmpty())) { throw new IllegalArgumentException("The name of the node must neither be null nor empty!"); } this.nodeName = nodeName; this.attributes = attributes; this.value = formatText(value); } private Object formatText(Object object) { // fixes a formatting problem with line breaks in text if (object instanceof String) { return ((String) object).replaceAll("\\n\\s*", " ").trim(); } return object; } @Override public String getNodeName() { return this.nodeName; } /** * Returns the attributes of the node. * * @return the attributes of the node (could be null or empty) */ public Map<String, String> getAttributes() { return this.attributes; } /** * Returns the value of the node. * * @return the value of the node (could be null or empty) */ public Object getValue() { return this.value; } @Override public String toString() { return "NodeValue [nodeName=" + nodeName + ", value=" + value + "]"; } }