diff gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java @ 207:d87347142702

Store the Results of an Artifact not in the Artifact but in an ehcache instance. issue3 gnv-artifacts/trunk@263 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Fri, 23 Oct 2009 08:50:50 +0000
parents 734ac082c8d1
children ee2d4134d0b3
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java	Fri Oct 23 07:37:39 2009 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java	Fri Oct 23 08:50:50 2009 +0000
@@ -23,6 +23,7 @@
 import de.intevation.artifactdatabase.Config;
 import de.intevation.artifacts.CallMeta;
 import de.intevation.gnv.artifacts.GNVArtifactBase;
+import de.intevation.gnv.artifacts.cache.CacheFactory;
 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
 import de.intevation.gnv.geobackend.base.Result;
 import de.intevation.gnv.geobackend.base.query.QueryExecutor;
@@ -54,6 +55,8 @@
      * the logger, used to log exceptions and additonaly information
      */
     private static Logger log = Logger.getLogger(GNVArtifactBase.class);
+    
+    private final static String DESCRIBEDATAKEY = "_DESCRIBEDATA";
 
     private String id = null;
 
@@ -74,8 +77,7 @@
     private Transition parent = null;
 
     protected Map<String, InputData> inputData = null;
-
-    protected Collection<Object> descibeData = null;
+    
 
     /**
      * Constructor
@@ -205,7 +207,7 @@
                     boolean valid = iv.isInputValid(tmpItem.getValue(),
                             inputValue.getType());
                     if (valid) {
-                        this.setSelection(tmpItem);
+                        this.setSelection(tmpItem, uuid);
                         this.inputData.put(tmpItem.getName(), tmpItem);
                     } else {
                         String errMsg = "Wrong input for " + tmpItem.getValue()
@@ -227,10 +229,10 @@
         }
     }
 
-    private void setSelection(InputData inputData) {
+    private void setSelection(InputData inputData, String uuid) {
         log.debug("TransitionBase.setSelection");
 
-        Object o = this.getDescribeData(inputData.getName());
+        Object o = this.getDescribeData(inputData.getName(),uuid);
         if (o != null) {
             if (o instanceof Collection<?>) {
                 Collection<KeyValueDescibeData> values = (Collection<KeyValueDescibeData>) o;
@@ -264,10 +266,11 @@
         }
     }
 
-    private Object getDescribeData(String name) {
+    private Object getDescribeData(String name, String uuid) {
         log.debug("TransitionBase.getDescribeData");
-        if (this.descibeData != null) {
-            Iterator<Object> it = this.descibeData.iterator();
+        Collection<Object> descibeData = this.getDescibeData(uuid);
+        if (descibeData != null) {
+            Iterator<Object> it = descibeData.iterator();
             while (it.hasNext()) {
                 Object o = it.next();
                 if (o instanceof NamedCollection<?>) {
@@ -407,11 +410,13 @@
      */
     protected void purifyResult(Collection<Result> result, String uuid) {
         log.debug("TransitionBase.purifyResult");
-        if (this.descibeData == null) {
-            this.descibeData = new ArrayList<Object>();
+        Collection<Object> describeData = this.getDescibeData(uuid);
+        if (describeData == null) {
+            describeData = new ArrayList<Object>();
         }
         NamedCollection<KeyValueDescibeData> keyValueDescibeData = extractKVP(result, "KEY", "VALUE");
-        this.descibeData.add(keyValueDescibeData);
+        describeData.add(keyValueDescibeData); 
+        this.setDescibeData(uuid, describeData);
     }
 
     /**
@@ -436,13 +441,15 @@
 
     /**
      * @see de.intevation.gnv.transition.Transition#describe(org.w3c.dom.Document,
-     *      org.w3c.dom.Node, de.intevation.artifacts.CallMeta)
+     *      org.w3c.dom.Node, de.intevation.artifacts.CallMeta,
+     *      java.lang.String)
      */
-    public void describe(Document document, Node rootNode, CallMeta callMeta) {
+    public void describe(Document document, Node rootNode, CallMeta callMeta,String uuid) {
         log.debug("TransitionBase.describe");
-        if (this.descibeData != null) {
+        Collection<Object> descibeData = this.getDescibeData(uuid);
+        if (descibeData != null) {
             ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities();
-            Iterator<Object> it = this.descibeData.iterator();
+            Iterator<Object> it = descibeData.iterator();
             Node staticNode = xmlutilities.createArtifactElement(document,
                     "static");
             Node dynamic = xmlutilities.createArtifactElement(document,
@@ -507,9 +514,9 @@
                     }
 
                 } else if (o instanceof MinMaxDescribeData) {
-                    MinMaxDescribeData descibeData = (MinMaxDescribeData) o;
-                    Object min = descibeData.getMinValue();
-                    Object max = descibeData.getMaxValue();
+                    MinMaxDescribeData minMaxDescibeData = (MinMaxDescribeData) o;
+                    Object min = minMaxDescibeData.getMinValue();
+                    Object max = minMaxDescibeData.getMaxValue();
                     if (min instanceof GregorianCalendar) {
                         Date d = ((GregorianCalendar) min).getTime();
                         min = DateUtils.getPatternedDateAmer(d);
@@ -522,14 +529,14 @@
                     
                     Element groupNode = xmlutilities.createXFormElement(
                             document, "group");
-                    groupNode.setAttribute("ref", descibeData.getMinName());
+                    groupNode.setAttribute("ref", minMaxDescibeData.getMinName());
                     Element groupNodeLableNode = xmlutilities
                             .createXFormElement(document, "label");
                     groupNodeLableNode.setTextContent(RessourceFactory
                             .getInstance().getRessource(
                                     callMeta.getLanguages(),
-                                    descibeData.getMinName(),
-                                    descibeData.getMinName()));
+                                    minMaxDescibeData.getMinName(),
+                                    minMaxDescibeData.getMinName()));
                     groupNode.appendChild(groupNodeLableNode);
 
                     Element inputMinNode = xmlutilities.createXFormElement(
@@ -617,16 +624,28 @@
     /**
      * @see de.intevation.gnv.transition.Transition#getDescibeData()
      */
-    public Collection<Object> getDescibeData() {
-        return this.descibeData;
+    protected Collection<Object> getDescibeData(String uuid) {
+        if (CacheFactory.getInstance().isInitialized()) {
+            String key = uuid + DESCRIBEDATAKEY;
+            log.debug("Hash for Queryelements: " + key);
+            net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key);
+            if (value != null) {
+                return (Collection<Object>) (value.getObjectValue());
+            }
+        }
+        return null;
     }
-
+    
     /**
-     * @see de.intevation.gnv.transition.Transition#setDescibeData(java.util.Collection)
+     * @see de.intevation.gnv.transition.Transition#getDescibeData()
      */
-    public void setDescibeData(Collection<Object> descibeData) {
-        this.descibeData = descibeData;
-
+    protected void setDescibeData(String uuid, Collection<Object> describeData) {
+        
+        if (CacheFactory.getInstance().isInitialized()) {
+            String key = uuid + DESCRIBEDATAKEY;
+            log.debug("Hash for Queryelements: " + key);
+            CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, describeData));
+        }
     }
 
     /**

http://dive4elements.wald.intevation.org