diff artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedDifferencesAccess.java @ 6148:b12ec9f240bc

Bed height differences: DO NOT STORE ARTIFACTS IN CALCULATION RESULTS!!! This would lead to caching them which is _really_ wrong.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sat, 01 Jun 2013 20:08:21 +0200
parents af13ceeba52a
children 165086b1e66d
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedDifferencesAccess.java	Sat Jun 01 18:59:52 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/access/BedDifferencesAccess.java	Sat Jun 01 20:08:21 2013 +0200
@@ -22,14 +22,14 @@
 extends RiverAccess
 {
     private static Logger logger = Logger.getLogger(BedDifferencesAccess.class);
-    private String yearEpoch;
-    private String[] diffs;
 
-    private CallContext context;
+    private String    yearEpoch;
+    private String [] diffs;
 
-    public BedDifferencesAccess(D4EArtifact artifact, CallContext context) {
+    private String [][] differenceArtifactIds;
+
+    public BedDifferencesAccess(D4EArtifact artifact) {
         super(artifact);
-        this.context = context;
     }
 
     public String getYearEpoch() {
@@ -37,20 +37,47 @@
         return yearEpoch;
     }
 
-    public D4EArtifact[][] getDifferenceArtifacts() {
-        diffs = getString("diffids").split("#");
-        logger.debug("diffs: " + Arrays.toString(diffs));
-        D4EArtifact[][] artifacts = new D4EArtifact[diffs.length/2][2];
-        for (int i = 0; i < diffs.length; i += 2) {
-            String diff1 = StringUtil.unbracket(diffs[0 + 2*i]);
-            String diff2 = StringUtil.unbracket(diffs[1 + 2*i]);
-            String[] diff1parts = diff1.split(";");
-            String[] diff2parts = diff2.split(";");
-            logger.debug("creating 2 artifacts." + diff1parts[0] + "; " + diff2parts[0]);
-            artifacts[i][0] = RiverUtils.getArtifact(diff1parts[0], context);
-            artifacts[i][1] = RiverUtils.getArtifact(diff2parts[0], context);
+    public String [] getDiffs() {
+        if (diffs == null) {
+            diffs = getString("diffids").split("#");
+            if (logger.isDebugEnabled()) {
+                logger.debug("diffs: " + Arrays.toString(diffs));
+            }
         }
-        return artifacts;
+        return diffs;
+    }
+
+    public String[][] getDifferenceArtifactIds() {
+
+        if (differenceArtifactIds == null) {
+            String [] diffs = getDiffs();
+            differenceArtifactIds = new String[diffs.length/2][2];
+            for (int i = 0; i < diffs.length; i += 2) {
+                String diff1 = StringUtil.unbracket(diffs[0 + 2*i]);
+                String diff2 = StringUtil.unbracket(diffs[1 + 2*i]);
+                String[] diff1parts = diff1.split(";");
+                String[] diff2parts = diff2.split(";");
+                if (logger.isDebugEnabled()) {
+                    logger.debug("creating 2 artifacts." + diff1parts[0] + "; " + diff2parts[0]);
+                }
+                differenceArtifactIds[i][0] = diff1parts[0];
+                differenceArtifactIds[i][1] = diff1parts[1];
+            }
+        }
+
+        return differenceArtifactIds;
+    }
+
+    public int [][] extractHeightIds(CallContext context) {
+        String [][] artifactsIds = getDifferenceArtifactIds();
+        int [][] ids = new int[artifactsIds.length][2];
+        for (int i = 0; i < artifactsIds.length; ++i) {
+            D4EArtifact a1 = RiverUtils.getArtifact(artifactsIds[i][0], context);
+            D4EArtifact a2 = RiverUtils.getArtifact(artifactsIds[i][1], context);
+            ids[i][0] = getHeightId(a1);
+            ids[i][1] = getHeightId(a2);
+        }
+        return ids;
     }
 
     public static int getHeightId(D4EArtifact artifact) {

http://dive4elements.wald.intevation.org