# HG changeset patch # User Ingo Weinzierl # Date 1300879158 0 # Node ID 8f719fa1a69177535f69cc1096099a97f5e72079 # Parent 3d646d3e8e27a8536ed6f2a6b3dc1139f7569e1e The output modes of an artifact are extracted from DESCRIBE document and put into the ArtifactDescription. flys-client/trunk@1547 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 3d646d3e8e27 -r 8f719fa1a691 flys-client/ChangeLog --- a/flys-client/ChangeLog Wed Mar 23 11:06:31 2011 +0000 +++ b/flys-client/ChangeLog Wed Mar 23 11:19:18 2011 +0000 @@ -1,3 +1,9 @@ +2011-03-23 Ingo Weinzierl + + * src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java: + Extract the output modes from DESCRIBE document and fill the + ArtifactDescription with those objects. + 2011-03-23 Ingo Weinzierl * src/main/java/de/intevation/flys/client/shared/model/ArtifactDescription.java: diff -r 3d646d3e8e27 -r 8f719fa1a691 flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java Wed Mar 23 11:06:31 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/ArtifactDescriptionFactory.java Wed Mar 23 11:19:18 2011 +0000 @@ -19,6 +19,8 @@ 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.DefaultOutputMode; +import de.intevation.flys.client.shared.model.OutputMode; /** @@ -58,6 +60,7 @@ Node staticNode = ClientProtocolUtils.getStaticUI(doc); Node dynamicNode = ClientProtocolUtils.getDynamicUI(doc); Node reachable = ClientProtocolUtils.getReachableStates(doc); + NodeList outputs = ClientProtocolUtils.getOutputModes(doc); String state = (String) XMLUtils.xpath( currentState, @@ -69,8 +72,14 @@ DataList currentData = extractCurrentData(dynamicNode, state); DataList[] old = extractOldData(staticNode); String[] states = extractReachableStates(reachable); + OutputMode[] outs = extractOutputModes(outputs); - return new DefaultArtifactDescription(old, currentData, state, states); + return new DefaultArtifactDescription( + old, + currentData, + state, + states, + outs); } @@ -305,5 +314,46 @@ return states; } + + + /** + * This method extract available output modes of the the current artifact. + * + * @param outputs A list of nodes that contain information about output + * modes. + * + * @return an array of Output modes. + */ + protected static OutputMode[] extractOutputModes(NodeList outputs) { + System.out.println("ArtifactDescriptionFactory - extractOutputModes()"); + + if (outputs == null || outputs.getLength() == 0) { + return null; + } + + int size = outputs.getLength(); + + List outs = new ArrayList(size); + + for (int i = 0; i < size; i++) { + Node out = outputs.item(i); + + String name = XMLUtils.xpathString( + out, "@art:name", ArtifactNamespaceContext.INSTANCE); + String desc = XMLUtils.xpathString( + out, "@art:description", ArtifactNamespaceContext.INSTANCE); + String mimeType = XMLUtils.xpathString( + out, "@art:mime-type", ArtifactNamespaceContext.INSTANCE); + + if (name != null) { + outs.add(new DefaultOutputMode(name, desc, mimeType)); + } + else { + System.err.println("Found an invalid output mode."); + } + } + + return (OutputMode[]) outs.toArray(new OutputMode[size]); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :