Mercurial > dive4elements > river
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 : |