Ticket 679: Add option to choose between analyse only and analyse and apply for compo... jenkins-Beast-363
authorAnders Henja <anders@henjab.se>
Thu, 19 Jan 2017 13:33:41 +0000 (14:33 +0100)
committerAnders Henja <anders@henjab.se>
Thu, 19 Jan 2017 13:33:41 +0000 (14:33 +0100)
30 files changed:
etc/create_db.sql
etc/upgrade_db.sql
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-createcomposite.xls
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJob.xls
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJobRemoved.xls
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-updatecomposite.xls
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest.java
itest/eu/baltrad/beast/router/BltRouterCompositeDBITest.xls
itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-delete.xls
itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-store.xls
itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-update.xls
itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest.java
itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest.xls
itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-delete.xls
itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-store.xls
itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-update.xls
itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest.java
itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest.xls
src/eu/baltrad/beast/rules/composite/CompositingRule.java
src/eu/baltrad/beast/rules/composite/CompositingRuleManager.java
src/eu/baltrad/beast/rules/site2d/Site2DRule.java
src/eu/baltrad/beast/rules/site2d/Site2DRuleManager.java
src/eu/baltrad/beast/rules/volume/VolumeRule.java
src/eu/baltrad/beast/rules/volume/VolumeRuleManager.java
test/eu/baltrad/beast/rules/composite/CompositingRuleManagerTest.java
test/eu/baltrad/beast/rules/composite/CompositingRuleTest.java
test/eu/baltrad/beast/rules/site2d/Site2DRuleManagerTest.java
test/eu/baltrad/beast/rules/site2d/Site2DRuleTest.java
test/eu/baltrad/beast/rules/volume/VolumeRuleManagerTest.java
test/eu/baltrad/beast/rules/volume/VolumeRuleTest.java

index e3c1317..42a05fe 100644 (file)
@@ -75,7 +75,8 @@ create table beast_composite_rules (
   ignore_malfunc boolean NOT NULL,
   ctfilter boolean NOT NULL,
   qitotal_field text,
-  quantity text
+  quantity text,
+  qc_mode integer NOT NULL  
 );
 
 create table beast_composite_sources (
@@ -102,7 +103,8 @@ create table beast_site2d_rules (
   ctfilter boolean NOT NULL,
   pcsid text,
   xscale decimal NOT NULL,
-  yscale decimal NOT NULL
+  yscale decimal NOT NULL,
+  qc_mode integer NOT NULL  
 );
 
 create table beast_site2d_sources (
@@ -137,7 +139,8 @@ create table beast_volume_rules (
   ascending boolean NOT NULL,
   minelev decimal NOT NULL,
   maxelev decimal NOT NULL,
-  elangles text
+  elangles text,
+  qc_mode integer NOT NULL
 );
 
 create table beast_volume_sources (
index cd13e8e..b5a701b 100644 (file)
@@ -293,6 +293,39 @@ BEGIN
 END;
 $$ LANGUAGE plpgsql;
 
+CREATE OR REPLACE FUNCTION update_beast_volume_rules_with_qc_mode() RETURNS VOID AS $$
+BEGIN
+  PERFORM true FROM information_schema.columns WHERE table_name = 'beast_volume_rules' AND column_name = 'qc_mode';
+  IF NOT FOUND THEN
+    ALTER TABLE beast_volume_rules ADD COLUMN qc_mode integer;
+    UPDATE beast_volume_rules SET qc_mode=0;
+    ALTER TABLE beast_volume_rules ALTER COLUMN qc_mode SET NOT NULL;
+  END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION update_beast_composite_rules_with_qc_mode() RETURNS VOID AS $$
+BEGIN
+  PERFORM true FROM information_schema.columns WHERE table_name = 'beast_composite_rules' AND column_name = 'qc_mode';
+  IF NOT FOUND THEN
+    ALTER TABLE beast_composite_rules ADD COLUMN qc_mode integer;
+    UPDATE beast_composite_rules SET qc_mode=0;
+    ALTER TABLE beast_composite_rules ALTER COLUMN qc_mode SET NOT NULL;
+  END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION update_beast_site2d_rules_with_qc_mode() RETURNS VOID AS $$
+BEGIN
+  PERFORM true FROM information_schema.columns WHERE table_name = 'beast_site2d_rules' AND column_name = 'qc_mode';
+  IF NOT FOUND THEN
+    ALTER TABLE beast_site2d_rules ADD COLUMN qc_mode integer;
+    UPDATE beast_site2d_rules SET qc_mode=0;
+    ALTER TABLE beast_site2d_rules ALTER COLUMN qc_mode SET NOT NULL;
+  END IF;
+END;
+$$ LANGUAGE plpgsql;
+
 select create_beast_gmap_rules();
 select create_beast_host_filter();
 select create_beast_acrr_rules();
@@ -309,6 +342,9 @@ select update_beast_acrr_rules_with_applygra();
 select update_beast_composite_rules_with_quantity();
 select update_beast_composite_rules_with_nominal_timeout();
 select update_beast_volume_rules_with_nominal_timeout();
+select update_beast_volume_rules_with_qc_mode();
+select update_beast_composite_rules_with_qc_mode();
+select update_beast_site2d_rules_with_qc_mode();
 
 drop function create_beast_gmap_rules();
 drop function create_beast_host_filter();
@@ -326,3 +362,7 @@ drop function update_beast_acrr_rules_with_applygra();
 drop function update_beast_composite_rules_with_quantity();
 drop function update_beast_composite_rules_with_nominal_timeout();
 drop function update_beast_volume_rules_with_nominal_timeout();
+drop function update_beast_volume_rules_with_qc_mode();
+drop function update_beast_composite_rules_with_qc_mode();
+drop function update_beast_site2d_rules_with_qc_mode();
+
index ffdaa6c..36e2ec7 100644 (file)
Binary files a/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-createcomposite.xls and b/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-createcomposite.xls differ
index 921f7fb..54fa8c4 100644 (file)
Binary files a/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJob.xls and b/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJob.xls differ
index 04c4ca2..217c87e 100644 (file)
Binary files a/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJobRemoved.xls and b/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-removeCompositeWithScheduledJobRemoved.xls differ
index ad60042..f2e44d9 100644 (file)
Binary files a/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-updatecomposite.xls and b/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest-updatecomposite.xls differ
index fac9147..ae7ea64 100644 (file)
@@ -127,6 +127,7 @@ public class BltRouterCompositeDBITest extends TestCase {
     assertEquals("se.baltrad.something", ((CompositingRule)def.getRule()).getQitotalField());
     assertEquals("VRAD", ((CompositingRule)def.getRule()).getQuantity());
     assertEquals(true, ((CompositingRule)def.getRule()).isNominalTimeout());
+    assertEquals(CompositingRule.QualityControlMode_ANALYZE, ((CompositingRule)def.getRule()).getQualityControlMode());
     assertEquals(1, ((CompositingRule)def.getRule()).getDetectors().size());
     assertEquals("ropo", ((CompositingRule)def.getRule()).getDetectors().get(0));
   }
@@ -158,6 +159,7 @@ public class BltRouterCompositeDBITest extends TestCase {
     ((CompositingRule)def.getRule()).setQitotalField("se.smhi.something");
     ((CompositingRule)def.getRule()).setQuantity("TH");
     ((CompositingRule)def.getRule()).setNominalTimeout(false);
+    ((CompositingRule)def.getRule()).setQualityControlMode(CompositingRule.QualityControlMode_ANALYZE_AND_APPLY);
     ((CompositingRule)def.getRule()).setDetectors(detectors);
     
     classUnderTest.updateDefinition(def);
@@ -218,6 +220,7 @@ public class BltRouterCompositeDBITest extends TestCase {
     rule.setQitotalField("se.someone.somewhere");
     rule.setQuantity("NOOP");
     rule.setNominalTimeout(false);
+    rule.setQualityControlMode(CompositingRule.QualityControlMode_ANALYZE);
     rule.setDetectors(detectors);
     rule.setSources(sources);
 
index d08bcea..bedf68d 100644 (file)
Binary files a/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest.xls and b/itest/eu/baltrad/beast/router/BltRouterCompositeDBITest.xls differ
index bda4cd1..25adc06 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-delete.xls and b/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-delete.xls differ
index 74054a7..ae3dc19 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-store.xls and b/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-store.xls differ
index 98f3d18..38eb8db 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-update.xls and b/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest-update.xls differ
index d9d6a23..4eff129 100644 (file)
@@ -115,7 +115,7 @@ public class Site2DRuleManagerITest extends TestCase {
     rule.setPcsid("abc");
     rule.setXscale(3000.0);
     rule.setYscale(4000.0);
-    
+    rule.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE);
     classUnderTest.store(5, rule);
     
     verifyDatabaseTables("store");
@@ -144,6 +144,7 @@ public class Site2DRuleManagerITest extends TestCase {
     rule.setPcsid("abc");
     rule.setXscale(3000.0);
     rule.setYscale(4000.0);
+    rule.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE_AND_APPLY);
     
     classUnderTest.update(3, rule);
     
@@ -178,6 +179,7 @@ public class Site2DRuleManagerITest extends TestCase {
     assertEquals("pcs1", rule.getPcsid());
     assertEquals(1000.0, rule.getXscale(), 4);
     assertEquals(1000.0, rule.getYscale(), 4);
+    assertEquals(1, rule.getQualityControlMode());
   }
 
 }
index c33b669..b024927 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest.xls and b/itest/eu/baltrad/beast/rules/site2d/Site2DRuleManagerITest.xls differ
index 88c052d..6d6f807 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-delete.xls and b/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-delete.xls differ
index 6303782..64802aa 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-store.xls and b/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-store.xls differ
index 60ca6fd..598de67 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-update.xls and b/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest-update.xls differ
index ec439bc..bd0c465 100644 (file)
@@ -142,6 +142,7 @@ public class VolumeRuleManagerITest extends TestCase {
     assertEquals(0.1, rule.getElevationMin());
     assertEquals(45.0, rule.getElevationMax());
     assertEquals("1.0,2.0,3.0", rule.getElevationAngles());
+    assertEquals(1, rule.getQualityControlMode());
     List<String> sources = rule.getSources();
     assertEquals(2, sources.size());
     assertTrue(sources.contains("S1"));
@@ -161,6 +162,7 @@ public class VolumeRuleManagerITest extends TestCase {
     assertEquals(1.0, rule.getElevationMin());
     assertEquals(10.0, rule.getElevationMax());
     assertEquals(null, rule.getElevationAngles());
+    assertEquals(0, rule.getQualityControlMode());
     List<String> sources = rule.getSources();
     assertEquals(3, sources.size());
     assertTrue(sources.contains("S3"));
@@ -180,6 +182,7 @@ public class VolumeRuleManagerITest extends TestCase {
     assertEquals(2.5, rule.getElevationMin());
     assertEquals(24.1, rule.getElevationMax());
     assertEquals("1.5,3.0", rule.getElevationAngles());
+    assertEquals(1, rule.getQualityControlMode());    
     List<String> sources = rule.getSources();
     assertEquals(0, sources.size());
     List<String> detectors = rule.getDetectors();
@@ -202,6 +205,7 @@ public class VolumeRuleManagerITest extends TestCase {
     rule.setElevationAngles("3.0,4.0");
     rule.setSources(sources);
     rule.setDetectors(detectors);
+    rule.setQualityControlMode(VolumeRule.QualityControlMode_ANALYZE);
     
     classUnderTest.store(4, rule);
     
@@ -227,6 +231,7 @@ public class VolumeRuleManagerITest extends TestCase {
     rule.setElevationMin(2.0);
     rule.setElevationMax(24.0);
     rule.setElevationAngles("1.0,5.0,10.0");
+    rule.setQualityControlMode(VolumeRule.QualityControlMode_ANALYZE);
     rule.setSources(sources);
     rule.setDetectors(detectors);
     
index cea2124..c03a522 100644 (file)
Binary files a/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest.xls and b/itest/eu/baltrad/beast/rules/volume/VolumeRuleManagerITest.xls differ
index 2340d4c..ae628f7 100644 (file)
@@ -65,6 +65,12 @@ public class CompositingRule implements IRule, ITimeoutRule, InitializingBean {
    */
   public final static String TYPE = "blt_composite";
   
+  /** Performs the quality analysis and then applies the result to the original set */
+  public final static int QualityControlMode_ANALYZE_AND_APPLY = 0;
+  
+  /** Only performs the quality analysis */
+  public final static int QualityControlMode_ANALYZE = 1;  
+  
   /**
    * If pixel should be determined by "closest to radar"
    */
@@ -217,6 +223,11 @@ public class CompositingRule implements IRule, ITimeoutRule, InitializingBean {
   private String quantity = "DBZH";
   
   /**
+   * How the quality controls should be handled and used
+   */
+  private int qualityControlMode = QualityControlMode_ANALYZE_AND_APPLY;
+  
+  /**
    * The recipients that are affected by this rule. Used
    * for generating timeout message
    */
@@ -650,6 +661,7 @@ public class CompositingRule implements IRule, ITimeoutRule, InitializingBean {
         }
       }
       args.add("--anomaly-qc="+dstr.toString());
+      args.add("--qc-mode="+getQualityControlModeAsString());      
     }
     args.add("--method="+this.method);
     args.add("--prodpar="+this.prodpar);
@@ -944,4 +956,21 @@ public class CompositingRule implements IRule, ITimeoutRule, InitializingBean {
   public void setNominalTimeout(boolean nominalTimeout) {
     this.nominalTimeout = nominalTimeout;
   }
+
+  public int getQualityControlMode() {
+    return qualityControlMode;
+  }
+  
+  public String getQualityControlModeAsString() {
+    if (getQualityControlMode() == QualityControlMode_ANALYZE) {
+      return "ANALYZE";
+    } else if (getQualityControlMode() == QualityControlMode_ANALYZE_AND_APPLY) {
+      return "ANALYZE_AND_APPLY";
+    }
+    return "UNKNOWN";
+  }
+  
+  public void setQualityControlMode(int qualityControlMode) {
+    this.qualityControlMode = qualityControlMode;
+  }
 }
index ac62a24..26d00ae 100644 (file)
@@ -127,10 +127,11 @@ public class CompositingRuleManager implements IRuleManager {
     String qitotalField = crule.getQitotalField();
     String quantity = crule.getQuantity();
     boolean nominal_timeout = crule.isNominalTimeout();
+    int qualityControlMode = crule.getQualityControlMode();
     
     template.update(
-        "insert into beast_composite_rules (rule_id, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, qitotal_field, quantity, nominal_timeout)"+
-        " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{ruleId, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignoreMalfunc, ctfilter, qitotalField, quantity, nominal_timeout});
+        "insert into beast_composite_rules (rule_id, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, qitotal_field, quantity, nominal_timeout, qc_mode)"+
+        " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{ruleId, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignoreMalfunc, ctfilter, qitotalField, quantity, nominal_timeout, qualityControlMode});
     storeSources(ruleId, crule.getSources());
     storeDetectors(ruleId, crule.getDetectors());
     crule.setRuleId(ruleId);
@@ -143,8 +144,8 @@ public class CompositingRuleManager implements IRuleManager {
   public void update(int ruleId, IRule rule) {
     CompositingRule crule = (CompositingRule)rule;
     template.update(
-        "update beast_composite_rules set area=?, interval=?, timeout=?, byscan=?, selection_method=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, qitotal_field=?, quantity=?, nominal_timeout=? where rule_id=?",
-        new Object[]{crule.getArea(), crule.getInterval(), crule.getTimeout(), crule.isScanBased(), crule.getSelectionMethod(), crule.getMethod(), crule.getProdpar(), crule.isApplyGRA(), crule.getZR_A(), crule.getZR_b(), crule.isIgnoreMalfunc(), crule.isCtFilter(), crule.getQitotalField(), crule.getQuantity(), crule.isNominalTimeout(), ruleId});
+        "update beast_composite_rules set area=?, interval=?, timeout=?, byscan=?, selection_method=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, qitotal_field=?, quantity=?, nominal_timeout=?, qc_mode=? where rule_id=?",
+        new Object[]{crule.getArea(), crule.getInterval(), crule.getTimeout(), crule.isScanBased(), crule.getSelectionMethod(), crule.getMethod(), crule.getProdpar(), crule.isApplyGRA(), crule.getZR_A(), crule.getZR_b(), crule.isIgnoreMalfunc(), crule.isCtFilter(), crule.getQitotalField(), crule.getQuantity(), crule.isNominalTimeout(), crule.getQualityControlMode(), ruleId});
     storeSources(ruleId, crule.getSources());
     storeDetectors(ruleId, crule.getDetectors());
     crule.setRuleId(ruleId);
@@ -233,6 +234,7 @@ public class CompositingRuleManager implements IRuleManager {
         result.setQitotalField(rs.getString("qitotal_field"));
         result.setQuantity(rs.getString("quantity"));
         result.setNominalTimeout(rs.getBoolean("nominal_timeout"));
+        result.setQualityControlMode(rs.getInt("qc_mode"));
         result.setSources(getSources(rule_id));
         result.setDetectors(getDetectors(rule_id));
         return result;
index b9cffd7..a94b9a0 100644 (file)
@@ -48,6 +48,12 @@ import eu.baltrad.beast.rules.util.IRuleUtilities;
  * @author Anders Henja
  */
 public class Site2DRule implements IRule, InitializingBean {
+  /** Performs the quality analysis and then applies the result to the original set */
+  public final static int QualityControlMode_ANALYZE_AND_APPLY = 0;
+  
+  /** Only performs the quality analysis */
+  public final static int QualityControlMode_ANALYZE = 1;    
+  
   /**
    * The name of this static composite type
    */
@@ -122,6 +128,11 @@ public class Site2DRule implements IRule, InitializingBean {
   private List<String> detectors = new ArrayList<String>();
   
   /**
+   * How the quality controls should be handled and used
+   */
+  private int qualityControlMode = QualityControlMode_ANALYZE_AND_APPLY;
+  
+  /**
    * The algorithm to use. CAPPI and PCAPPI is really only meaningful for volumes but we are not discriminating anyone. 
    */
   private String method = PCAPPI; 
@@ -315,6 +326,7 @@ public class Site2DRule implements IRule, InitializingBean {
         }
       }
       args.add("--anomaly-qc="+dstr.toString());
+      args.add("--qc-mode="+getQualityControlModeAsString());      
     }
     args.add("--method="+this.method);
     args.add("--prodpar="+this.prodpar);
@@ -636,4 +648,20 @@ public class Site2DRule implements IRule, InitializingBean {
   public void setMatcher(MetadataMatcher matcher) {
     this.matcher = matcher;
   }
+
+  public int getQualityControlMode() {
+    return qualityControlMode;
+  }
+  
+  public String getQualityControlModeAsString() {
+    if (getQualityControlMode() == QualityControlMode_ANALYZE) {
+      return "ANALYZE";
+    } else if (getQualityControlMode() == QualityControlMode_ANALYZE_AND_APPLY) {
+      return "ANALYZE_AND_APPLY";
+    }
+    return "UNKNOWN";
+  }
+  public void setQualityControlMode(int qualityControlMode) {
+    this.qualityControlMode = qualityControlMode;
+  }
 }
index a85ba65..8a38341 100644 (file)
@@ -81,10 +81,11 @@ public class Site2DRuleManager implements IRuleManager {
     String pcsid = srule.getPcsid();
     double xscale = srule.getXscale();
     double yscale = srule.getYscale();
+    int qualityControlMode = srule.getQualityControlMode();
     
     template.update(
-        "INSERT INTO beast_site2d_rules (rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale)"+
-        " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{ruleId, area, interval, byscan, method, prodpar, applygra, zrA, zrb, ignoremalfunc, ctfilter, pcsid, xscale, yscale});
+        "INSERT INTO beast_site2d_rules (rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale, qc_mode)"+
+        " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{ruleId, area, interval, byscan, method, prodpar, applygra, zrA, zrb, ignoremalfunc, ctfilter, pcsid, xscale, yscale, qualityControlMode});
     
     storeSources(ruleId, sources);
     storeDetectors(ruleId, detectors);
@@ -127,10 +128,11 @@ public class Site2DRuleManager implements IRuleManager {
     String pcsid = srule.getPcsid();
     double xscale = srule.getXscale();
     double yscale = srule.getYscale();
-
+    int qualityControlMode = srule.getQualityControlMode();
+    
     template.update("UPDATE beast_site2d_rules" +
-        " SET area=?, interval=?, byscan=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, pcsid=?, xscale=?, yscale=?" +
-        " WHERE rule_id=?", new Object[]{area, interval, byscan, method, prodpar, applygra, zrA, zrb, ignoremalfunc, ctfilter, pcsid, xscale, yscale, ruleId});
+        " SET area=?, interval=?, byscan=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, pcsid=?, xscale=?, yscale=?, qc_mode=?" +
+        " WHERE rule_id=?", new Object[]{area, interval, byscan, method, prodpar, applygra, zrA, zrb, ignoremalfunc, ctfilter, pcsid, xscale, yscale, qualityControlMode, ruleId});
     storeSources(ruleId, sources);
     storeDetectors(ruleId, detectors);
     storeFilter(ruleId, srule.getFilter());
@@ -295,6 +297,7 @@ public class Site2DRuleManager implements IRuleManager {
         result.setPcsid(rs.getString("pcsid"));
         result.setXscale(rs.getDouble("xscale"));
         result.setYscale(rs.getDouble("yscale"));
+        result.setQualityControlMode(rs.getInt("qc_mode"));
         result.setSources(getSources(ruleId));
         result.setDetectors(getDetectors(ruleId));
         return result;
index 9bab3d5..456aba9 100644 (file)
@@ -59,6 +59,12 @@ public class VolumeRule implements IRule, ITimeoutRule, InitializingBean {
    * The name of this static composite type
    */
   public final static String TYPE = "blt_volume";
+
+  /** Performs the quality analysis and then applies the result to the original set */
+  public final static int QualityControlMode_ANALYZE_AND_APPLY = 0;
+  
+  /** Only performs the quality analysis */
+  public final static int QualityControlMode_ANALYZE = 1;  
   
   /**
    * The catalog for database access
@@ -120,6 +126,11 @@ public class VolumeRule implements IRule, ITimeoutRule, InitializingBean {
   private boolean ascending = true;
   
   /**
+   * How the quality controls should be handled and used
+   */
+  private int qualityControlMode = QualityControlMode_ANALYZE_AND_APPLY;
+  
+  /**
    * The sources for which this rule applies
    */
   private List<String> sources = new ArrayList<String>();
@@ -560,6 +571,7 @@ public class VolumeRule implements IRule, ITimeoutRule, InitializingBean {
         }
       }
       args.add("--anomaly-qc="+dstr.toString());
+      args.add("--qc-mode="+getQualityControlModeAsString());
     }
     args.add("--algorithm_id="+getRuleId()+"-"+source);
     args.add("--merge=true");
@@ -718,4 +730,21 @@ public class VolumeRule implements IRule, ITimeoutRule, InitializingBean {
   public void setNominalTimeout(boolean nominalTimeout) {
     this.nominalTimeout = nominalTimeout;
   }
+
+  public int getQualityControlMode() {
+    return qualityControlMode;
+  }
+
+  public String getQualityControlModeAsString() {
+    if (getQualityControlMode() == QualityControlMode_ANALYZE) {
+      return "ANALYZE";
+    } else if (getQualityControlMode() == QualityControlMode_ANALYZE_AND_APPLY) {
+      return "ANALYZE_AND_APPLY";
+    }
+    return "UNKNOWN";
+  }
+  
+  public void setQualityControlMode(int qualityControlMode) {
+    this.qualityControlMode = qualityControlMode;
+  }
 }
index bf6c51b..af377ef 100644 (file)
@@ -133,13 +133,14 @@ public class VolumeRuleManager implements IRuleManager {
     double minelev = vrule.getElevationMin();
     double maxelev = vrule.getElevationMax();
     String elangles = vrule.getElevationAngles();
+    int qc_mode = vrule.getQualityControlMode();
     List<String> sources = vrule.getSources();
     List<String> detectors = vrule.getDetectors();
     
     template.update("insert into beast_volume_rules" +
-                    " (rule_id, interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles) values" +
-                    " (?,?,?,?,?,?,?,?)", 
-                    new Object[]{ruleId, interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles});
+                    " (rule_id, interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles, qc_mode) values" +
+                    " (?,?,?,?,?,?,?,?,?)", 
+                    new Object[]{ruleId, interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles, qc_mode});
     
     storeSources(ruleId, sources);
     storeDetectors(ruleId, detectors);
@@ -161,12 +162,13 @@ public class VolumeRuleManager implements IRuleManager {
     double minelev = vrule.getElevationMin();
     double maxelev = vrule.getElevationMax();
     String elangles = vrule.getElevationAngles();
+    int qc_mode = vrule.getQualityControlMode();
     List<String> sources = vrule.getSources();
     List<String> detectors = vrule.getDetectors();
     
     template.update("update beast_volume_rules set" +
-                    " interval=?, timeout=?, nominal_timeout=?, ascending=?, minelev=?, maxelev=?, elangles=? where rule_id=?", 
-                    new Object[]{interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles, ruleId});
+                    " interval=?, timeout=?, nominal_timeout=?, ascending=?, minelev=?, maxelev=?, elangles=?, qc_mode=? where rule_id=?", 
+                    new Object[]{interval, timeout, nominal_timeout, ascending, minelev, maxelev, elangles, qc_mode, ruleId});
     
     storeSources(ruleId, sources);
     storeDetectors(ruleId, detectors);
@@ -275,6 +277,7 @@ public class VolumeRuleManager implements IRuleManager {
         double mine = rs.getDouble("minelev");
         double maxe = rs.getDouble("maxelev");
         String elangles = rs.getString("elangles");
+        int qc_mode = rs.getInt("qc_mode");
         List<String> sources = getSources(rule_id);
         List<String> detectors = getDetectors(rule_id);
         result.setRuleId(rule_id);
@@ -285,6 +288,7 @@ public class VolumeRuleManager implements IRuleManager {
         result.setElevationMin(mine);
         result.setElevationMax(maxe);
         result.setElevationAngles(elangles);
+        result.setQualityControlMode(qc_mode);
         result.setSources(sources);
         result.setDetectors(detectors);
         return result;
index 5e12d73..83d8fd0 100644 (file)
@@ -145,9 +145,11 @@ public class CompositingRuleManagerTest extends EasyMockSupport {
     rule.setQitotalField("se.baltrad.something");
     rule.setQuantity("VRAD");
     rule.setNominalTimeout(true);
+    rule.setQualityControlMode(CompositingRule.QualityControlMode_ANALYZE);
+    
     expect(jdbc.update(
-        "insert into beast_composite_rules (rule_id, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, qitotal_field, quantity, nominal_timeout)"+
-        " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{13, "seang", 12, 20, true, CompositingRule.SelectionMethod_HEIGHT_ABOVE_SEALEVEL, CompositingRule.PPI, "0.5", true, 10.0, 5.0, true, true, "se.baltrad.something", "VRAD", true}))
+        "insert into beast_composite_rules (rule_id, area, interval, timeout, byscan, selection_method, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, qitotal_field, quantity, nominal_timeout, qc_mode)"+
+        " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{13, "seang", 12, 20, true, CompositingRule.SelectionMethod_HEIGHT_ABOVE_SEALEVEL, CompositingRule.PPI, "0.5", true, 10.0, 5.0, true, true, "se.baltrad.something", "VRAD", true, CompositingRule.QualityControlMode_ANALYZE}))
           .andReturn(0);
     
     methods.storeSources(13, sources);
@@ -195,9 +197,10 @@ public class CompositingRuleManagerTest extends EasyMockSupport {
     rule.setQitotalField("se.baltrad.something");
     rule.setQuantity("NOOP");
     rule.setNominalTimeout(true);
+    rule.setQualityControlMode(CompositingRule.QualityControlMode_ANALYZE);
     
-    expect(jdbc.update("update beast_composite_rules set area=?, interval=?, timeout=?, byscan=?, selection_method=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, qitotal_field=?, quantity=?, nominal_timeout=? where rule_id=?",
-        new Object[]{"seang", 12, 20, true, CompositingRule.SelectionMethod_HEIGHT_ABOVE_SEALEVEL, CompositingRule.PPI, "0.5", true, 10.0, 5.0, true, true, "se.baltrad.something", "NOOP", true, 13}))
+    expect(jdbc.update("update beast_composite_rules set area=?, interval=?, timeout=?, byscan=?, selection_method=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, qitotal_field=?, quantity=?, nominal_timeout=?, qc_mode=? where rule_id=?",
+        new Object[]{"seang", 12, 20, true, CompositingRule.SelectionMethod_HEIGHT_ABOVE_SEALEVEL, CompositingRule.PPI, "0.5", true, 10.0, 5.0, true, true, "se.baltrad.something", "NOOP", true, CompositingRule.QualityControlMode_ANALYZE, 13}))
         .andReturn(0);
     
     methods.storeSources(13, sources);
@@ -376,6 +379,7 @@ public class CompositingRuleManagerTest extends EasyMockSupport {
     expect(rs.getString("qitotal_field")).andReturn("se.baltrad.something");
     expect(rs.getString("quantity")).andReturn("VRAD");
     expect(rs.getBoolean("nominal_timeout")).andReturn(true);
+    expect(rs.getInt("qc_mode")).andReturn(1);
 
     expect(method.getSources(10)).andReturn(sources);
     expect(method.getDetectors(10)).andReturn(detectors);
@@ -416,6 +420,7 @@ public class CompositingRuleManagerTest extends EasyMockSupport {
     assertEquals("se.baltrad.something", result.getQitotalField());
     assertEquals("VRAD", result.getQuantity());
     assertEquals(true, result.isNominalTimeout());
+    assertEquals(CompositingRule.QualityControlMode_ANALYZE, result.getQualityControlMode());
   }  
   
   @Test
index 687b09b..f4a3d4f 100644 (file)
@@ -571,17 +571,18 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(10, arguments.length);
+    assertEquals(11, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--quantity=DBZH", arguments[7]);
-    assertEquals("--algorithm_id=10", arguments[8]);
-    assertEquals("--merge=true", arguments[9]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--quantity=DBZH", arguments[8]);
+    assertEquals("--algorithm_id=10", arguments[9]);
+    assertEquals("--merge=true", arguments[10]);
   }
 
   @Test
@@ -622,7 +623,7 @@ public class CompositingRuleTest extends EasyMockSupport {
     
     classUnderTest.setSelectionMethod(CompositingRule.SelectionMethod_HEIGHT_ABOVE_SEALEVEL);
     classUnderTest.setDetectors(detectors);
-    
+    classUnderTest.setQualityControlMode(CompositingRule.QualityControlMode_ANALYZE);
     classUnderTest.setMethod(CompositingRule.PPI);
     classUnderTest.setProdpar("0.5");
     classUnderTest.setApplyGRA(true);
@@ -644,20 +645,21 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(13, arguments.length);
+    assertEquals(14, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--applygra=true", arguments[7]);
-    assertEquals("--zrA=100.0", arguments[8]);
-    assertEquals("--zrb=1.4", arguments[9]);
-    assertEquals("--quantity=DBZH", arguments[10]);
-    assertEquals("--algorithm_id=10", arguments[11]);
-    assertEquals("--merge=true", arguments[12]);
+    assertEquals("--qc-mode=ANALYZE", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--applygra=true", arguments[8]);
+    assertEquals("--zrA=100.0", arguments[9]);
+    assertEquals("--zrb=1.4", arguments[10]);
+    assertEquals("--quantity=DBZH", arguments[11]);
+    assertEquals("--algorithm_id=10", arguments[12]);
+    assertEquals("--merge=true", arguments[13]);
   }
 
   @Test
@@ -721,21 +723,22 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(14, arguments.length);
+    assertEquals(15, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--applygra=true", arguments[7]);
-    assertEquals("--zrA=100.0", arguments[8]);
-    assertEquals("--zrb=1.4", arguments[9]);
-    assertEquals("--ignore-malfunc=true", arguments[10]);
-    assertEquals("--quantity=DBZH", arguments[11]);
-    assertEquals("--algorithm_id=10", arguments[12]);
-    assertEquals("--merge=true", arguments[13]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--applygra=true", arguments[8]);
+    assertEquals("--zrA=100.0", arguments[9]);
+    assertEquals("--zrb=1.4", arguments[10]);
+    assertEquals("--ignore-malfunc=true", arguments[11]);
+    assertEquals("--quantity=DBZH", arguments[12]);
+    assertEquals("--algorithm_id=10", arguments[13]);
+    assertEquals("--merge=true", arguments[14]);
     
   }
 
@@ -801,22 +804,23 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(15, arguments.length);
+    assertEquals(16, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--applygra=true", arguments[7]);
-    assertEquals("--zrA=100.0", arguments[8]);
-    assertEquals("--zrb=1.4", arguments[9]);
-    assertEquals("--ignore-malfunc=true", arguments[10]);
-    assertEquals("--ctfilter=True", arguments[11]);
-    assertEquals("--quantity=DBZH", arguments[12]);
-    assertEquals("--algorithm_id=10", arguments[13]);
-    assertEquals("--merge=true", arguments[14]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--applygra=true", arguments[8]);
+    assertEquals("--zrA=100.0", arguments[9]);
+    assertEquals("--zrb=1.4", arguments[10]);
+    assertEquals("--ignore-malfunc=true", arguments[11]);
+    assertEquals("--ctfilter=True", arguments[12]);
+    assertEquals("--quantity=DBZH", arguments[13]);
+    assertEquals("--algorithm_id=10", arguments[14]);
+    assertEquals("--merge=true", arguments[15]);
   }
 
   @Test
@@ -882,23 +886,24 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(16, arguments.length);
+    assertEquals(17, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--applygra=true", arguments[7]);
-    assertEquals("--zrA=100.0", arguments[8]);
-    assertEquals("--zrb=1.4", arguments[9]);
-    assertEquals("--ignore-malfunc=true", arguments[10]);
-    assertEquals("--ctfilter=True", arguments[11]);
-    assertEquals("--qitotal_field=se.baltrad.some.field", arguments[12]);
-    assertEquals("--quantity=DBZH", arguments[13]);
-    assertEquals("--algorithm_id=10", arguments[14]);
-    assertEquals("--merge=true", arguments[15]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--applygra=true", arguments[8]);
+    assertEquals("--zrA=100.0", arguments[9]);
+    assertEquals("--zrb=1.4", arguments[10]);
+    assertEquals("--ignore-malfunc=true", arguments[11]);
+    assertEquals("--ctfilter=True", arguments[12]);
+    assertEquals("--qitotal_field=se.baltrad.some.field", arguments[13]);
+    assertEquals("--quantity=DBZH", arguments[14]);
+    assertEquals("--algorithm_id=10", arguments[15]);
+    assertEquals("--merge=true", arguments[16]);
   }  
 
   @Test
@@ -964,22 +969,23 @@ public class CompositingRuleTest extends EasyMockSupport {
     assertTrue(arrayContains(files, "uuid-2"));
     assertTrue(arrayContains(files, "uuid-3"));
     String[] arguments = msg.getArguments();
-    assertEquals(15, arguments.length);
+    assertEquals(16, arguments.length);
     assertEquals("--area=blt_composite", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--selection=HEIGHT_ABOVE_SEALEVEL", arguments[3]);
     assertEquals("--anomaly-qc=ropo,sigge,nisse", arguments[4]);
-    assertEquals("--method=ppi", arguments[5]);
-    assertEquals("--prodpar=0.5", arguments[6]);
-    assertEquals("--applygra=true", arguments[7]);
-    assertEquals("--zrA=100.0", arguments[8]);
-    assertEquals("--zrb=1.4", arguments[9]);
-    assertEquals("--ignore-malfunc=true", arguments[10]);
-    assertEquals("--ctfilter=True", arguments[11]);
-    assertEquals("--quantity=DBZH", arguments[12]);
-    assertEquals("--algorithm_id=10", arguments[13]);
-    assertEquals("--merge=true", arguments[14]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[5]);
+    assertEquals("--method=ppi", arguments[6]);
+    assertEquals("--prodpar=0.5", arguments[7]);
+    assertEquals("--applygra=true", arguments[8]);
+    assertEquals("--zrA=100.0", arguments[9]);
+    assertEquals("--zrb=1.4", arguments[10]);
+    assertEquals("--ignore-malfunc=true", arguments[11]);
+    assertEquals("--ctfilter=True", arguments[12]);
+    assertEquals("--quantity=DBZH", arguments[13]);
+    assertEquals("--algorithm_id=10", arguments[14]);
+    assertEquals("--merge=true", arguments[15]);
   }
   
   @Test
index c48cef5..5f6a743 100644 (file)
@@ -115,6 +115,7 @@ public class Site2DRuleManagerTest extends EasyMockSupport {
     rule.setArea("nisse");
     rule.setCtFilter(false);
     rule.setDetectors(detectors);
+    rule.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE);
     rule.setIgnoreMalfunc(true);
     rule.setInterval(15);
     rule.setMethod(Site2DRule.CAPPI);
@@ -130,8 +131,8 @@ public class Site2DRuleManagerTest extends EasyMockSupport {
     classUnderTest.setFilterManager(filterManager);
 
     expect(template.update("INSERT INTO beast_site2d_rules " +
-      "(rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale) " +
-      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ruleId, "nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0)).andReturn(0);
+      "(rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale, qc_mode) " +
+      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ruleId, "nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0, 1)).andReturn(0);
     filterManager.deleteFilters(ruleId);
     
     methods.storeSources(ruleId, sources);
@@ -154,6 +155,7 @@ public class Site2DRuleManagerTest extends EasyMockSupport {
     rule.setArea("nisse");
     rule.setCtFilter(false);
     rule.setDetectors(detectors);
+    rule.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE);
     rule.setIgnoreMalfunc(true);
     rule.setInterval(15);
     rule.setMethod(Site2DRule.CAPPI);
@@ -167,8 +169,8 @@ public class Site2DRuleManagerTest extends EasyMockSupport {
     rule.setYscale(1000.0);
 
     expect(template.update("INSERT INTO beast_site2d_rules " +
-      "(rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale) " +
-      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", 11, "nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0)).andThrow(new DataAccessException("X"){
+      "(rule_id, area, interval, byscan, method, prodpar, applygra, ZR_A, ZR_b, ignore_malfunc, ctfilter, pcsid, xscale, yscale, qc_mode) " +
+      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", 11, "nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0, 1)).andThrow(new DataAccessException("X"){
         private static final long serialVersionUID = 1L;});
     
     replayAll();
@@ -204,12 +206,12 @@ public class Site2DRuleManagerTest extends EasyMockSupport {
     rule.setPcsid("apcs");
     rule.setXscale(3000.0);
     rule.setYscale(1000.0);
-    
+    rule.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE);
     classUnderTest.setFilterManager(filterManager);
 
     expect(template.update("UPDATE beast_site2d_rules" +
-      " SET area=?, interval=?, byscan=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, pcsid=?, xscale=?, yscale=?" +
-      " WHERE rule_id=?", new Object[]{"nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0, ruleId})).andReturn(1);
+      " SET area=?, interval=?, byscan=?, method=?, prodpar=?, applygra=?, ZR_A=?, ZR_b=?, ignore_malfunc=?, ctfilter=?, pcsid=?, xscale=?, yscale=?, qc_mode=?" +
+      " WHERE rule_id=?", new Object[]{"nisse", 15, true, "cappi", "10,10", true, 1.1, 0.1, true, false, "apcs", 3000.0, 1000.0, 1, ruleId})).andReturn(1);
     filterManager.deleteFilters(ruleId);
     
     methods.storeSources(ruleId, sources);
index d659d41..c923643 100644 (file)
@@ -101,7 +101,7 @@ public class Site2DRuleTest extends EasyMockSupport {
     classUnderTest.setApplyGRA(true);
     classUnderTest.setDetectors(detectors);
     classUnderTest.setRuleId(10);
-    
+    classUnderTest.setQualityControlMode(Site2DRule.QualityControlMode_ANALYZE);
     expect(msg.getFileEntry()).andReturn(fe).anyTimes();
     expect(fe.getMetadata()).andReturn(md).anyTimes();
     expect(md.getWhatObject()).andReturn("PVOL");
@@ -119,20 +119,21 @@ public class Site2DRuleTest extends EasyMockSupport {
     assertNotNull(result);
     assertEquals(1, result.getFiles().length);
     assertEquals(ruid.toString(), result.getFiles()[0]);
-    assertEquals(13, result.getArguments().length);
+    assertEquals(14, result.getArguments().length);
     assertEquals("--area=gnom_area", result.getArguments()[0]);
     assertEquals("--anomaly-qc=piff,puff", result.getArguments()[1]);
-    assertEquals("--method=pcappi", result.getArguments()[2]);
-    assertEquals("--prodpar=1000.0", result.getArguments()[3]);
-    assertEquals("--applygra=true", result.getArguments()[4]);
-    assertEquals("--zrA=200.0", result.getArguments()[5]);
-    assertEquals("--zrb=1.6", result.getArguments()[6]);
-    assertEquals("--pcsid=gmaps", result.getArguments()[7]);
-    assertEquals("--xscale=2000.0", result.getArguments()[8]);
-    assertEquals("--yscale=2000.0", result.getArguments()[9]);
-    assertEquals("--date=20150203", result.getArguments()[10]);
-    assertEquals("--time=111500", result.getArguments()[11]);
-    assertEquals("--algorithm_id=10", result.getArguments()[12]);
+    assertEquals("--qc-mode=ANALYZE", result.getArguments()[2]);
+    assertEquals("--method=pcappi", result.getArguments()[3]);
+    assertEquals("--prodpar=1000.0", result.getArguments()[4]);
+    assertEquals("--applygra=true", result.getArguments()[5]);
+    assertEquals("--zrA=200.0", result.getArguments()[6]);
+    assertEquals("--zrb=1.6", result.getArguments()[7]);
+    assertEquals("--pcsid=gmaps", result.getArguments()[8]);
+    assertEquals("--xscale=2000.0", result.getArguments()[9]);
+    assertEquals("--yscale=2000.0", result.getArguments()[10]);
+    assertEquals("--date=20150203", result.getArguments()[11]);
+    assertEquals("--time=111500", result.getArguments()[12]);
+    assertEquals("--algorithm_id=10", result.getArguments()[13]);
   }
 
   @Test
@@ -174,20 +175,21 @@ public class Site2DRuleTest extends EasyMockSupport {
     assertNotNull(result);
     assertEquals(1, result.getFiles().length);
     assertEquals(ruid.toString(), result.getFiles()[0]);
-    assertEquals(13, result.getArguments().length);
+    assertEquals(14, result.getArguments().length);
     assertEquals("--area=gnom_area", result.getArguments()[0]);
     assertEquals("--anomaly-qc=piff,puff", result.getArguments()[1]);
-    assertEquals("--method=pcappi", result.getArguments()[2]);
-    assertEquals("--prodpar=1000.0", result.getArguments()[3]);
-    assertEquals("--applygra=true", result.getArguments()[4]);
-    assertEquals("--zrA=200.0", result.getArguments()[5]);
-    assertEquals("--zrb=1.6", result.getArguments()[6]);
-    assertEquals("--pcsid=gmaps", result.getArguments()[7]);
-    assertEquals("--xscale=2000.0", result.getArguments()[8]);
-    assertEquals("--yscale=2000.0", result.getArguments()[9]);
-    assertEquals("--date=20150203", result.getArguments()[10]);
-    assertEquals("--time=111500", result.getArguments()[11]);
-    assertEquals("--algorithm_id=10", result.getArguments()[12]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", result.getArguments()[2]);
+    assertEquals("--method=pcappi", result.getArguments()[3]);
+    assertEquals("--prodpar=1000.0", result.getArguments()[4]);
+    assertEquals("--applygra=true", result.getArguments()[5]);
+    assertEquals("--zrA=200.0", result.getArguments()[6]);
+    assertEquals("--zrb=1.6", result.getArguments()[7]);
+    assertEquals("--pcsid=gmaps", result.getArguments()[8]);
+    assertEquals("--xscale=2000.0", result.getArguments()[9]);
+    assertEquals("--yscale=2000.0", result.getArguments()[10]);
+    assertEquals("--date=20150203", result.getArguments()[11]);
+    assertEquals("--time=111500", result.getArguments()[12]);
+    assertEquals("--algorithm_id=10", result.getArguments()[13]);
   }
 
   @Test
@@ -335,17 +337,18 @@ public class Site2DRuleTest extends EasyMockSupport {
     assertNotNull(result);
     assertEquals(1, result.getFiles().length);
     assertEquals(ruid.toString(), result.getFiles()[0]);
-    assertEquals(10, result.getArguments().length);
+    assertEquals(11, result.getArguments().length);
     assertEquals("--area=gnom_area", result.getArguments()[0]);
     assertEquals("--anomaly-qc=piff,puff", result.getArguments()[1]);
-    assertEquals("--method=pcappi", result.getArguments()[2]);
-    assertEquals("--prodpar=1000.0", result.getArguments()[3]);
-    assertEquals("--applygra=true", result.getArguments()[4]);
-    assertEquals("--zrA=200.0", result.getArguments()[5]);
-    assertEquals("--zrb=1.6", result.getArguments()[6]);
-    assertEquals("--date=20150203", result.getArguments()[7]);
-    assertEquals("--time=111500", result.getArguments()[8]);
-    assertEquals("--algorithm_id=10", result.getArguments()[9]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", result.getArguments()[2]);
+    assertEquals("--method=pcappi", result.getArguments()[3]);
+    assertEquals("--prodpar=1000.0", result.getArguments()[4]);
+    assertEquals("--applygra=true", result.getArguments()[5]);
+    assertEquals("--zrA=200.0", result.getArguments()[6]);
+    assertEquals("--zrb=1.6", result.getArguments()[7]);
+    assertEquals("--date=20150203", result.getArguments()[8]);
+    assertEquals("--time=111500", result.getArguments()[9]);
+    assertEquals("--algorithm_id=10", result.getArguments()[10]);
   }
 
   @Test
index 3403dcf..f3e2e24 100644 (file)
@@ -150,9 +150,10 @@ public class VolumeRuleManagerTest extends EasyMockSupport {
     rule.setNominalTimeout(true);
     rule.setSources(sources);
     rule.setDetectors(detectors);
+    rule.setQualityControlMode(VolumeRule.QualityControlMode_ANALYZE);
     
     expect(jdbc.update("insert into beast_volume_rules (rule_id, interval, timeout, nominal_timeout, " +
-        "ascending, minelev, maxelev, elangles) values (?,?,?,?,?,?,?,?)", new Object[]{13, 6, 20, true, false, 2.0, 10.0, "1.0,2.0,3.0"})).andReturn(0);
+        "ascending, minelev, maxelev, elangles, qc_mode) values (?,?,?,?,?,?,?,?,?)", new Object[]{13, 6, 20, true, false, 2.0, 10.0, "1.0,2.0,3.0", 1})).andReturn(0);
 
     methods.storeSources(13, sources);
     methods.storeDetectors(13, detectors);
@@ -194,9 +195,9 @@ public class VolumeRuleManagerTest extends EasyMockSupport {
     rule.setNominalTimeout(true);
     rule.setSources(sources);
     rule.setDetectors(detectors);
-    
+    rule.setQualityControlMode(VolumeRule.QualityControlMode_ANALYZE);
     expect(jdbc.update("update beast_volume_rules set interval=?, timeout=?, nominal_timeout=?, " +
-        "ascending=?, minelev=?, maxelev=?, elangles=? where rule_id=?", new Object[]{6, 20, true, false, 2.0, 10.0, "1.0,2.0,3.0", 13}))
+        "ascending=?, minelev=?, maxelev=?, elangles=?, qc_mode=? where rule_id=?", new Object[]{6, 20, true, false, 2.0, 10.0, "1.0,2.0,3.0", 1, 13}))
         .andReturn(1);
     methods.storeSources(13, sources);
     methods.storeDetectors(13, detectors);
@@ -302,6 +303,7 @@ public class VolumeRuleManagerTest extends EasyMockSupport {
     expect(rs.getDouble("minelev")).andReturn(2.0);
     expect(rs.getDouble("maxelev")).andReturn(10.0);
     expect(rs.getString("elangles")).andReturn("1.0,2.0,3.0");
+    expect(rs.getInt("qc_mode")).andReturn(1);
     expect(method.getSources(10)).andReturn(sources);
     expect(method.getDetectors(10)).andReturn(detectors);
     
@@ -332,6 +334,7 @@ public class VolumeRuleManagerTest extends EasyMockSupport {
     assertEquals(2.0, result.getElevationMin(), 4);
     assertEquals(10.0, result.getElevationMax(), 4);
     assertEquals("1.0,2.0,3.0", result.getElevationAngles());
+    assertEquals(VolumeRule.QualityControlMode_ANALYZE, result.getQualityControlMode());
     assertSame(sources, result.getSources());
   }
   
index 9fab2f9..d1dbb65 100644 (file)
@@ -468,13 +468,14 @@ public class VolumeRuleTest extends EasyMockSupport {
     assertEquals(files[1], "uuid-2");
     assertEquals(files[2], "uuid-3");
     String[] arguments = result.getArguments();
-    assertEquals(6, arguments.length);
+    assertEquals(7, arguments.length);
     assertEquals("--source=searl", arguments[0]);
     assertEquals("--date=20100201", arguments[1]);
     assertEquals("--time=010000", arguments[2]);
     assertEquals("--anomaly-qc=ropo,nisse", arguments[3]);
-    assertEquals("--algorithm_id=10-searl",arguments[4]);
-    assertEquals("--merge=true", arguments[5]);
+    assertEquals("--qc-mode=ANALYZE_AND_APPLY", arguments[4]);
+    assertEquals("--algorithm_id=10-searl",arguments[5]);
+    assertEquals("--merge=true", arguments[6]);
   }
 
   @Test
@@ -516,6 +517,52 @@ public class VolumeRuleTest extends EasyMockSupport {
   }
   
   @Test
+  public void testCreateMessage_withAnalyse() throws Exception {
+    Date date = new Date(2010, 2, 1);
+    Time time = new Time(1, 0, 0);
+    DateTime nt = new DateTime(date, time);
+    
+    List<CatalogEntry> entries = new ArrayList<CatalogEntry>();
+    entries.add(createCatalogEntry("searl"));
+    entries.add(createCatalogEntry("searl"));
+    entries.add(createCatalogEntry("searl"));
+
+    List<String> fileEntries = new ArrayList<String>();
+    fileEntries.add("uuid-1");
+    fileEntries.add("uuid-2");
+    fileEntries.add("uuid-3");
+
+    List<String> detectors = new ArrayList<String>();
+    detectors.add("ropo");
+    detectors.add("nisse");
+    
+    classUnderTest.setDetectors(detectors);
+    classUnderTest.setQualityControlMode(VolumeRule.QualityControlMode_ANALYZE);
+    expect(utilities.getUuidStringsFromEntries(entries)).andReturn(fileEntries);
+
+    replayAll();
+
+    BltGenerateMessage result = (BltGenerateMessage)classUnderTest.createMessage(nt, entries);
+
+    verifyAll();
+    assertEquals("eu.baltrad.beast.GenerateVolume", result.getAlgorithm());
+    String[] files = result.getFiles();
+    assertEquals(3, files.length);
+    assertEquals(files[0], "uuid-1");
+    assertEquals(files[1], "uuid-2");
+    assertEquals(files[2], "uuid-3");
+    String[] arguments = result.getArguments();
+    assertEquals(7, arguments.length);
+    assertEquals("--source=searl", arguments[0]);
+    assertEquals("--date=20100201", arguments[1]);
+    assertEquals("--time=010000", arguments[2]);
+    assertEquals("--anomaly-qc=ropo,nisse", arguments[3]);
+    assertEquals("--qc-mode=ANALYZE", arguments[4]);
+    assertEquals("--algorithm_id=10-searl",arguments[5]);
+    assertEquals("--merge=true", arguments[6]);
+  }
+  
+  @Test
   public void testCreateMessage_noEntries() throws Exception {
     DateTime nt = new DateTime(2010, 2, 1, 1, 0, 0);
     List<CatalogEntry> entries = new ArrayList<CatalogEntry>();