Mercurial > dive4elements > river
changeset 530:26e38b79658d
Connected the CollectionAttributeService with the artifact server - Collection modifications will now be stored in the artifact databae.
flys-client/trunk@2018 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 27 May 2011 08:59:26 +0000 |
parents | a1048d310829 |
children | c17c593f8732 |
files | flys-client/ChangeLog flys-client/src/main/java/de/intevation/flys/client/server/CollectionAttributeServiceImpl.java flys-client/src/main/java/de/intevation/flys/client/server/CollectionHelper.java |
diffstat | 3 files changed, 197 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/flys-client/ChangeLog Fri May 27 08:53:22 2011 +0000 +++ b/flys-client/ChangeLog Fri May 27 08:59:26 2011 +0000 @@ -1,3 +1,14 @@ +2011-05-27 Ingo Weinzierl <ingo@intevation.de> + + * src/main/java/de/intevation/flys/client/server/CollectionAttributeServiceImpl.java: + Connected this service with the artifact server. Modifications of a + Collection will be stored in the artifact database now. + + * src/main/java/de/intevation/flys/client/server/CollectionHelper.java: + New. This helper is currently used to create the attribute document of a + collection based on a Collection itself. This helper now takes the + attributes of the Collection and transforms those values into XML. + 2011-05-27 Ingo Weinzierl <ingo@intevation.de> * src/main/java/de/intevation/flys/client/shared/model/Theme.java,
--- a/flys-client/src/main/java/de/intevation/flys/client/server/CollectionAttributeServiceImpl.java Fri May 27 08:53:22 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/CollectionAttributeServiceImpl.java Fri May 27 08:59:26 2011 +0000 @@ -1,5 +1,14 @@ package de.intevation.flys.client.server; +import org.w3c.dom.Document; + +import de.intevation.artifacts.common.utils.ClientProtocolUtils; + +import de.intevation.artifacts.httpclient.exceptions.ConnectionException; +import de.intevation.artifacts.httpclient.http.HttpClient; +import de.intevation.artifacts.httpclient.http.HttpClientImpl; +import de.intevation.artifacts.httpclient.http.response.DocumentResponseHandler; + import de.intevation.flys.client.shared.exceptions.ServerException; import de.intevation.flys.client.shared.model.Collection; @@ -13,20 +22,36 @@ extends DescribeCollectionServiceImpl implements CollectionAttributeService { + public static final String ERROR_UPDATING_COLLECTION_ATTRIBUTE = + "error_update_collection_attribute"; + + public Collection update(Collection collection, String url, String locale) throws ServerException { System.out.println("CollectionAttributeServiceImpl.update"); - // TODO Implement the correct update process here! + Document attribute = CollectionHelper.createAttribute(collection); + Document action = ClientProtocolUtils.newSetAttributeDocument( + collection.identifier(), + attribute); + try { - Thread.currentThread().sleep(5000); + HttpClient http = new HttpClientImpl(url, locale); + Document res = (Document) http.doCollectionAction( + action, + collection.identifier(), + new DocumentResponseHandler()); + + System.out.println("Collection attribute successfully set."); + + return describe(collection.identifier(), url, locale); } - catch (InterruptedException ie) { - // do nothing + catch (ConnectionException ce) { + System.err.println(ce.getLocalizedMessage()); } - return describe(collection.identifier(), url, locale); + throw new ServerException(ERROR_UPDATING_COLLECTION_ATTRIBUTE); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/CollectionHelper.java Fri May 27 08:59:26 2011 +0000 @@ -0,0 +1,156 @@ +package de.intevation.flys.client.server; + +import java.util.List; +import java.util.Map; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.artifacts.common.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; + +import de.intevation.flys.client.shared.model.Collection; +import de.intevation.flys.client.shared.model.OutputMode; +import de.intevation.flys.client.shared.model.Theme; +import de.intevation.flys.client.shared.model.ThemeList; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class CollectionHelper { + + public static Document createAttribute(Collection collection) { + System.out.println("CollectionHelper.createAttribute"); + + Document doc = XMLUtils.newDocument(); + + ElementCreator cr = new ElementCreator( + doc, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element attr = cr.create("attribute"); + + doc.appendChild(attr); + + Map<String, OutputMode> tmpOuts = collection.getOutputModes(); + + Element outs = createOutputElements(cr, collection, tmpOuts); + + if (outs != null) { + attr.appendChild(outs); + } + + return doc; + } + + + /** + * Creates a whole block with art:output nodes. + * + * @param cr The ElementCreator used to create new elements. + * @param c The collection. + * @param modes The OutputModes that should be included. + * + * @return an element with output modes. + */ + protected static Element createOutputElements( + ElementCreator cr, + Collection c, + Map<String, OutputMode> mmodes) + { + System.out.println("CollectionHelper.createOutputElements"); + + java.util.Collection<OutputMode> modes = mmodes != null + ? mmodes.values() + : null; + + if (modes == null || modes.size() == 0) { + System.err.println("Collection has no modes: " + c.identifier()); + return null; + } + + Element outs = cr.create("outputs"); + + for (OutputMode mode: modes) { + Element out = createOutputElement(cr, c, mode); + + if (out != null) { + outs.appendChild(out); + } + } + + return outs; + } + + + /** + * Create a node art:output that further consist of art:theme nodes. + * + * @param cr The ElementCreator used to create new elements. + * @param c The collection. + * @param mode The OutputMode. + * + * @return an element that represents an output mode with its themes. + */ + protected static Element createOutputElement( + ElementCreator cr, + Collection collection, + OutputMode mode) + { + System.out.println("CollectionHelper.createOutputElement"); + + Element out = cr.create("output"); + cr.addAttr(out, "name", mode.getName(), false); + + ThemeList themeList = collection.getThemeList(mode.getName()); + List<Theme> themes = themeList != null ? themeList.getThemes() : null; + + if (themes == null || themes.size() == 0) { + System.err.println("No themes for output mode: " + mode.getName()); + return null; + } + + for (Theme theme: themes) { + Element t = createThemeElement(cr, collection, theme); + + if (t != null) { + out.appendChild(t); + } + } + + return out; + } + + + /** + * Creates a theme node art:theme that represents a curve in a chart or map. + * + * @param cr The ElementCreator used to create new elements. + * @param collection The collection. + * @param theme The theme whose attributes should be written to an element. + * + * @return an element that contains the informtion of the given theme. + */ + protected static Element createThemeElement( + ElementCreator cr, + Collection collection, + Theme theme) + { + if (theme == null) { + return null; + } + + Element t = cr.create("theme"); + + cr.addAttr(t, "active", theme.isActive() ? "1" : "0", true); + cr.addAttr(t, "artifact", theme.getArtifact(), true); + cr.addAttr(t, "facet", theme.getFacet(), true); + cr.addAttr(t, "pos", Integer.toString(theme.getPosition()), true); + + return t; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :