comparison 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
comparison
equal deleted inserted replaced
1570:eeee85c4d996 1571:1227878665b5
1 package de.intevation.flys.client.server;
2
3 import javax.xml.xpath.XPathConstants;
4
5 import org.w3c.dom.Element;
6 import org.w3c.dom.NodeList;
7
8 import org.apache.log4j.Logger;
9
10 import de.intevation.artifacts.common.ArtifactNamespaceContext;
11 import de.intevation.artifacts.common.utils.XMLUtils;
12
13 import de.intevation.flys.client.shared.model.Data;
14 import de.intevation.flys.client.shared.model.DataItem;
15 import de.intevation.flys.client.shared.model.DefaultData;
16 import de.intevation.flys.client.shared.model.DefaultDataItem;
17
18
19 /**
20 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
21 */
22 public class DataFactory {
23
24 private static final Logger logger = Logger.getLogger(DataFactory.class);
25
26
27 public static final String NS_URI = ArtifactNamespaceContext.NAMESPACE_URI;
28
29
30 /**
31 * Creates a new Data instance based on the <i>art:type</i> attribute of
32 * <i>element</i>.
33 *
34 * @param element The Data element.
35 *
36 * @return a Data instance.
37 */
38 public static Data createDataFromElement(Element element) {
39 String name = element.getAttributeNS(NS_URI, "name");
40 String type = element.getAttributeNS(NS_URI, "type");
41
42 logger.debug("Create new Data instance for: " + name + " | " + type);
43
44 if (type == null || type.length() == 0) {
45 return createDefaultData(element, name);
46 }
47 else {
48 return createDefaultData(element, name);
49 }
50 }
51
52
53 /**
54 * This method creates a new instance of DefaultData which has no real type
55 * set.
56 *
57 * @param ele The Data element.
58 * @param name The name of the Data instance.
59 *
60 * @return an instance of DefaultData.
61 */
62 protected static Data createDefaultData(Element ele, String name) {
63 logger.debug("Create new DefaultData");
64 return new DefaultData(name, name, "default", extractDataItems(ele));
65 }
66
67
68 /**
69 * This method extracts the art:item elements placed under <i>elements</i>.
70 *
71 * @param element A data node that contains items.
72 *
73 * @return a list of DataItems.
74 */
75 protected static DataItem[] extractDataItems(Element element) {
76 NodeList itemList = (NodeList) XMLUtils.xpath(
77 element,
78 "art:item",
79 XPathConstants.NODESET,
80 ArtifactNamespaceContext.INSTANCE);
81
82 if (itemList == null || itemList.getLength() == 0) {
83 logger.debug("No old data items found.");
84 return null;
85 }
86
87 int count = itemList.getLength();
88
89 DataItem[] items = new DataItem[count];
90
91 for (int i = 0; i < count; i++) {
92 Element tmp = (Element) itemList.item(i);
93
94 String value = tmp.getAttributeNS(NS_URI, "value");
95 String label = tmp.getAttributeNS(NS_URI, "label");
96
97 items[i] = new DefaultDataItem(label, label, value);
98 }
99
100 return items;
101 }
102 }
103 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org