diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java @ 3119:238803b2cb8b

Create a compound index for SQOutlierFacets based on result index and iteration number. flys-artifacts/trunk@4720 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 20 Jun 2012 11:04:24 +0000
parents b31397addf2f
children 1df6984628c3
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java	Wed Jun 20 10:56:08 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java	Wed Jun 20 11:04:24 2012 +0000
@@ -22,8 +22,9 @@
 
     private static final Logger log = Logger.getLogger(SQOutlierFacet.class);
 
+    public static final int BITMASK_ITERATION = (1 << 16) - 1;
 
-    private int iteration;
+
     private int fractionIdx;
 
 
@@ -34,7 +35,6 @@
     public SQOutlierFacet(
         int    idx,
         int    fractionIdx,
-        int    iteration,
         String name,
         String description,
         String hash,
@@ -55,10 +55,30 @@
             CalculationResult res = (CalculationResult) flys.compute(
                 context, ComputeType.ADVANCE, false);
 
+            int idx  = this.index >> 16;
+            int iter = this.index & BITMASK_ITERATION;
+
+            if (log.isDebugEnabled()) {
+                log.debug("Fetch data for index : " + this.index);
+                log.debug("  > index:       " + idx);
+                log.debug("  > fraction:    " + fractionIdx);
+                log.debug("  > iteration:   " + iter);
+            }
+
             SQResult[]       result  = (SQResult[]) res.getData();
-            SQFractionResult fResult = result[index].getFraction(fractionIdx);
+            SQFractionResult fResult = result[idx].getFraction(fractionIdx);
 
-            return fResult.getOutliers(iteration);
+            if (fResult == null) {
+                log.warn("No SQFractionResult at " + idx + "|" + fractionIdx);
+            }
+            else if (log.isDebugEnabled()) {
+                SQ[] outliers = fResult.getOutliers(iter);
+                int  num      = outliers != null ? outliers.length : 0;
+
+                log.debug("Found " + num + " outliers for iteration " + iter);
+            }
+
+            return fResult.getOutliers(iter);
         }
 
         return null;

http://dive4elements.wald.intevation.org