Mercurial > dive4elements > river
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/DataFactory.java Tue Jan 31 10:34:54 2012 +0000 @@ -0,0 +1,103 @@ +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 :