[Lada-commits] [PATCH 3 of 5] Use Intervall class for daily Probe objects
Wald Commits
scm-commit at wald.intevation.org
Fri Sep 30 18:42:32 CEST 2016
# HG changeset patch
# User Tom Gottfried <tom at intevation.de>
# Date 1475250091 -7200
# Node ID b5314ea024c6ab1e60636fac0042d210bb59f045
# Parent 90bc64e74e4ae9024b810995ddd332fe644bd1e4
Use Intervall class for daily Probe objects.
diff -r 90bc64e74e4a -r b5314ea024c6 src/main/java/de/intevation/lada/factory/ProbeFactory.java
--- a/src/main/java/de/intevation/lada/factory/ProbeFactory.java Fri Sep 30 17:38:04 2016 +0200
+++ b/src/main/java/de/intevation/lada/factory/ProbeFactory.java Fri Sep 30 17:41:31 2016 +0200
@@ -48,12 +48,15 @@
private static Hashtable<String, int[]> fieldsTable;
public ProbeFactory() {
+ int[] T = { Calendar.DAY_OF_YEAR, Calendar.DAY_OF_YEAR, 1 };
+
int[] M = { Calendar.MONTH, Calendar.DAY_OF_MONTH, 1 };
int[] Q = { Calendar.MONTH, Calendar.DAY_OF_MONTH, 3 };
int[] H = { Calendar.MONTH, Calendar.DAY_OF_MONTH, 6 };
this.fieldsTable = new Hashtable<String, int[]>();
+ this.fieldsTable.put("T", T);
this.fieldsTable.put("M", M);
this.fieldsTable.put("Q", Q);
this.fieldsTable.put("H", H);
@@ -110,35 +113,36 @@
* @return the adjusted Calendar object.
*/
private Calendar adjustSubIntField(Calendar cal, int teil) {
- int intField = cal.get(intervallField);
- cal.set(
- intervallField,
- intField - intField % intervallFactor
- );
- cal.set(subIntField, offset + Math.min(teil, getDuration()));
+ int intValue = cal.get(intervallField);
+ intValue = intValue - intValue % intervallFactor;
+ cal.set(intervallField, intValue);
+
+ int subIntValue = intervallField == subIntField ? intValue : 0
+ + offset + Math.min(teil, getDuration());
+ cal.set(subIntField, subIntValue);
+
return cal;
}
/**
- * Get sum of actual maxima for given field from actual field value
- * for the next factor values of iterField.
- *
- * @param calendar Time to start from
- *
- * @return the sum of maxima for the field values specified with
- * field and factor.
+ * @return sum of actual maxima for subIntField from beginning of
+ * actual intervall for the next intervallFactor values intervallField
+ * or just intervallFactor, if subIntField == intervallField.
*/
private int getDuration() {
+ if (subIntField == intervallField) {
+ return intervallFactor;
+ }
logger.debug("## calculate maximum ##");
int duration = 0;
Calendar tmp = (Calendar)from.clone();
/* reset to beginning of intervall, e.g. first day of quarter
* to compensate possible overflow if
* teilVon > maximum of intervallField: */
- int fromIntField = from.get(intervallField);
+ int intValue = from.get(intervallField);
tmp.set(
intervallField,
- fromIntField - fromIntField % intervallFactor
+ intValue - intValue % intervallFactor
);
tmp.set(subIntField, tmp.getActualMinimum(subIntField));
logger.debug(tmp);
@@ -245,11 +249,8 @@
end.setTime(interval[1]);
int endDay = end.get(Calendar.DAY_OF_YEAR);
- // If fixed interval (T, W, W2, W4)
- if ("T".equals(messprogramm.getProbenintervall())) {
- proben.addAll(generate(messprogramm, start, end, 1));
- }
- else if ("W".equals(messprogramm.getProbenintervall())) {
+ // If fixed interval (W, W2, W4)
+ if ("W".equals(messprogramm.getProbenintervall())) {
Calendar realStart = getMonday(start);
proben.addAll(generate(messprogramm, realStart, end, 7));
}
More information about the Lada-commits
mailing list