Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java @ 51:a2923d63f530
Introduced a data structure DataList to manage to list of Data objects of a single state.
flys-client/trunk@1505 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 17 Mar 2011 16:44:51 +0000 |
parents | b6b89ff1adee |
children | 1d0be51ab93b |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java Thu Mar 17 11:49:03 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java Thu Mar 17 16:44:51 2011 +0000 @@ -14,11 +14,11 @@ import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.flys.client.shared.model.ArtifactDescription; -import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; +import de.intevation.flys.client.shared.model.DataList; +import de.intevation.flys.client.shared.model.DefaultArtifactDescription; import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; -import de.intevation.flys.client.shared.model.DefaultArtifactDescription; /** @@ -37,6 +37,8 @@ public static final String XPATH_REACHABLE_STATE = "art:state"; + public static final String XPATH_STATIC_STATE_NODE = "art:state"; + public static final String XPATH_STATIC_DATA_NODE = "art:data"; public static final String XPATH_STATIC_ITEM_NODE = "art:item"; @@ -64,8 +66,8 @@ ArtifactNamespaceContext.INSTANCE); System.out.println("Current state name: " + state); - Data currentData = extractCurrentData(dynamicNode); - Data[] old = extractOldData(staticNode); + DataList currentData = extractCurrentData(dynamicNode, state); + DataList[] old = extractOldData(staticNode); String[] states = extractReachableStates(reachable); return new DefaultArtifactDescription(old, currentData, state, states); @@ -77,24 +79,39 @@ * current state of the artifact. * * @param dynamicNode The dynamic node of the DESCRIBE document. + * @param state The name of the current state. * * @return A {@link Data} object that represents the data which might be * entered by the user in the current state or null, if no data might be * entered. */ - protected static Data extractCurrentData(Node dynamicNode) { + protected static DataList extractCurrentData(Node dynamicNode, String state) { System.out.println("ArtifactDescriptionFactory - extractCurrentData()"); - Node data = ClientProtocolUtils.getSelectNode(dynamicNode); - NodeList choices = ClientProtocolUtils.getItemNodes(data); - String label = ClientProtocolUtils.getLabel(data); - String name = XMLUtils.xpathString( - data, "@art:name", ArtifactNamespaceContext.INSTANCE); + NodeList data = ClientProtocolUtils.getSelectNode(dynamicNode); + String uiProvider = extractUIProvider(dynamicNode); - DataItem[] dataItems = extractCurrentDataItems(choices); - String uiProvider = extractUIProvider(data); + if (data == null || data.getLength() == 0) { + return null; + } - return new DefaultData(name, label, null, dataItems, uiProvider); + int dataNum = data.getLength(); + DataList list = new DataList(state, dataNum, uiProvider); + + for (int i = 0; i < dataNum; i++) { + Node d = data.item(i); + + NodeList choices = ClientProtocolUtils.getItemNodes(d); + String label = ClientProtocolUtils.getLabel(d); + String name = XMLUtils.xpathString( + d, "@art:name", ArtifactNamespaceContext.INSTANCE); + + DataItem[] dataItems = extractCurrentDataItems(choices); + + list.add(new DefaultData(name, label, null, dataItems)); + } + + return list; } @@ -136,37 +153,58 @@ * * @param staticNode The static ui node of the DESCRIBE. * - * @return the Data objects. + * @return the DataList objects. */ - protected static Data[] extractOldData(Node staticNode) { + protected static DataList[] extractOldData(Node staticNode) { System.out.println("ArtifactDescriptionFactory - extractOldData()"); - NodeList dataNodes = (NodeList) XMLUtils.xpath( + NodeList stateNodes = (NodeList) XMLUtils.xpath( staticNode, - XPATH_STATIC_DATA_NODE, + XPATH_STATIC_STATE_NODE, XPathConstants.NODESET, ArtifactNamespaceContext.INSTANCE); - if (dataNodes == null || dataNodes.getLength() == 0) { + if (stateNodes == null || stateNodes.getLength() == 0) { System.out.println("No old items found."); return null; } - int count = dataNodes.getLength(); - - Data[] data = new Data[count]; + int count = stateNodes.getLength(); + DataList[] data = new DataList[count]; for (int i = 0; i < count; i++) { - Node tmp = dataNodes.item(i); + Node tmp = stateNodes.item(i); String name = XMLUtils.xpathString( tmp, "@art:name", ArtifactNamespaceContext.INSTANCE); - String type = XMLUtils.xpathString( - tmp, "@art:type", ArtifactNamespaceContext.INSTANCE); - DataItem[] items = extractOldDataItems(tmp); + NodeList dataNodes = (NodeList) XMLUtils.xpath( + tmp, + XPATH_STATIC_DATA_NODE, + XPathConstants.NODESET, + ArtifactNamespaceContext.INSTANCE); - data[i] = new DefaultData(name, name, type, items, null); + if (dataNodes == null || dataNodes.getLength() == 0) { + continue; + } + + int size = dataNodes.getLength(); + DataList list = new DataList(name, size); + + for (int j = 0; j < size; j++) { + Node dataNode = dataNodes.item(j); + + String dName = XMLUtils.xpathString( + dataNode, "@art:name", ArtifactNamespaceContext.INSTANCE); + String dType = XMLUtils.xpathString( + dataNode, "@art:type", ArtifactNamespaceContext.INSTANCE); + + DataItem[] items = extractOldDataItems(dataNode); + + list.add(new DefaultData(dName, dName, dType, items)); + + data[i] = list; + } } return data; @@ -218,9 +256,9 @@ * * @return the UIProvider that is specified in the data node. */ - protected static String extractUIProvider(Node data) { + protected static String extractUIProvider(Node ui) { return (String) XMLUtils.xpath( - data, + ui, XPATH_UIPROVIDER, XPathConstants.STRING, ArtifactNamespaceContext.INSTANCE);