Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/server/DataFactory.java @ 1571:1227878665b5
Introduced a DataFactory that should be used to create new Data instances.
flys-client/trunk@3836 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 31 Jan 2012 10:34:54 +0000 |
parents | |
children | 0f2b94408bd1 |
line wrap: on
line source
package de.intevation.flys.client.server; import javax.xml.xpath.XPathConstants; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.apache.log4j.Logger; import de.intevation.artifacts.common.ArtifactNamespaceContext; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class DataFactory { private static final Logger logger = Logger.getLogger(DataFactory.class); public static final String NS_URI = ArtifactNamespaceContext.NAMESPACE_URI; /** * Creates a new Data instance based on the <i>art:type</i> attribute of * <i>element</i>. * * @param element The Data element. * * @return a Data instance. */ public static Data createDataFromElement(Element element) { String name = element.getAttributeNS(NS_URI, "name"); String type = element.getAttributeNS(NS_URI, "type"); logger.debug("Create new Data instance for: " + name + " | " + type); if (type == null || type.length() == 0) { return createDefaultData(element, name); } else { return createDefaultData(element, name); } } /** * This method creates a new instance of DefaultData which has no real type * set. * * @param ele The Data element. * @param name The name of the Data instance. * * @return an instance of DefaultData. */ protected static Data createDefaultData(Element ele, String name) { logger.debug("Create new DefaultData"); return new DefaultData(name, name, "default", extractDataItems(ele)); } /** * This method extracts the art:item elements placed under <i>elements</i>. * * @param element A data node that contains items. * * @return a list of DataItems. */ protected static DataItem[] extractDataItems(Element element) { NodeList itemList = (NodeList) XMLUtils.xpath( element, "art:item", XPathConstants.NODESET, ArtifactNamespaceContext.INSTANCE); if (itemList == null || itemList.getLength() == 0) { logger.debug("No old data items found."); return null; } int count = itemList.getLength(); DataItem[] items = new DataItem[count]; for (int i = 0; i < count; i++) { Element tmp = (Element) itemList.item(i); String value = tmp.getAttributeNS(NS_URI, "value"); String label = tmp.getAttributeNS(NS_URI, "label"); items[i] = new DefaultDataItem(label, label, value); } return items; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :