annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java @ 7357:9d3e44ab25f2

Refactoring: Move functionality of BedHeightAccess into BedHeightFacet for now. Idea is that Artifact and Access are lightweight. Access access the 'data' ('parameterization') attached to artifact, not the data delivered by means of artifact and its parameterization.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 16 Oct 2013 10:42:45 +0200
parents 2e4ffd35cafa
children 7f438ee10be6
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
7185
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
74 /** 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
75 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
76 "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
77 " sy.description AS description " +
7304
615795d54831 cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
78 " 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
79 " 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
80
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
81 /** 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
82 * epoch-type sediment yields. */
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
83 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
84 "SELECT DISTINCT " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
85 " ti.start_time AS startYear, " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
86 " ti.stop_time AS end " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
87 " FROM sediment_yield sy " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
88 " 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
89 " 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
90 " 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
91 " WHERE r.name = :name " +
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
92 " 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
93 " 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
94 " AND sy.kind = 1";
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
95
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
96 /** 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
97 * sediment yields. */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 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
99 "SELECT DISTINCT " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
101 " 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
102 " 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
103 " u.name AS unit" +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 " FROM sediment_yield sy " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
105 " 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
106 " 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
107 " 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
108 " 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
109 " WHERE r.name = :name " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
110 " 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
111 " 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
112
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
113 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
114 "SELECT" +
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
115 " 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
116 " 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
117 " syv.station AS km, " +
7184
73d7886fa59e SedimentLoadFactory: Fix query, added comment about correctness of
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7181
diff changeset
118 " 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
119 " 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
120 " 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
121 " 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
122 " 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
123 " 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
124 " 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
125 " 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
126
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
127 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
128 "SELECT" +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
129 " sy.description AS description, " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
130 " ti.start_time AS year, " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
131 " 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
132 " 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
133 " u.name AS unit " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
134 " FROM sediment_yield sy " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
135 " 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
136 " 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
137 " 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
138 " 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
139 " 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
140 " WHERE r.name = :name " +
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
141 " 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
142 " 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
143 " 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
144 " 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
145 " 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
146
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
147 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
148 "SELECT" +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
149 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
150 " 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
151 " 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
152 " 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
153 " 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
154 " 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
155 " 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
156 " 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
157 " 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
158 " 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
159 " 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
160 " 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
161 " 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
162 " 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
163 " 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
164 " 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
165
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
166 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
167 "SELECT DISTINCT " +
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
168 " sy.description AS description, " +
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
169 " 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
170 " 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
171 "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
172 " 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
173 " 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
174 " 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
175 " 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
176 "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
177 " AND gf.name = 'unknown' " +
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
178 " 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
179 " AND u.name = :unit";
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
180
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
181 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
182 "SELECT" +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
183 " sy.description AS description, " +
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
184 " ti.start_time AS startYear, " +
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
185 " syv.value AS load, " +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
186 " 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
187 " 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
188 " u.name AS unit" +
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
189 " FROM sediment_yield sy " +
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
190 " 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
191 " 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
192 " 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
193 " 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
194 " 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
195 " WHERE r.name = :name " +
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
196 " 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
197 " 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
198 " 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
199 " 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
200 " ORDER BY syv.station";
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
201
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
202 private SedimentLoadFactory() {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
203 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
204
4434
60c728e557f4 Backed out changeset e8a4d2fd25cc
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4428
diff changeset
205 /**
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
206 * @param river name of river.
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
207 * @param type
4434
60c728e557f4 Backed out changeset e8a4d2fd25cc
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4428
diff changeset
208 */
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
209 public static SedimentLoad[] getLoads(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
210 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
211 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
212 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
213 double endKm
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
214 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
215 log.debug("SedimentLoadFactory.getLoads");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
216 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
217
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
218 if (cache == null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
219 log.debug("Cache not configured.");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
220 return getSedimentLoadsUncached(river, type, startKm, endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
221 }
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 StaticSedimentLoadCacheKey key =
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
224 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
225
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 Element element = cache.get(key);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
227
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
228 if (element != null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
229 log.debug("SedimentLoad found in cache");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
230 return (SedimentLoad[])element.getValue();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
231 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
232
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
233 SedimentLoad[] values =
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
234 getSedimentLoadsUncached(river, type, startKm, endKm);
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 (values != null && key != null) {
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
237 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
238 element = new Element(key, values);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
239 cache.put(element);
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 return values;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
242 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
243
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
244 /**
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
245 * Get a sedimentLoad filled with data from db (or cache).
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
246 * @param type "epoch", "off_epoch" or "single"
7028
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6984
diff changeset
247 * @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
248 */
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4736
diff changeset
249 public static SedimentLoad getLoadWithData(
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
250 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
251 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
252 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
253 double endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
254 int syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
255 int eyear
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
256 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
257 log.debug("SedimentLoadFactory.getLoadWithData");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
258 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
259
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 if (cache == null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
261 log.debug("Cache not configured.");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
262 return getSedimentLoadWithDataUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
263 river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
264 type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
265 startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
266 endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
267 syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
268 eyear);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
269 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
270
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
271 StaticSedimentLoadCacheKey key =
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
272 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
273
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
274 Element element = cache.get(key);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
275
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
276 if (element != null) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
277 log.debug("SedimentLoad found in cache");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
278 return (SedimentLoad)element.getValue();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
279 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
280
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
281 SedimentLoad values = getSedimentLoadWithDataUncached(
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
282 river,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
283 type,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
284 startKm,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
285 endKm,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
286 syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
287 eyear);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
288
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
289 if (values != null && key != null) {
7053
3a55f49be155 Corrected debug output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7028
diff changeset
290 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
291 element = new Element(key, values);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
292 cache.put(element);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
293 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
294 return values;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
295 }
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 /**
7305
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
298 * 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
299 * @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
300 * @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
301 */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
302 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
303 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
304
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
305 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
306 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
307 .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
308 .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
309 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
310
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
311 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
312 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
313
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
314 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
315 }
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
316
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
317 /**
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
318 * 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
319 * @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
320 * @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
321 */
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
322 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
323 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
324
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
325 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
326 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
327 .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
328 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
329
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
330 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
331
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
332 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
333 }
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
334
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
335
2e4ffd35cafa issue1345: Prepare SedimentLoadFactory to deliver fraction name and time ranges.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7304
diff changeset
336 /**
7185
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
337 * 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
338 * @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
339 * @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
340 */
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
341 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
342 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
343
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
344 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
345 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
346 .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
347 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
348
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
349 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
350
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
351 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
352 }
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
353
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
354
963b8bd54a63 SedimentLoadFactory: Added method to quickly get the description of a given load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7184
diff changeset
355 /**
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
356 * Get sediment loads from db.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
357 * @param river the river
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
358 * @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
359 * @return according sediment loads.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
360 */
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
361 public static SedimentLoad[] getSedimentLoadsUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
362 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
363 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
364 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
365 double endKm
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
366 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
367 log.debug("SedimentLoadFactory.getSedimentLoadsUncached");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
368
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
369 Session session = SessionHolder.HOLDER.get();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
370 SQLQuery sqlQuery = null;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
371
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
372 if (type.equals("single")) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
373 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
374 .addScalar("description", StandardBasicTypes.STRING)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
375 .addScalar("year", StandardBasicTypes.DATE);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
376 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
377 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
378 sqlQuery.setDouble("endKm", endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
379 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
380 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
381 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
382 Object[] row = results.get(i);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
383 loads[i] = new SedimentLoad(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
384 (String) row[0],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
385 (Date) row[1],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
386 null,
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
387 false,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
388 "");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
389 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
390 return loads;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
391 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
392 else if (type.equals("epoch")) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
393 sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
394 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
395 .addScalar("startYear", StandardBasicTypes.DATE)
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
396 .addScalar("end", StandardBasicTypes.DATE);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
397 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
398 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
399 sqlQuery.setDouble("endKm", endKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
400 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
401
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
402 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
403 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
404 Object[] row = results.get(i);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
405 loads[i] = new SedimentLoad(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
406 (String) row[0],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
407 (Date) row[1],
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
408 (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
409 true,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
410 "");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
411 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
412 return loads;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
413 }
6725
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
414 else if (type.equals("off_epoch")) {
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
415 sqlQuery = session.createSQLQuery(SQL_SELECT_OFFEPOCHS)
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
416 .addScalar("startYear", StandardBasicTypes.DATE)
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
417 .addScalar("end", StandardBasicTypes.DATE);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
418 sqlQuery.setString("name", river);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
419 sqlQuery.setDouble("startKm", startKm);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
420 sqlQuery.setDouble("endKm", endKm);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
421 List<Object []> results = sqlQuery.list();
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
422
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
423 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
424 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
425 Object[] row = results.get(i);
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
426 loads[i] = new SedimentLoad(
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
427 ((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
428 (Date) row[0],
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
429 (Date) row[1],
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
430 true,
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
431 "");
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
432 }
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
433 return loads;
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
434 }
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
435 else {
7ea933f9c6ea issu1393/SedimentLoadFactory: Handle off_epoch type queries.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6665
diff changeset
436 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
437 }
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
438 return new SedimentLoad[0];
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
439 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
440
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
441 /**
7181
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
442 * 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
443 *
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
444 * @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
445 *
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
446 * @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
447 */
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
448 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
449 String id,
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
450 String river
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
451 ) {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
452 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
453 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
454 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
455
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
456 // 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
457 // 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
458 // 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
459 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
460 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
461 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
462 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
463 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
464 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
465
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
466 // 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
467 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
468 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
469 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
470 continue;
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 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
473 suspStations.put(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
474 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
475 measurementStation);
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
476 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
477 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
478 floatStations.put(
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
479 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
480 measurementStation);
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 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
483
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
484 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
485 .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
486 .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
487 .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
488 .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
489 .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
490 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
491
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
492 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
493 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
494 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
495 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
496 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
497 else {
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
498 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
499 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
500 (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
501 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
502 null, //end
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
503 false, //isEpoch
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
504 (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
505
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
506 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
507
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7185
diff changeset
508 TreeMap<Double,MeasurementStation> relevantStations =
7184
73d7886fa59e SedimentLoadFactory: Fix query, added comment about correctness of
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7181
diff changeset
509 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
510 ? suspStations
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
511 : floatStations;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
512
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
513 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
514 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
515 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
516 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
517 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
518 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
519 continue;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
520 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
521
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
522 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
523
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
524 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
525 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
526 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
527
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
528 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
529 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
530
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
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
533 return load;
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
534 }
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
535
805021c04861 issue1435: Add method to SedimentLoadFactory to fetch a SedimentLoad by id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7180
diff changeset
536 /**
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
537 * 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
538 *
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
539 * @param river the river
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6737
diff changeset
540 * @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
541 *
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
542 * @return according sediment loads.
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
543 */
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
544 public static SedimentLoad getSedimentLoadWithDataUncached(
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
545 String river,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
546 String type,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
547 double startKm,
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
548 double endKm,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
549 int syear,
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
550 int eyear
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
551 ) {
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
552 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
553 Session session = SessionHolder.HOLDER.get();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
554 SQLQuery sqlQuery = null;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
555
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
556 // Measurement stations: all, for float-stuff, for suspended stuff.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
557 // Because they need fast sorted access, use TreeMaps.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
558 // They map the starting validity range km to the station itself.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
559 List<MeasurementStation> allStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
560 RiverFactory.getRiver(river).getMeasurementStations();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
561 TreeMap<Double,MeasurementStation> floatStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
562 new TreeMap<Double, MeasurementStation>();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
563 TreeMap<Double,MeasurementStation> suspStations =
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
564 new TreeMap<Double, MeasurementStation>();
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
565
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
566 // 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
567 for (MeasurementStation measurementStation: allStations) {
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
568 if (measurementStation.getMeasurementType() == null ||
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
569 measurementStation.getRange() == null) {
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
570 continue;
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
571 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
572 if (measurementStation.getMeasurementType().equals("Schwebstoff")) {
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
573 suspStations.put(
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
574 measurementStation.getRange().getA().doubleValue(),
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
575 measurementStation);
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
576 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
577 else if (measurementStation.getMeasurementType().equals("Geschiebe")) {
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
578 floatStations.put(
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
579 measurementStation.getRange().getA().doubleValue(),
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
580 measurementStation);
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
581 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
582 }
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
583
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
584 // Construct date constraint.
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
585 Calendar start = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
586 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
587 Calendar end = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
588 end.set(syear, 11, 30);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
589
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
590 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
591 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
592 .addScalar("description", StandardBasicTypes.STRING)
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
593 .addScalar("year", StandardBasicTypes.DATE)
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
594 .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
595 .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
596 .addScalar("unit", StandardBasicTypes.STRING);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
597 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
598 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
599 sqlQuery.setDouble("endKm", endKm);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
600 sqlQuery.setDate("begin", start.getTime());
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
601 sqlQuery.setDate("end", end.getTime());
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
602 sqlQuery.setString("grain", "total");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
603 List<Object []> results = sqlQuery.list();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
604 SedimentLoad load = new SedimentLoad();
6785
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
605 if (results.isEmpty()) {
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
606 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
607 }
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
608 else {
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
609 Object[] row = results.get(0);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
610 load = new SedimentLoad(
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
611 (String) row[0], //description
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
612 (Date) row[1], //start
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
613 null, //end
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
614 false, //isEpoch
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6786
diff changeset
615 (String) row[4]); //unit
6785
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
616 }
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
617 load = getValues("coarse", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
618 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
619 load = getValues("sand", sqlQuery, load, floatStations);
6da574f78d60 SedimentLoadFactory: Survive not completely defined sediment loads.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6755
diff changeset
620 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
621 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
622 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
623
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
624 return load;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
625 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
626 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
627 // 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
628 // dates.
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
629 Calendar toStart = Calendar.getInstance();
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
630 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
631 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
632 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
633 // Set query parameters.
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
634 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
635 .addScalar("description", StandardBasicTypes.STRING)
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
636 .addScalar("startYear", StandardBasicTypes.DATE)
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
637 .addScalar("load", StandardBasicTypes.DOUBLE)
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
638 .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
639 .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
640 .addScalar("unit", StandardBasicTypes.STRING);
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
641 sqlQuery.setString("name", river);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
642 sqlQuery.setDouble("startKm", startKm);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
643 sqlQuery.setDouble("endKm", endKm);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
644 sqlQuery.setDate("sbegin", start.getTime());
4517
a5e4fae31089 Fixed SQL statements and parameters.
Raimund Renkert <rrenkert@intevation.de>
parents: 4434
diff changeset
645 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
646 sqlQuery.setDate("ebegin", toStart.getTime());
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
647 sqlQuery.setDate("eend", toEnd.getTime());
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
648 sqlQuery.setString("grain", "total");
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
649
4546
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
650 List<Object[]> results = null;
af1938d4e957 New field in sediment load object and calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4517
diff changeset
651 results = sqlQuery.list();
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
652
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
653 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
654 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
655 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
656 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
657 else {
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
658 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
659 load = new SedimentLoad(
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
660 (String) row[0],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
661 (Date) row[1],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
662 (Date) row[4],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
663 true,
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
664 (String)row[5]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
665 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
666 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
667 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
668 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
669 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
670 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
671 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
672 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
673 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
674 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
675 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
676 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
677 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
678 return load;
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
679 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
680 return new SedimentLoad();
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
681 }
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
682
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
683 protected static Range findMeasurementStationRange(
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
684 TreeMap<Double, MeasurementStation> stations,
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
685 double km
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
686 ) {
6984
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
687 MeasurementStation station = stations.get(km);
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
688 if (station == null) {
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
689 return null;
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
690 }
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
691
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
692 double endKm;
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
693
6984
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
694 if (stations.ceilingEntry(km + 0.1d) != null) {
77f48c104d23 Backed out changeset 6b9402377d07
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6970
diff changeset
695 MeasurementStation nextStation = stations.ceilingEntry(km + 0.1d).getValue();
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
696 endKm = nextStation.getRange().getA().doubleValue();
6966
328854c0467f SedimentLoadFactory: Further code simplification.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6965
diff changeset
697 }
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
698 else {
6966
328854c0467f SedimentLoadFactory: Further code simplification.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6965
diff changeset
699 // TODO end-of-river instead of B.
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
700 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
701 }
6967
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
702
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
703 return new Range(
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
704 station.getRange().getA().doubleValue(),
3a987e9af256 SedimentLoadFactory: Improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6966
diff changeset
705 endKm);
6964
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
706 }
5662
7e3cde8b564c Cosmetics, docs, vimlines.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
707
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
708 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
709 * 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
710 * 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
711 *
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
712 * @param fraction value to set 'grain' parameter in query to.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
713 * @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
714 * @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
715 * 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
716 * @return param load or new load if null.
5789
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5662
diff changeset
717 */
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
718 protected static SedimentLoad getValues (
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
719 String fraction,
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
720 SQLQuery query,
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
721 SedimentLoad load,
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
722 TreeMap<Double, MeasurementStation> stations
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
723 ) {
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
724 query.setString("grain", fraction);
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
725 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
726
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
727 // 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
728 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
729 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
730 load = new SedimentLoad(
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
731 (String) row[0],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
732 (Date) row[1],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
733 (Date) row[4],
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
734 true,
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
735 (String)row[5]);
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
736 }
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
737
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
738 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
739 Object[] row = results.get(i);
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
740 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
741 Range range = findMeasurementStationRange(stations, km);
5a348e3df0f8 SedimentLoadFactory: Extracted method to find range of matching
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
742 if (range == null) {
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
743 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
744 continue;
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
745 }
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
746 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
747
4370
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
748 if (row[2] != null) {
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
749 v = ((Double)row[2]).doubleValue();
6a65e7ef43c0 Updated data object and factory for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents: 4296
diff changeset
750 }
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
751
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
752 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
753 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
754
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
755 if (results.isEmpty()) {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
756 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
757 }
6741
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
758
35f2d32b921d issue1393: Survive when off-epochs no total data, but other.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
759 return load;
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
760 }
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
761
7180
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
762
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
763 /** 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
764 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
765 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
766 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
767 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
768 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
769 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
770 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
771 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
772 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
773 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
774 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
775 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
776 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
777 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
778 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
779 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
780 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
781 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
782 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
783 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
784 else {
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
785 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
786 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
787 }
e0b6b6cf4708 issue1435: Minor refactoring that will come handy to load SedimentLoads
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7053
diff changeset
788
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
789 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
790 String river,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
791 String description
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
792 ) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
793 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
794 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
795
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
796 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
797 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
798 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
799 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
800
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
801 StaticSedimentLoadCacheKey key =
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
802 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
803
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
804 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
805
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
806 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
807 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
808 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
809 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
810
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
811 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
812
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
813 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
814 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
815 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
816 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
817 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
818 return values;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
819 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
820
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 * 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
823 * @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
824 * @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
825 * @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
826 */
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
827 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
828 String river,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
829 String description
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
830 ) {
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
831 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
832 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
833 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
834
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
835 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
836 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
837 .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
838 .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
839 .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
840 .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
841 .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
842 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
843 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
844 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
845 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
846 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
847 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
848 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
849 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
850 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
851 (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
852 (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
853 (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
854 false,
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
855 (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
856
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
857 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
858 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
859 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
860 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
861 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
862 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
863 return load;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
864 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
865
6665
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
866 /**
b7945db8a43b issue1413: Only show unknown sediment loads of selected unit type.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6545
diff changeset
867 * 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
868 * @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
869 * @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
870 * @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
871 */
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
872 public static SedimentLoad[] getSedimentLoadUnknown(
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
873 String river,
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
874 String unit,
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
875 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
876 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
877 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
878 .addScalar("description", StandardBasicTypes.STRING)
6477
d1502b8dd091 'start' is a reserved word in Oracle
Tom Gottfried <tom@intevation.de>
parents: 6412
diff changeset
879 .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
880 .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
881 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
882 sqlQuery.setString("unit", unit);
6755
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
883 if (type.equals("off_epoch")) {
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
884 sqlQuery.setInteger("type", 1);
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
885 }
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
886 else {
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
887 sqlQuery.setInteger("type", 0);
91c43293e538 issue1433: Filter loaded unknown sediment yields by kind.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6741
diff changeset
888 }
6392
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
889 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
890 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
891 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
892 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
893 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
894 (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
895 counter++;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
896 }
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
897 return loads;
9a0f8d532797 Load sedimentload fraction with sedimentload factory and add new facets to artifact.
Raimund Renkert <rrenkert@intevation.de>
parents: 6377
diff changeset
898 }
4296
3051bc28ac43 Added data object and factory for sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
899 }
5662
7e3cde8b564c Cosmetics, docs, vimlines.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
900 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org