Mercurial > dive4elements > framework
view artifact-database/src/main/java/de/intevation/artifactdatabase/state/AbstractState.java @ 114:19b86e27d0c3
New XPath constants and methods that retrieve important nodes of the DESCRIBE document.
artifacts/trunk@1328 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 18 Feb 2011 14:21:32 +0000 |
parents | ece0fdb07975 |
children | 2a9591f76270 |
line wrap: on
line source
/* * Copyright (c) 2011 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details * or visit http://www.gnu.org/licenses/ if it does not exist. */ package de.intevation.artifactdatabase.state; import java.util.HashMap; import java.util.Map; import javax.xml.xpath.XPathConstants; import org.w3c.dom.Document; import org.w3c.dom.Node; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifactdatabase.data.StateData; /** * An abstract implementation of a {@link State}. It implements some basic * methods that return the id, description and data. The methods * <code>describe()</code> and <code>setup()</code> depend on the concrete class * and need to be implemented by those. */ public abstract class AbstractState implements State { /** The XPath to the ID of the state relative to the state node in the * configuration. */ public static final String XPATH_ID = "@id"; /** The XPath to the description of the state relative to the state node in * the configuration. */ public static final String XPATH_DESCRIPTION = "@description"; /** The ID of the state. */ protected String id; /** The description of the state. */ protected String description; /** The data provided by this state. */ protected Map<String, StateData> data; /** * The default constructor. * * @param id The ID of the state. * @param description The description of the state. */ public AbstractState(String id, String description) { this.id = id; this.description = description; } /** * Returns the ID of the state. * * @return the ID of the state. */ public String getID() { return id; } /** * Set the ID of the state. * * @param id The ID of the state. */ public void setID(String id) { this.id = id; } /** * Returns the description of the state. * * @return the description of the state. */ public String getDescription() { return description; } /** * Set the description of the state. * * @param description The description of the state. */ public void setDescription(String description) { this.description = description; } /** * Returns the data of the state. * * @return the data of the state. */ public Map<String, StateData> getData() { return data; } /** * Add new data to the state. NOTE: If there is already an object existing * with the key <i>name</i>, this object is overwritten by the new value. * * @param name The name of the data object. * @param StateData The data object. */ public void addData(String name, StateData data) { if (this.data == null) { this.data = new HashMap<String, StateData>(); } this.data.put(name, data); } /** * Initialize the state based on the state node in the configuration. * * @param config The state configuration node. */ public void setup(Node config) { id = (String) XMLUtils.xpath(config, XPATH_ID, XPathConstants.STRING); description = (String) XMLUtils.xpath( config, XPATH_DESCRIPTION, XPathConstants.STRING); } /** * Describes the UI of the state. This method needs to be implemented by * concrete subclasses. * * @param document Describe doucment. * @param rootNode Parent node for all new elements. * @param context The CallContext. * @param uuid The uuid of an artifact. */ public abstract void describe( Document document, Node rootNode, CallContext context, String uuid ); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :