annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java @ 7498:6bfa19119040

issue1658: Have SedimentLoadFactory deliver unit name for given id.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 01 Nov 2013 16:23:32 +0100
parents 7f438ee10be6
children b468dc65154a
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5789
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import gnu.trove.TDoubleArrayList;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import java.util.Calendar;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import java.util.Date;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import java.util.List;
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
16 import java.util.TreeMap;
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 import net.sf.ehcache.Cache;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 import net.sf.ehcache.Element;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 import org.apache.log4j.Logger;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5789
diff changeset
22 import org.dive4elements.river.artifacts.cache.CacheFactory;
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
23 import org.dive4elements.river.artifacts.model.Range;
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
24 import org.dive4elements.river.artifacts.model.RiverFactory;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5789
diff changeset
25 import org.dive4elements.river.artifacts.model.StaticSedimentLoadCacheKey;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5789
diff changeset
26 import org.dive4elements.river.backend.SessionHolder;
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
27 import org.dive4elements.river.model.MeasurementStation;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
28 import org.hibernate.SQLQuery;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
29 import org.hibernate.Session;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
30 import org.hibernate.type.StandardBasicTypes;
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
32
5662
7e3cde8b564c Cosmetics, docs, vimlines.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
33 /** Pull Sediment Loads out of db. */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 public class SedimentLoadFactory
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 /** Private logger to use here. */
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 private static Logger log = Logger.getLogger(SedimentLoadFactory.class);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
39 // Cache name/keys
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 public static final String LOADS_CACHE_NAME = "sedimentloads";
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 public static final String LOAD_DATA_CACHE_NAME = "sedimentload-data";
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
43 /** Query to get description and start year of single type
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
44 * sediment_yields. */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 public static final String SQL_SELECT_SINGLES =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 "SELECT DISTINCT " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 " sy.description AS description, " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 " ti.start_time AS year " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 " FROM sediment_yield sy " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 " JOIN rivers r ON sy.river_id = r.id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 " WHERE r.name = :name " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 " AND ti.stop_time IS NULL " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 " AND syv.station BETWEEN :startKm AND :endKm";
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56
7305
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
57 /** Query to get fraction name of single sediment_yield. */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
58 public static final String SQL_SELECT_SINGLE_TIMES_BY_ID =
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
59 "SELECT DISTINCT " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
60 " ti.start_time AS starttime, " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
61 " ti.stop_time AS stoptime " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
62 " FROM sediment_yield sy " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
63 " JOIN time_intervals ti ON ti.id = sy.time_interval_id " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
64 " WHERE sy.id = :id ";
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
65
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
66 /** Query to get fraction name of single sediment_yield. */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
67 public static final String SQL_SELECT_SINGLE_FRACTION_BY_ID =
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
68 "SELECT DISTINCT " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
69 " gf.name AS fraction " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
70 " FROM sediment_yield sy " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
71 " JOIN grain_fraction gf ON gf.id = grain_fraction_id " +
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
72 " WHERE sy.id = :id ";
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
73
7498
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
74 /** Query to get unit name of single sediment_yield. */
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
75 public static final String SQL_SELECT_SINGLE_UNIT_BY_ID =
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
76 "SELECT DISTINCT " +
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
77 " u.name AS unit " +
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
78 " FROM sediment_yield sy " +
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
79 " JOIN units u ON u.id = unit_id " +
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
80 " WHERE sy.id = :id ";
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
81
7185
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
82 /** Query to get description of single sediment_yield. */
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
83 public static final String SQL_SELECT_SINGLE_BY_ID =
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
84 "SELECT DISTINCT " +
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
85 " sy.description AS description " +
7304
615795d54831 cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
86 " FROM sediment_yield sy " +
7185
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
87 " WHERE sy.id = :id ";
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
88
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
89 /** Query to get description, name and time range for official
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
90 * epoch-type sediment yields. */
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
91 public static final String SQL_SELECT_OFFEPOCHS =
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
92 "SELECT DISTINCT " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
93 " ti.start_time AS startYear, " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
94 " ti.stop_time AS end " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
95 " FROM sediment_yield sy " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
96 " JOIN rivers r ON sy.river_id = r.id " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
97 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
98 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
99 " WHERE r.name = :name " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
100 " AND ti.stop_time IS NOT NULL " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
101 " AND syv.station BETWEEN :startKm AND :endKm " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
102 " AND sy.kind = 1";
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
103
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
104 /** Query to get description, name and time range for epoch-type
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
105 * sediment yields. */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
106 public static final String SQL_SELECT_EPOCHS =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
107 "SELECT DISTINCT " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
108 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
109 " ti.start_time AS startYear, " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
110 " ti.stop_time AS end, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
111 " u.name AS unit" +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
112 " FROM sediment_yield sy " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
113 " JOIN rivers r ON sy.river_id = r.id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
114 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
115 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
116 " JOIN units u ON u.id = sy.unit_id " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
117 " WHERE r.name = :name " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
118 " AND ti.stop_time IS NOT NULL " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
119 " AND syv.station BETWEEN :startKm AND :endKm";
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
120
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
121 public static final String SQL_SELECT_SINGLES_DATA_BY_ID =
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
122 "SELECT" +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
123 " sy.description AS description, " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
124 " syv.value AS load, " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
125 " syv.station AS km, " +
7184
73d7886fa59e SedimentLoadFactory: Fix query, added comment about correctness of
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7181
diff changeset
126 " u.name AS unit, " +
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
127 " gf.name AS fraction " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
128 " FROM sediment_yield sy " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
129 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
130 " JOIN units u ON u.id = sy.unit_id" +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
131 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
132 " WHERE sy.id = :id" +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
133 " ORDER BY syv.station";
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
134
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
135 public static final String SQL_SELECT_SINGLES_DATA =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
136 "SELECT" +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
137 " sy.description AS description, " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
138 " ti.start_time AS year, " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
139 " syv.value AS load, " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
140 " syv.station AS km, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
141 " u.name AS unit " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
142 " FROM sediment_yield sy " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
143 " JOIN rivers r ON sy.river_id = r.id " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
144 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
145 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
146 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
147 " JOIN units u ON u.id = sy.unit_id" +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
148 " WHERE r.name = :name " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
149 " AND ti.start_time BETWEEN :begin AND :end " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
150 " AND ti.stop_time IS NULL " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
151 " AND gf.name = :grain " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
152 " AND syv.station BETWEEN :startKm AND :endKm " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
153 " ORDER BY syv.station";
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
154
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
155 public static final String SQL_SELECT_UNKNOWN_DATA =
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
156 "SELECT" +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
157 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
158 " ti.start_time AS startYear, " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
159 " ti.stop_time AS end, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
160 " syv.value AS load, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
161 " syv.station AS km, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
162 " u.name AS unit " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
163 " FROM sediment_yield sy " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
164 " JOIN rivers r ON sy.river_id = r.id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
165 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
166 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
167 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
168 " JOIN units u ON u.id = sy.unit_id" +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
169 " WHERE r.name = :name " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
170 " AND sy.description = :descr " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
171 " AND gf.name = 'unknown' " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
172 " ORDER BY syv.station";
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
173
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
174 public static final String SQL_SELECT_UNKNOWN =
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
175 "SELECT DISTINCT " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
176 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
177 " ti.start_time AS startYear, " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
178 " ti.stop_time AS end " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
179 "FROM sediment_yield sy " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
180 " JOIN rivers r ON sy.river_id = r.id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
181 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
182 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
183 " JOIN units u ON sy.unit_id = u.id " +
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
184 "WHERE r.name = :river " +
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
185 " AND gf.name = 'unknown' " +
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
186 " AND sy.kind = :type " +
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
187 " AND u.name = :unit";
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
188
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
189 public static final String SQL_SELECT_EPOCHS_DATA =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
190 "SELECT" +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
191 " sy.description AS description, " +
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
192 " ti.start_time AS startYear, " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
193 " syv.value AS load, " +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
194 " syv.station AS km," +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
195 " ti.stop_time AS endYear, " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
196 " u.name AS unit" +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
197 " FROM sediment_yield sy " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
198 " JOIN rivers r ON sy.river_id = r.id " +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
199 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
200 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
201 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
202 " JOIN units u ON u.id = sy.unit_id " +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
203 " WHERE r.name = :name " +
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
204 " AND ti.start_time BETWEEN :sbegin AND :send " +
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
205 " AND ti.stop_time BETWEEN :ebegin AND :eend " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
206 " AND gf.name = :grain " +
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
207 " AND syv.station BETWEEN :startKm AND :endKm " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
208 " ORDER BY syv.station";
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
209
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
210 private SedimentLoadFactory() {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
211 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
212
4434
60c728e557f4 Backed out changeset e8a4d2fd25cc
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4428
diff changeset
213 /**
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
214 * @param river name of river.
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
215 * @param type
4434
60c728e557f4 Backed out changeset e8a4d2fd25cc
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4428
diff changeset
216 */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
217 public static SedimentLoad[] getLoads(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
218 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
219 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
220 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
221 double endKm
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
222 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
223 log.debug("SedimentLoadFactory.getLoads");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
224 Cache cache = CacheFactory.getCache(LOADS_CACHE_NAME);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
225
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 if (cache == null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
227 log.debug("Cache not configured.");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
228 return getSedimentLoadsUncached(river, type, startKm, endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
229 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
230
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
231 StaticSedimentLoadCacheKey key =
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
232 new StaticSedimentLoadCacheKey(river, startKm, endKm, 0, 0);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
233
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
234 Element element = cache.get(key);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
235
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
236 if (element != null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
237 log.debug("SedimentLoad found in cache");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
238 return (SedimentLoad[])element.getValue();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
239 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
240
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
241 SedimentLoad[] values =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
242 getSedimentLoadsUncached(river, type, startKm, endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
243
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
244 if (values != null && key != null) {
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
245 log.debug("Store static sediment load values in cache.");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
246 element = new Element(key, values);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
247 cache.put(element);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
248 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
249 return values;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
250 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
251
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
252 /**
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
253 * Get a sedimentLoad filled with data from db (or cache).
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
254 * @param type "epoch", "off_epoch" or "single"
7028
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6984
diff changeset
255 * @return A Sedimentload filled with values from db or cache.
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
256 */
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4736
diff changeset
257 public static SedimentLoad getLoadWithData(
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
258 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
259 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
261 double endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
262 int syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
263 int eyear
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
264 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
265 log.debug("SedimentLoadFactory.getLoadWithData");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
266 Cache cache = CacheFactory.getCache(LOAD_DATA_CACHE_NAME);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
267
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
268 if (cache == null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
269 log.debug("Cache not configured.");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
270 return getSedimentLoadWithDataUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
271 river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
272 type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
273 startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
274 endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
275 syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
276 eyear);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
277 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
278
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
279 StaticSedimentLoadCacheKey key =
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
280 new StaticSedimentLoadCacheKey(river, startKm, endKm, syear, eyear);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
281
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
282 Element element = cache.get(key);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
283
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
284 if (element != null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
285 log.debug("SedimentLoad found in cache");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
286 return (SedimentLoad)element.getValue();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
287 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
288
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
289 SedimentLoad values = getSedimentLoadWithDataUncached(
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
290 river,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
291 type,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
292 startKm,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
293 endKm,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
294 syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
295 eyear);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
297 if (values != null && key != null) {
7053
3a55f49be155 Corrected debug output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7028
diff changeset
298 log.debug("Store sediment loads in cache.");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
299 element = new Element(key, values);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
300 cache.put(element);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
301 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
302 return values;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
303 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
304
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
305 /**
7305
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
306 * Get sediment yields time definition.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
307 * @param id the sediment yield by id.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
308 * @return sediment yields fraction name.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
309 */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
310 public static Date[] getSedimentYieldTimes(int id) {
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
311 log.debug("SedimentLoadFactory.getSedimentYieldTimes");
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
312
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
313 Session session = SessionHolder.HOLDER.get();
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
314 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_TIMES_BY_ID)
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
315 .addScalar("starttime", StandardBasicTypes.DATE)
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
316 .addScalar("stoptime", StandardBasicTypes.DATE);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
317 sqlQuery.setDouble("id", id);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
318
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
319 List<Object[]> results = sqlQuery.list();
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
320 Object[] row = results.get(0);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
321
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
322 return new Date[] {(Date)row[0], (Date) row[1]};
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
323 }
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
324
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
325 /**
7498
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
326 * Get sediment load unit name.
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
327 * @param id the sediment yield by id.
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
328 * @return sediment yields unit name.
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
329 */
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
330 public static String getSedimentYieldUnitName(int id) {
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
331 log.debug("SedimentLoadFactory.getSedimentYieldUnitName");
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
332
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
333 Session session = SessionHolder.HOLDER.get();
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
334 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_UNIT_BY_ID)
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
335 .addScalar("unit", StandardBasicTypes.STRING);
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
336 sqlQuery.setDouble("id", id);
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
337
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
338 List<Object> results = sqlQuery.list();
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
339
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
340 return (String) results.get(0);
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
341 }
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
342
6bfa19119040 issue1658: Have SedimentLoadFactory deliver unit name for given id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7430
diff changeset
343 /**
7305
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
344 * Get sediment load fraction name.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
345 * @param id the sediment yield by id.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
346 * @return sediment yields fraction name.
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
347 */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
348 public static String getSedimentYieldFractionName(int id) {
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
349 log.debug("SedimentLoadFactory.getSedimentYieldFractionName");
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
350
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
351 Session session = SessionHolder.HOLDER.get();
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
352 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_FRACTION_BY_ID)
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
353 .addScalar("fraction", StandardBasicTypes.STRING);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
354 sqlQuery.setDouble("id", id);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
355
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
356 List<Object> results = sqlQuery.list();
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
357
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
358 return (String) results.get(0);
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
359 }
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
360
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
361
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
362 /**
7185
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
363 * Get sediment load description.
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
364 * @param id the sediment yield by id.
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
365 * @return sediment yields description
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
366 */
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
367 public static String getSedimentYieldDescription(int id) {
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
368 log.debug("SedimentLoadFactory.getSedimentYieldDescription");
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
369
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
370 Session session = SessionHolder.HOLDER.get();
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
371 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_BY_ID)
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
372 .addScalar("description", StandardBasicTypes.STRING);
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
373 sqlQuery.setDouble("id", id);
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
374
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
375 List<Object> results = sqlQuery.list();
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
376
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
377 return (String) results.get(0);
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
378 }
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
379
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
380
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
381 /**
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
382 * Get sediment loads from db.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
383 * @param river the river
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
384 * @param type the sediment load type (year or epoch)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
385 * @return according sediment loads.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
386 */
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
387 public static SedimentLoad[] getSedimentLoadsUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
388 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
389 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
390 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
391 double endKm
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
392 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
393 log.debug("SedimentLoadFactory.getSedimentLoadsUncached");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
394
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
395 Session session = SessionHolder.HOLDER.get();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
396 SQLQuery sqlQuery = null;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
397
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
398 if (type.equals("single")) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
399 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
400 .addScalar("description", StandardBasicTypes.STRING)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
401 .addScalar("year", StandardBasicTypes.DATE);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
402 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
403 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
404 sqlQuery.setDouble("endKm", endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
405 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
406 SedimentLoad[] loads = new SedimentLoad[results.size()];
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
407 for (int i = 0, R = results.size(); i < R; i++) {
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
408 Object[] row = results.get(i);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
409 loads[i] = new SedimentLoad(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
410 (String) row[0],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
411 (Date) row[1],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
412 null,
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
413 false,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
414 "");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
415 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
416 return loads;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
417 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
418 else if (type.equals("epoch")) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
419 sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
420 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
421 .addScalar("startYear", StandardBasicTypes.DATE)
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
422 .addScalar("end", StandardBasicTypes.DATE);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
423 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
424 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
425 sqlQuery.setDouble("endKm", endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
426 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
427
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
428 SedimentLoad[] loads = new SedimentLoad[results.size()];
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
429 for (int i = 0, R = results.size(); i < R; i++) {
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
430 Object[] row = results.get(i);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
431 loads[i] = new SedimentLoad(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
432 (String) row[0],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
433 (Date) row[1],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
434 (Date) row[2],
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
435 true,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
436 "");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
437 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
438 return loads;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
439 }
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
440 else if (type.equals("off_epoch")) {
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
441 sqlQuery = session.createSQLQuery(SQL_SELECT_OFFEPOCHS)
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
442 .addScalar("startYear", StandardBasicTypes.DATE)
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
443 .addScalar("end", StandardBasicTypes.DATE);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
444 sqlQuery.setString("name", river);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
445 sqlQuery.setDouble("startKm", startKm);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
446 sqlQuery.setDouble("endKm", endKm);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
447 List<Object []> results = sqlQuery.list();
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
448
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
449 SedimentLoad[] loads = new SedimentLoad[results.size()];
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
450 for (int i = 0, R = results.size(); i < R; i++) {
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
451 Object[] row = results.get(i);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
452 loads[i] = new SedimentLoad(
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
453 ((Date) row[0]).toString() + (Date) row[1],
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
454 (Date) row[0],
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
455 (Date) row[1],
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
456 true,
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
457 "");
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
458 }
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
459 return loads;
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
460 }
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
461 else {
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
462 log.warn("getSedimentLoadsUncached does not understand type " + type);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
463 }
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
464 return new SedimentLoad[0];
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
465 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
466
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
467 /**
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
468 * Get a specific sediment load from db.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
469 *
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
470 * @param id the sediment yields id.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
471 *
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
472 * @return according sediment load.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
473 */
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
474 public static SedimentLoad getSedimentLoadWithDataUncached(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
475 String id,
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
476 String river
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
477 ) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
478 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached / id " + id);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
479 Session session = SessionHolder.HOLDER.get();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
480 SQLQuery sqlQuery = null;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
481
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
482 // Measurement stations: all, for float-stuff, for suspended stuff.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
483 // Because they need fast sorted access, use TreeMaps.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
484 // They map the starting validity range km to the station itself.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
485 List<MeasurementStation> allStations =
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
486 RiverFactory.getRiver(river).getMeasurementStations();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
487 TreeMap<Double,MeasurementStation> floatStations =
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
488 new TreeMap<Double, MeasurementStation>();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
489 TreeMap<Double,MeasurementStation> suspStations =
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
490 new TreeMap<Double, MeasurementStation>();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
491
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
492 // From all stations, sort into the two kinds, skip undefined ones.
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
493 for (MeasurementStation measurementStation: allStations) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
494 if (measurementStation.getMeasurementType() == null ||
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
495 measurementStation.getRange() == null) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
496 continue;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
497 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
498 if (measurementStation.getMeasurementType().equals("Schwebstoff")) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
499 suspStations.put(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
500 measurementStation.getRange().getA().doubleValue(),
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
501 measurementStation);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
502 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
503 else if (measurementStation.getMeasurementType().equals("Geschiebe")) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
504 floatStations.put(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
505 measurementStation.getRange().getA().doubleValue(),
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
506 measurementStation);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
507 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
508 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
509
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
510 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA_BY_ID)
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
511 .addScalar("description", StandardBasicTypes.STRING)
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
512 .addScalar("load", StandardBasicTypes.DOUBLE)
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
513 .addScalar("km", StandardBasicTypes.DOUBLE)
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
514 .addScalar("fraction", StandardBasicTypes.STRING)
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
515 .addScalar("unit", StandardBasicTypes.STRING);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
516 sqlQuery.setInteger("id", Integer.valueOf(id));
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
517
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
518 List<Object []> results = sqlQuery.list();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
519 SedimentLoad load = new SedimentLoad();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
520 if (results.isEmpty()) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
521 log.warn("Empty result for year calculation.");
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
522 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
523 else {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
524 Object[] row = results.get(0);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
525 load = new SedimentLoad(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
526 (String) row[0], //description
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
527 null,//(Date) row[1], //start
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
528 null, //end
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
529 false, //isEpoch
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
530 (String) row[4]); //unit
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
531
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
532 String fraction = (String) row[3];
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
533
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7185
diff changeset
534 TreeMap<Double,MeasurementStation> relevantStations =
7184
73d7886fa59e SedimentLoadFactory: Fix query, added comment about correctness of
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7181
diff changeset
535 fraction.equals("suspended_sediment") /* || TODO clarify: fraction.equals("susp_sand") */
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
536 ? suspStations
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
537 : floatStations;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
538
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
539 for (int i = 0, R = results.size(); i < R; i++) {
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
540 row = results.get(i);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
541 double km = (Double) row[2];
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
542 Range range = findMeasurementStationRange(relevantStations, km);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
543 if (range == null) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
544 log.warn("No measurement station for " + fraction + " km " + km);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
545 continue;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
546 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
547
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
548 double v = -1;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
549
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
550 if (row[1] != null) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
551 v = ((Double)row[1]).doubleValue();
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
552 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
553
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
554 setLoadFraction(load, km, v, range, fraction);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
555 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
556
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
557 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
558
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
559 return load;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
560 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
561
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
562 /**
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
563 * Get sediment loads from db.
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
564 *
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
565 * @param river the river
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
566 * @param type the sediment load type (year, epoch or off_epoch)
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
567 *
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
568 * @return according sediment loads.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
569 */
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
570 public static SedimentLoad getSedimentLoadWithDataUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
571 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
572 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
573 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
574 double endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
575 int syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
576 int eyear
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
577 ) {
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
578 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
579 Session session = SessionHolder.HOLDER.get();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
580 SQLQuery sqlQuery = null;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
581
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
582 // Measurement stations: all, for float-stuff, for suspended stuff.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
583 // Because they need fast sorted access, use TreeMaps.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
584 // They map the starting validity range km to the station itself.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
585 List<MeasurementStation> allStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
586 RiverFactory.getRiver(river).getMeasurementStations();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
587 TreeMap<Double,MeasurementStation> floatStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
588 new TreeMap<Double, MeasurementStation>();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
589 TreeMap<Double,MeasurementStation> suspStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
590 new TreeMap<Double, MeasurementStation>();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
591
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
592 // From all stations, sort into the two kinds, skip undefined ones.
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
593 for (MeasurementStation measurementStation: allStations) {
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
594 if (measurementStation.getMeasurementType() == null ||
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
595 measurementStation.getRange() == null) {
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
596 continue;
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
597 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
598 if (measurementStation.getMeasurementType().equals("Schwebstoff")) {
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
599 suspStations.put(
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
600 measurementStation.getRange().getA().doubleValue(),
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
601 measurementStation);
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
602 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
603 else if (measurementStation.getMeasurementType().equals("Geschiebe")) {
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
604 floatStations.put(
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
605 measurementStation.getRange().getA().doubleValue(),
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
606 measurementStation);
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
607 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
608 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
609
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
610 // Construct date constraint.
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
611 Calendar start = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
612 start.set(syear - 1, 11, 31);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
613 Calendar end = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
614 end.set(syear, 11, 30);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
615
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
616 if (type.equals("year") || type.equals("epoch")) {
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
617 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
618 .addScalar("description", StandardBasicTypes.STRING)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
619 .addScalar("year", StandardBasicTypes.DATE)
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
620 .addScalar("load", StandardBasicTypes.DOUBLE)
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
621 .addScalar("km", StandardBasicTypes.DOUBLE)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
622 .addScalar("unit", StandardBasicTypes.STRING);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
623 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
624 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
625 sqlQuery.setDouble("endKm", endKm);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
626 sqlQuery.setDate("begin", start.getTime());
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
627 sqlQuery.setDate("end", end.getTime());
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
628 sqlQuery.setString("grain", "total");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
629 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
630 SedimentLoad load = new SedimentLoad();
6785
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
631 if (results.isEmpty()) {
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
632 log.warn("Empty result for year calculation.");
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
633 }
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
634 else {
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
635 Object[] row = results.get(0);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
636 load = new SedimentLoad(
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
637 (String) row[0], //description
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
638 (Date) row[1], //start
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
639 null, //end
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
640 false, //isEpoch
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
641 (String) row[4]); //unit
6785
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
642 }
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
643 load = getValues("coarse", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
644 load = getValues("fine_middle", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
645 load = getValues("sand", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
646 load = getValues("suspended_sediment", sqlQuery, load, suspStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
647 load = getValues("susp_sand_bed", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
648 load = getValues("susp_sand", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
649
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
650 return load;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
651 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
652 else if (type.equals("off_epoch")) {
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
653 // Set calendars to fetch the epochs by their start and end
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
654 // dates.
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
655 Calendar toStart = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
656 toStart.set(eyear - 1, 11, 31);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
657 Calendar toEnd = Calendar.getInstance();
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
658 toEnd.set(eyear+1, 00, 01);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
659 // Set query parameters.
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
660 sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS_DATA)
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
661 .addScalar("description", StandardBasicTypes.STRING)
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
662 .addScalar("startYear", StandardBasicTypes.DATE)
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
663 .addScalar("load", StandardBasicTypes.DOUBLE)
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
664 .addScalar("km", StandardBasicTypes.DOUBLE)
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
665 .addScalar("endYear", StandardBasicTypes.DATE)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
666 .addScalar("unit", StandardBasicTypes.STRING);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
667 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
668 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
669 sqlQuery.setDouble("endKm", endKm);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
670 sqlQuery.setDate("sbegin", start.getTime());
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
671 sqlQuery.setDate("send", end.getTime());
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
672 sqlQuery.setDate("ebegin", toStart.getTime());
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
673 sqlQuery.setDate("eend", toEnd.getTime());
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
674 sqlQuery.setString("grain", "total");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
675
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
676 List<Object[]> results = null;
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
677 results = sqlQuery.list();
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
678
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
679 SedimentLoad load = null;
6737
1960d55bafb1 issue1393: Avoid NPE for off-epoch when actually no off-epoch data available.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6725
diff changeset
680 if (results.isEmpty()) {
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
681 log.warn("No total results for off-epoch");
6737
1960d55bafb1 issue1393: Avoid NPE for off-epoch when actually no off-epoch data available.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6725
diff changeset
682 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
683 else {
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
684 Object[] row = results.get(0);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
685 load = new SedimentLoad(
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
686 (String) row[0],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
687 (Date) row[1],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
688 (Date) row[4],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
689 true,
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
690 (String)row[5]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
691 TDoubleArrayList kms = new TDoubleArrayList();
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
692 for (int i = 0, R = results.size(); i < R; i++) {
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
693 row = results.get(i);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
694 kms.add((Double)row[3]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
695 load.setLoadTotal((Double)row[3], (Double)row[2]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
696 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
697 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
698 load = getValues("coarse", sqlQuery, load, floatStations);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
699 load = getValues("fine_middle", sqlQuery, load, floatStations);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
700 load = getValues("sand", sqlQuery, load, floatStations);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
701 load = getValues("suspended_sediment", sqlQuery, load, suspStations);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
702 load = getValues("susp_sand_bed", sqlQuery, load, floatStations);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
703 load = getValues("susp_sand", sqlQuery, load, floatStations);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
704 return load;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
705 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
706 return new SedimentLoad();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
707 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
708
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
709 protected static Range findMeasurementStationRange(
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
710 TreeMap<Double, MeasurementStation> stations,
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
711 double km
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
712 ) {
6984
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
713 MeasurementStation station = stations.get(km);
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
714 if (station == null) {
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
715 return null;
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
716 }
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
717
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
718 double endKm;
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
719
6984
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
720 if (stations.ceilingEntry(km + 0.1d) != null) {
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
721 MeasurementStation nextStation = stations.ceilingEntry(km + 0.1d).getValue();
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
722 endKm = nextStation.getRange().getA().doubleValue();
6966
328854c0467f SedimentLoadFactory: Further code simplification.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6965
diff changeset
723 }
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
724 else {
6966
328854c0467f SedimentLoadFactory: Further code simplification.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6965
diff changeset
725 // TODO end-of-river instead of B.
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
726 endKm = station.getRange().getB().doubleValue();
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
727 }
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
728
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
729 return new Range(
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
730 station.getRange().getA().doubleValue(),
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
731 endKm);
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
732 }
5662
7e3cde8b564c Cosmetics, docs, vimlines.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
733
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
734 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
735 * Run query with grain parameter set to fraction, feed result into
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
736 * load. Create load if null.
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
737 *
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
738 * @param fraction value to set 'grain' parameter in query to.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
739 * @param query query in which to set 'grain' parameter and run.
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
740 * @param load[out] SedimentLoad which to populate with values. if null
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
741 * and values are found, return a new load.
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
742 * @return param load or new load if null.
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
743 */
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
744 protected static SedimentLoad getValues (
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
745 String fraction,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
746 SQLQuery query,
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
747 SedimentLoad load,
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
748 TreeMap<Double, MeasurementStation> stations
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
749 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
750 query.setString("grain", fraction);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
751 List<Object[]> results = query.list();
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
752
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
753 // We have the first results for this query, create new load.
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
754 if (!results.isEmpty() && load == null) {
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
755 Object[] row = results.get(0);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
756 load = new SedimentLoad(
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
757 (String) row[0],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
758 (Date) row[1],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
759 (Date) row[4],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
760 true,
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
761 (String)row[5]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
762 }
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
763
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
764 for (int i = 0, R = results.size(); i < R; i++) {
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
765 Object[] row = results.get(i);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
766 double km = (Double)row[3];
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
767 Range range = findMeasurementStationRange(stations, km);
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
768 if (range == null) {
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
769 log.warn("No measurement station for " + fraction + " km " + km);
6544
b24dc0320b75 issue1386: Prevent null-ranges to be set when station of sediment measurement
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6477
diff changeset
770 continue;
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
771 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
772 double v = -1;
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
773
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
774 if (row[2] != null) {
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
775 v = ((Double)row[2]).doubleValue();
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
776 }
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
777
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
778 setLoadFraction(load, km, v, range, fraction);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
779 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
780
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
781 if (results.isEmpty()) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
782 log.warn("No " + fraction + " values found.");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
783 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
784
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
785 return load;
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
786 }
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
787
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
788
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
789 /** Set a fraction value of load to given km, value and range. */
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
790 private static void setLoadFraction(
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
791 SedimentLoad load, double km, double v, Range range, String fraction) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
792 if (fraction.equals("coarse")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
793 load.setCoarse(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
794 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
795 else if (fraction.equals("sand")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
796 load.setSand(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
797 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
798 else if (fraction.equals("fine_middle")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
799 load.setFineMiddle(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
800 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
801 else if (fraction.equals("suspended_sediment")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
802 load.setSuspSediment(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
803 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
804 else if (fraction.equals("susp_sand")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
805 load.setSuspSand(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
806 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
807 else if (fraction.equals("susp_sand_bed")) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
808 load.setSuspSandBed(km, v, range);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
809 }
7430
7f438ee10be6 Fix total sediment load fetching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7305
diff changeset
810 else if (fraction.equals("total")) {
7f438ee10be6 Fix total sediment load fetching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7305
diff changeset
811 load.setLoadTotal(km, v, range);
7f438ee10be6 Fix total sediment load fetching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7305
diff changeset
812 }
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
813 else {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
814 log.error("Unknown fraction type " + fraction);
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
815 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
816 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
817
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
818 public static SedimentLoad getLoadUnknown(
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
819 String river,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
820 String description
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
821 ) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
822 log.debug("SedimentLoadFactory.getLoadWithData");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
823 Cache cache = CacheFactory.getCache(LOAD_DATA_CACHE_NAME);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
824
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
825 if (cache == null) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
826 log.debug("Cache not configured.");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
827 return getSedimentLoadUnknownUncached(river, description);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
828 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
829
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
830 StaticSedimentLoadCacheKey key =
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
831 new StaticSedimentLoadCacheKey(river, 0d, 0d, 0, 0);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
832
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
833 Element element = cache.get(key);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
834
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
835 if (element != null) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
836 log.debug("SedimentLoad found in cache");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
837 return (SedimentLoad)element.getValue();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
838 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
839
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
840 SedimentLoad values = getSedimentLoadUnknownUncached(river, description);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
841
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
842 if (values != null && key != null) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
843 log.debug("Store static bed height values in cache.");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
844 element = new Element(key, values);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
845 cache.put(element);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
846 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
847 return values;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
848 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
849
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
850 /**
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
851 * Get sediment loads with fraction 'unknown' from db.
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
852 * @param river the river
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
853 * @param type the sediment load type (year or epoch)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
854 * @return according sediment loads.
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
855 */
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
856 public static SedimentLoad getSedimentLoadUnknownUncached(
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
857 String river,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
858 String description
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
859 ) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
860 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
861 Session session = SessionHolder.HOLDER.get();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
862 SQLQuery sqlQuery = null;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
863
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
864 sqlQuery = session.createSQLQuery(SQL_SELECT_UNKNOWN_DATA)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
865 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
866 .addScalar("startYear", StandardBasicTypes.DATE)
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
867 .addScalar("end", StandardBasicTypes.DATE)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
868 .addScalar("load", StandardBasicTypes.DOUBLE)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
869 .addScalar("km", StandardBasicTypes.DOUBLE)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
870 .addScalar("unit", StandardBasicTypes.STRING);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
871 sqlQuery.setString("name", river);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
872 sqlQuery.setString("descr", description);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
873 List<Object []> results = sqlQuery.list();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
874 SedimentLoad load = new SedimentLoad();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
875 if (results.isEmpty()) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
876 return new SedimentLoad();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
877 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
878 Object[] row = results.get(0);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
879 load = new SedimentLoad(
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
880 (String) row[0],
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
881 (Date) row[1],
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
882 (Date) row[2],
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
883 false,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
884 (String)row[5]);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
885
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
886 for (int i = 0, R = results.size(); i < R; i++) {
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
887 row = results.get(i);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
888 SedimentLoadFraction fraction = new SedimentLoadFraction();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
889 fraction.setUnknown((Double)row[3]);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
890 load.addKm((Double)row[4], fraction);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
891 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
892 return load;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
893 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
894
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
895 /**
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
896 * Return sediment loads with 'unknown' fraction type.
6785
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
897 * @param river Name of the river
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
898 * @param unit Restrict result set to those of given unit.
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
899 * @param type Type like year, epoch, off_epoch
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
900 */
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
901 public static SedimentLoad[] getSedimentLoadUnknown(
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
902 String river,
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
903 String unit,
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
904 String type) {
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
905 Session session = SessionHolder.HOLDER.get();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
906 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_UNKNOWN)
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
907 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
908 .addScalar("startYear", StandardBasicTypes.DATE)
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
909 .addScalar("end", StandardBasicTypes.DATE);
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
910 sqlQuery.setString("river", river);
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
911 sqlQuery.setString("unit", unit);
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
912 if (type.equals("off_epoch")) {
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
913 sqlQuery.setInteger("type", 1);
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
914 }
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
915 else {
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
916 sqlQuery.setInteger("type", 0);
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
917 }
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
918 List<Object[]> results = sqlQuery.list();
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
919 SedimentLoad[] loads = new SedimentLoad[results.size()];
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
920 int counter = 0;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
921 for (Object[] row: results) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
922 loads[counter] = new SedimentLoad(
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
923 (String)row[0], (Date)row[1], (Date)row[2], false, "");
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
924 counter++;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
925 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
926 return loads;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
927 }
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
928 }
5662
7e3cde8b564c Cosmetics, docs, vimlines.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
929 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org