changeset 107:39d9391059bd

Added a ProtocolUtils class that provides functions that help creating the artifact protocol documents. artifacts/trunk@1295 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 04 Feb 2011 16:52:39 +0000
parents ece0fdb07975
children 9ece61d918b1
files ChangeLog artifact-database/src/main/java/de/intevation/artifactdatabase/ProtocolUtils.java
diffstat 2 files changed, 112 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Feb 04 10:50:53 2011 +0000
+++ b/ChangeLog	Fri Feb 04 16:52:39 2011 +0000
@@ -1,3 +1,9 @@
+2011-02-04  Ingo Weinzierl <ingo@intevation.de>
+
+	* artifact-database/src/main/java/de/intevation/artifactdatabase/ProtocolUtils.java:
+	  New. This class provides functions that should help creating the artifact
+	  protocol documents of the services describe, feed, advance and out.
+
 2011-02-04  Ingo Weinzierl <ingo@intevation.de>
 
 	* artifact-database/src/main/java/de/intevation/artifactdatabase/state/AbstractState.java:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ProtocolUtils.java	Fri Feb 04 16:52:39 2011 +0000
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2011 by Intevation GmbH
+ *
+ * This program is free software under the LGPL (>=v2.1)
+ * Read the file LGPL.txt coming with the software for details
+ * or visit http://www.gnu.org/licenses/ if it does not exist.
+ */
+package de.intevation.artifactdatabase;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import de.intevation.artifacts.common.utils.XMLUtils;
+
+
+/**
+ * This class provides methods that help creating the artifact protocol
+ * documents describe, feed, advance and out.
+ *
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public class ProtocolUtils {
+
+    /**
+     * It should not be necessary to create instances of this class.
+     */
+    private ProtocolUtils() {}
+
+
+    /**
+     * This method creates a node that might be used for the artifact protocol.
+     *
+     * @param creator The ElementCreator that is used to create the node.
+     * @param nodeName The node name.
+     * @param attrName The names of optional attributes.
+     * @param value The values for the optional attributes.
+     *
+     * @return the created node.
+     */
+    public static Element createArtNode(
+        XMLUtils.ElementCreator creator,
+        String nodeName, String[] attrName, String[] value)
+    {
+        Element typeNode = creator.create(nodeName);
+
+        if (attrName != null && value != null) {
+            for (int i = 0; i < attrName.length; i++) {
+                if (i < value.length) {
+                    creator.addAttr(typeNode, attrName[i], value[i], true);
+                }
+                else {
+                    break;
+                }
+            }
+        }
+
+        return typeNode;
+    }
+
+
+    /**
+     * This method creates the root node for all artifact protocol documents.
+     *
+     * @param creator The ElementCreator used to create new elements.
+     *
+     * @return the root node for the artifact protocol document.
+     */
+    public static Element createRootNode(XMLUtils.ElementCreator creator) {
+        return createArtNode(creator, "result", null, null);
+    }
+
+
+    /**
+     * This method appends the three necessary nodes <i>type</i>, <i>uuid</i>
+     * and <i>hash</i> of the describe document to <i>root</i> node.
+     *
+     * @param creator The ElementCreator that is used to create new nodes.
+     * @param root The root node of the describe document.
+     * @param uuid The UUID of the artifact.
+     * @param hash The hash if the artifact.
+     */
+    public static void appendDescribeHeader(
+        XMLUtils.ElementCreator creator, Element root, String uuid, String hash)
+    {
+        root.appendChild(createArtNode(
+            creator,
+            "type",
+            new String[] {"name"},
+            new String[] {"describe"}));
+
+        root.appendChild(createArtNode(
+            creator,
+            "uuid",
+            new String[] {"value"},
+            new String[] {uuid}));
+
+        root.appendChild(createArtNode(
+            creator,
+            "hash",
+            new String[] {"value"},
+            new String[] {hash}));
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

http://dive4elements.wald.intevation.org