ingo@1571: package de.intevation.flys.client.server; ingo@1571: ingo@1571: import javax.xml.xpath.XPathConstants; ingo@1571: ingo@1571: import org.w3c.dom.Element; ingo@1571: import org.w3c.dom.NodeList; ingo@1571: ingo@1571: import org.apache.log4j.Logger; ingo@1571: ingo@1571: import de.intevation.artifacts.common.ArtifactNamespaceContext; ingo@1571: import de.intevation.artifacts.common.utils.XMLUtils; ingo@1571: ingo@1571: import de.intevation.flys.client.shared.model.Data; ingo@1571: import de.intevation.flys.client.shared.model.DataItem; ingo@1571: import de.intevation.flys.client.shared.model.DefaultData; ingo@1571: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@1571: ingo@1571: ingo@1571: /** ingo@1571: * @author Ingo Weinzierl ingo@1571: */ ingo@1571: public class DataFactory { ingo@1571: ingo@1571: private static final Logger logger = Logger.getLogger(DataFactory.class); ingo@1571: ingo@1571: ingo@1571: public static final String NS_URI = ArtifactNamespaceContext.NAMESPACE_URI; ingo@1571: ingo@1571: ingo@1571: /** ingo@1571: * Creates a new Data instance based on the art:type attribute of ingo@1571: * element. ingo@1571: * ingo@1571: * @param element The Data element. ingo@1571: * ingo@1571: * @return a Data instance. ingo@1571: */ ingo@1571: public static Data createDataFromElement(Element element) { ingo@1571: String name = element.getAttributeNS(NS_URI, "name"); ingo@1571: String type = element.getAttributeNS(NS_URI, "type"); ingo@1571: ingo@1571: logger.debug("Create new Data instance for: " + name + " | " + type); ingo@1571: ingo@1571: if (type == null || type.length() == 0) { ingo@1571: return createDefaultData(element, name); ingo@1571: } ingo@1571: else { ingo@1571: return createDefaultData(element, name); ingo@1571: } ingo@1571: } ingo@1571: ingo@1571: ingo@1571: /** ingo@1571: * This method creates a new instance of DefaultData which has no real type ingo@1571: * set. ingo@1571: * ingo@1571: * @param ele The Data element. ingo@1571: * @param name The name of the Data instance. ingo@1571: * ingo@1571: * @return an instance of DefaultData. ingo@1571: */ ingo@1571: protected static Data createDefaultData(Element ele, String name) { ingo@1571: logger.debug("Create new DefaultData"); ingo@1571: return new DefaultData(name, name, "default", extractDataItems(ele)); ingo@1571: } ingo@1571: ingo@1571: ingo@1571: /** ingo@1571: * This method extracts the art:item elements placed under elements. ingo@1571: * ingo@1571: * @param element A data node that contains items. ingo@1571: * ingo@1571: * @return a list of DataItems. ingo@1571: */ ingo@1571: protected static DataItem[] extractDataItems(Element element) { ingo@1571: NodeList itemList = (NodeList) XMLUtils.xpath( ingo@1571: element, ingo@1571: "art:item", ingo@1571: XPathConstants.NODESET, ingo@1571: ArtifactNamespaceContext.INSTANCE); ingo@1571: ingo@1571: if (itemList == null || itemList.getLength() == 0) { ingo@1571: logger.debug("No old data items found."); ingo@1571: return null; ingo@1571: } ingo@1571: ingo@1571: int count = itemList.getLength(); ingo@1571: ingo@1571: DataItem[] items = new DataItem[count]; ingo@1571: ingo@1571: for (int i = 0; i < count; i++) { ingo@1571: Element tmp = (Element) itemList.item(i); ingo@1571: ingo@1571: String value = tmp.getAttributeNS(NS_URI, "value"); ingo@1571: String label = tmp.getAttributeNS(NS_URI, "label"); ingo@1571: ingo@1571: items[i] = new DefaultDataItem(label, label, value); ingo@1571: } ingo@1571: ingo@1571: return items; ingo@1571: } ingo@1571: } ingo@1571: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :