changeset 8851:13650d8a2373

Generalized the FloodplainChoice to a reusable BooleanChoiceState
author gernotbelger
date Thu, 18 Jan 2018 18:26:30 +0100
parents 6823991e1ed1
children 8f6d6d26e96f
files artifacts/src/main/java/org/dive4elements/river/artifacts/states/BooleanChoiceState.java artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodplainChoice.java
diffstat 2 files changed, 101 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/BooleanChoiceState.java	Thu Jan 18 18:26:30 2018 +0100
@@ -0,0 +1,100 @@
+/* Copyright (C) 2011, 2012, 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.states;
+
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+
+import org.dive4elements.artifactdatabase.ProtocolUtils;
+
+import org.dive4elements.river.artifacts.resources.Resources;
+
+/**
+ * Generic state for a boolean choice. Only difference between real implementations are the human readable labels.
+ * 
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ * @author Gernot Belger
+ */
+public abstract class BooleanChoiceState extends DefaultState {
+
+	private String optionMsg;
+	private String activeMsg;
+	private String inactiveMsg;
+
+    public BooleanChoiceState( String optionMsg, String activeMsg, String inactiveMsg ) {
+		this.optionMsg = optionMsg;
+		this.activeMsg = activeMsg;
+		this.inactiveMsg = inactiveMsg;
+	}
+    
+    private static final Logger log =
+        Logger.getLogger(BooleanChoiceState.class);
+
+    @Override
+    protected String getUIProvider() {
+        return "boolean_panel";
+    }
+
+    @Override
+    protected Element[] createItems(
+        XMLUtils.ElementCreator cr,
+        Artifact    artifact,
+        String      name,
+        CallContext context)
+    {
+        CallMeta meta = context.getMeta();
+
+        Element option = createItem(
+            cr,
+            new String[] { Resources.getMsg(meta, optionMsg, optionMsg), "true" });
+
+        return new Element[] { option };
+    }
+
+
+    @Override
+    protected String getLabelFor(
+        CallContext cc,
+        String      name,
+        String      value,
+        String      type
+    ) {
+        log.debug("GET LABEL FOR '" + name + "' / '" + value + "'");
+        if (value != null && value.equals("true")) {
+            return Resources.getMsg(cc.getMeta(), activeMsg, activeMsg);
+        }
+        else {
+            return Resources.getMsg(cc.getMeta(), inactiveMsg, inactiveMsg);
+        }
+    }
+
+
+    protected Element createItem(XMLUtils.ElementCreator cr, Object obj) {
+        Element item  = ProtocolUtils.createArtNode(cr, "item", null, null);
+        Element label = ProtocolUtils.createArtNode(cr, "label", null, null);
+        Element value = ProtocolUtils.createArtNode(cr, "value", null, null);
+
+        String[] arr = (String[]) obj;
+
+        label.setTextContent(arr[0]);
+        value.setTextContent(arr[1]);
+
+        item.appendChild(label);
+        item.appendChild(value);
+
+        return item;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodplainChoice.java	Thu Jan 18 18:22:25 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodplainChoice.java	Thu Jan 18 18:26:30 2018 +0100
@@ -26,6 +26,7 @@
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
  */
+// FIXME: inherit from BooleanChoiceState instead to remove duplicate code; BUT: this will probably break artifact serialization
 public class FloodplainChoice extends DefaultState {
 
     public static final String OPTION   = "floodplain.option";

http://dive4elements.wald.intevation.org