Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/WstValueTableFactory.java @ 6490:181c09bff978
issue1383: Added new facet type.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Fri, 28 Jun 2013 11:23:06 +0200 |
parents | af13ceeba52a |
children | 682a26e4158b |
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:
5423
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
11 import java.util.Arrays; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
12 import java.util.List; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.util.ArrayList; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
14 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
15 import net.sf.ehcache.Cache; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
16 import net.sf.ehcache.Element; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
17 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
18 import org.dive4elements.river.artifacts.cache.CacheFactory; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
19 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
20 import org.dive4elements.river.backend.SessionHolder; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
21 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
22 import org.apache.log4j.Logger; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
23 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
24 import org.dive4elements.river.model.River; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
25 import org.dive4elements.river.model.Wst; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 import org.hibernate.Session; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 import org.hibernate.Query; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 import org.hibernate.SQLQuery; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 import org.hibernate.type.StandardBasicTypes; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
33 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
34 * Creates WstValueTable s from database. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
35 * WstValueTable s are used to interpolate given w/q/km values. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
36 */ |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 public class WstValueTableFactory |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 private static Logger log = Logger.getLogger(WstValueTableFactory.class); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
41 public static final int DEFAULT_KIND = 0; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
42 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 // TODO: put this into a property file |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
44 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
45 public static final String HQL_WST = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
46 "from Wst where river=:river and kind=:kind"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
47 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
48 public static final String SQL_SELECT_NAMES_POS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
49 "SELECT position, name FROM wst_columns " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
50 "WHERE wst_id = :wst_id ORDER BY position"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
51 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
52 /** Select Qs for wst (view sorted by column). */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
53 public static final String SQL_SELECT_QS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
54 "SELECT column_pos, q, a, b FROM wst_q_values " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
55 "WHERE wst_id = :wst_id"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
56 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
57 // (sorted by km) |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
58 public static final String SQL_SELECT_WS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
59 "SELECT km, w, column_pos FROM wst_w_values " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
60 "WHERE wst_id = :wst_id"; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
62 /** Statement to query qranges of a single column. */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
63 public static final String SQL_SELECT_QS_AT_COL = |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
64 "SELECT q, a, b FROM wst_q_values " + |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
65 "WHERE wst_id = :wst_id AND column_pos = :column_pos"; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
66 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
67 // (sorted by km) |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
68 public static final String SQL_SELECT_WS_AT_COL = |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
69 "SELECT km, w FROM wst_w_values " + |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
70 "WHERE wst_id = :wst_id AND column_pos = :column_pos"; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
71 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
72 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 private WstValueTableFactory() { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
76 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 public static WstValueTable getTable(River river) { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
78 return getTable(river, DEFAULT_KIND); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
81 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
82 /** |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
83 * Get WstValueTable to interpolate values of a given Wst. |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
84 */ |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
85 public static WstValueTable getTable(int wst_id) { |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
86 |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
87 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
88 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
89 WstValueTableCacheKey cacheKey; |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
90 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
91 if (cache != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
92 // "-1" is the symbolic river-id for "no river, but wst_id". |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
93 cacheKey = new WstValueTableCacheKey(-1, wst_id); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
94 Element element = cache.get(cacheKey); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
95 if (element != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
96 log.debug("Got specific wst value table from cache"); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
97 return (WstValueTable) element.getValue(); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
98 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
99 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
100 else { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
101 cacheKey = null; |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
102 } |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
103 |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
104 Session session = SessionHolder.HOLDER.get(); |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
105 |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
106 // Fetch data for one column only. |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2610
diff
changeset
|
107 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
108 WstValueTable.Column [] columns = loadColumns(session, wst_id); |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
109 int [] map = loadQRangesMap(session, columns, wst_id); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
110 List<WstValueTable.Row> rows = loadRows(session, wst_id, columns.length, map); |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
111 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
112 WstValueTable valueTable = new WstValueTable(columns, rows); |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
113 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
114 if (valueTable != null && cacheKey != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
115 log.debug("Store wst value table in cache"); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
116 Element element = new Element(cacheKey, valueTable); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
117 cache.put(element); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
118 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
119 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
120 return valueTable; |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
121 } |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
122 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
123 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
124 * Get Table for a specific column of a wst. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
125 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
126 public static WstValueTable getWstColumnTable(int wst_id, int col_pos) { |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
127 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
128 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
129 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
130 WstValueTableCacheKey cacheKey; |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
131 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
132 if (cache != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
133 // A negaitve/negative number is the symbolic 'river-id' for |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
134 // "no river and kind but wst_id and colpos". |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
135 cacheKey = new WstValueTableCacheKey(-wst_id, -col_pos); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
136 Element element = cache.get(cacheKey); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
137 if (element != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
138 log.debug("Got specific wst value table from cache"); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
139 return (WstValueTable) element.getValue(); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
140 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
141 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
142 else { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
143 cacheKey = null; |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
144 } |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
145 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
146 Session session = SessionHolder.HOLDER.get(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
147 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
148 // Fetch data for one column only. |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2610
diff
changeset
|
149 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
150 WstValueTable.Column [] columns = loadColumn(session, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
151 loadQRanges(session, columns, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
152 List<WstValueTable.Row> rows = loadRowsOneColumn(session, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
153 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
154 WstValueTable valueTable = new WstValueTable(columns, rows); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
155 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
156 if (valueTable != null && cacheKey != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
157 log.debug("Store wst value table in cache (wst: " |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
158 + wst_id + "/ col: " + col_pos + ")"); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
159 Element element = new Element(cacheKey, valueTable); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
160 cache.put(element); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
161 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
162 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
163 return valueTable; |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
164 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
165 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
166 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
167 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
168 * Get table for first wst of given kind at given river. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
169 */ |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 public static WstValueTable getTable(River river, int kind) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
626
diff
changeset
|
172 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 |
626
e3ee131d5dd3
Moved WST value table cache key to a separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
458
diff
changeset
|
174 WstValueTableCacheKey cacheKey; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 if (cache != null) { |
626
e3ee131d5dd3
Moved WST value table cache key to a separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
458
diff
changeset
|
177 cacheKey = new WstValueTableCacheKey(river.getId(), kind); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 Element element = cache.get(cacheKey); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 if (element != null) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 log.debug("got wst value table from cache"); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 return (WstValueTable)element.getValue(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 else { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 cacheKey = null; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 WstValueTable valueTable = getTableUncached(river, kind); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
626
diff
changeset
|
190 if (valueTable != null && cacheKey != null) { |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 log.debug("store wst value table in cache"); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 Element element = new Element(cacheKey, valueTable); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
193 cache.put(element); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 return valueTable; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
199 public static WstValueTable getTableUncached(River river) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
200 return getTableUncached(river, DEFAULT_KIND); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
201 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
202 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
203 public static WstValueTable getTableUncached(River river, int kind) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 Session session = SessionHolder.HOLDER.get(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
207 Wst wst = loadWst(session, river, kind); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
208 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
209 if (wst == null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
210 return null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
211 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
212 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
213 WstValueTable.Column [] columns = loadColumns(session, wst); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
214 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
215 int map [] = loadQRangesMap(session, columns, wst); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
216 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
217 List<WstValueTable.Row> rows = |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
218 loadRows(session, wst.getId(), columns.length, map); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
219 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
220 return new WstValueTable(columns, rows); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
221 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
222 |
1780
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
223 /** |
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
224 * @param kind Kind of wst. |
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
225 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
226 protected static Wst loadWst(Session session, River river, int kind) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
227 Query query = session.createQuery(HQL_WST); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
228 query.setParameter("river", river); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 query.setInteger("kind", kind); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 List<Wst> wsts = query.list(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
233 // TODO Multiple wsts can match, why return just the first one? |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
234 return wsts.isEmpty() ? null : wsts.get(0); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
235 } |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
237 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
238 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
239 * Load rows with a single columns result. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
240 * |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
241 * @param session session to use for querying db. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
242 * @param wstId id of wst (in db). |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
243 * @param column_pos the column_pos (within the db) of the wst_value_table |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
244 * of which the values shall be fetched. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
245 * |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
246 * @return resultant rows. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
247 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
248 protected static List<WstValueTable.Row> loadRowsOneColumn( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
249 Session session, |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
250 int wstId, |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
251 int column_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
252 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
253 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_WS_AT_COL) |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
254 .addScalar("km", StandardBasicTypes.DOUBLE) |
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
255 .addScalar("w", StandardBasicTypes.DOUBLE); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
256 |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
257 sqlQuery.setInteger("wst_id", wstId); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
258 sqlQuery.setInteger("column_pos", column_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
259 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
260 List<Object []> results = sqlQuery.list(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
261 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
262 double [] ws = null; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
263 |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
264 List<WstValueTable.Row> rows = |
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
265 new ArrayList<WstValueTable.Row>(results.size()); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
266 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
267 // Walk over rows. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
268 for (Object [] result: results) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
269 ws = new double[1]; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
270 WstValueTable.Row row = |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
271 new WstValueTable.Row((Double) result[0], ws); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
272 rows.add(row); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
273 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
274 Double w = (Double) result[1]; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
275 ws[0] = w != null ? w : Double.NaN; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
276 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
277 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
278 return rows; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
279 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
280 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
281 protected static List<WstValueTable.Row> loadRows( |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
282 Session session, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
283 int wst_id, |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
284 int numColumns |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
285 ) { |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
286 return loadRows(session, wst_id, numColumns, null); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
287 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
288 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
289 protected static List<WstValueTable.Row> loadRows( |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
290 Session session, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
291 int wst_id, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
292 int numColumns, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
293 int [] map |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
294 ) { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
295 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_WS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
296 .addScalar("km", StandardBasicTypes.DOUBLE) |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
297 .addScalar("w", StandardBasicTypes.DOUBLE) |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
298 .addScalar("column_pos", StandardBasicTypes.INTEGER); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
299 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
300 sqlQuery.setInteger("wst_id", wst_id); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
301 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
302 List<Object []> results = sqlQuery.list(); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
303 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
304 int lastColumn = Integer.MAX_VALUE; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
305 double [] ws = null; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
306 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
307 ArrayList<WstValueTable.Row> rows = new ArrayList<WstValueTable.Row>(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
308 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
309 for (Object [] result: results) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
310 int column = (Integer)result[2]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
311 if (column < lastColumn) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
312 ws = new double[numColumns]; |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
313 Arrays.fill(ws, Double.NaN); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
314 WstValueTable.Row row = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
315 new WstValueTable.Row((Double)result[0], ws); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
316 rows.add(row); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
317 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
318 Double w = (Double)result[1]; |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
319 int index = map != null ? map[column] : column; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
320 ws[index] = w != null ? w : Double.NaN; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
321 lastColumn = column; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
322 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
323 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
324 rows.trimToSize(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
325 return rows; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
326 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
327 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
328 protected static List<WstValueTable.Row> loadRows( |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
329 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
330 Wst wst, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
331 int numColumns |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
332 ) { |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
333 return loadRows(session, wst.getId(), numColumns); |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
334 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
335 |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
336 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
337 protected static WstValueTable.Column [] loadColumn( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
338 Session session, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
339 int wst_id, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
340 int col_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
341 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
342 return new WstValueTable.Column [] { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
343 new WstValueTable.Column(WKmsFactory.getWKmsName(col_pos, wst_id))}; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
344 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
345 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
346 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
347 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
348 * Get columns from wst-id. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
349 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
350 protected static WstValueTable.Column [] loadColumns( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
351 Session session, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
352 int wst_id |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
353 ) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
354 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_NAMES_POS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
355 .addScalar("position", StandardBasicTypes.INTEGER) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
356 .addScalar("name", StandardBasicTypes.STRING); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
357 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
358 sqlQuery.setInteger("wst_id", wst_id); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
359 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
360 List<Object []> columnNames = sqlQuery.list(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
361 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
362 WstValueTable.Column [] columns = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
363 new WstValueTable.Column[columnNames.size()]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
364 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
365 for (int i = 0; i < columns.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
366 columns[i] = new WstValueTable.Column( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
367 (String)columnNames.get(i)[1]); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
368 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
369 return columns; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
370 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
371 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
372 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
373 * Get columns from Wst. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
374 */ |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
375 protected static WstValueTable.Column [] loadColumns( |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
376 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
377 Wst wst |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
378 ) { |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
379 return loadColumns(session, wst.getId()); |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
380 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
381 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
382 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
383 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
384 * Build a QRange-Tree. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
385 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
386 protected static void loadQRanges( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
387 Session session, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
388 WstValueTable.Column [] columns, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
389 int wst_id, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
390 int column_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
391 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
392 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_QS_AT_COL) |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
393 .addScalar("q", StandardBasicTypes.DOUBLE) |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
394 .addScalar("a", StandardBasicTypes.DOUBLE) |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
395 .addScalar("b", StandardBasicTypes.DOUBLE); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
396 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
397 sqlQuery.setInteger("wst_id", wst_id); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
398 sqlQuery.setInteger("column_pos", column_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
399 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
400 List<Object []> qRanges = sqlQuery.list(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
401 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
402 int qSize = qRanges.size(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
403 |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
404 QRangeTree qRangeTree = new QRangeTree( |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
405 qRanges, QRangeTree.WITHOUT_COLUMN, 0, qSize); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
406 columns[0].setQRangeTree(qRangeTree); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
407 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
408 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
409 protected static int [] loadQRangesMap( |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
410 Session session, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
411 WstValueTable.Column [] columns, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
412 int wst_id |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
413 ) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
414 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_QS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
415 .addScalar("column_pos", StandardBasicTypes.INTEGER) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
416 .addScalar("q", StandardBasicTypes.DOUBLE) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
417 .addScalar("a", StandardBasicTypes.DOUBLE) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
418 .addScalar("b", StandardBasicTypes.DOUBLE); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
419 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
420 sqlQuery.setInteger("wst_id", wst_id); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
421 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
422 List<Object []> qRanges = sqlQuery.list(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
423 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
424 int start = -1; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
425 int Q = qRanges.size(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
426 Integer lastColumn = null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
427 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
428 for (int i = 0; i < Q; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
429 Object [] qRange = qRanges.get(i); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
430 Integer columnId = (Integer)qRange[0]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
431 if (lastColumn == null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
432 lastColumn = columnId; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
433 start = i; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
434 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
435 else if (!lastColumn.equals(columnId)) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
436 QRangeTree qRangeTree = new QRangeTree(qRanges, start, i); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
437 columns[lastColumn].setQRangeTree(qRangeTree); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
438 lastColumn = columnId; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
439 start = i; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
440 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
441 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
442 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
443 if (start != -1) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
444 QRangeTree qRangeTree = new QRangeTree(qRanges, start, Q); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
445 columns[lastColumn].setQRangeTree(qRangeTree); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
446 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
447 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
448 return sortColumnsByAverageQ(columns); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
449 |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
450 /* This is debug code to visualize the q ranges trees |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
451 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
452 java.io.PrintWriter out = null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
453 try { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
454 out = new java.io.PrintWriter( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
455 new java.io.FileWriter( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
456 "/tmp/qranges" + System.currentTimeMillis() + ".dot")); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
457 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
458 out.println("graph \"Q ranges trees\" {"); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
459 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
460 for (int i = 0; i < columns.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
461 QRangeTree tree = columns[i].getQRangeTree(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
462 out.println(tree.toGraph()); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
463 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
464 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
465 out.println("}"); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
466 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
467 out.flush(); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
468 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
469 catch (java.io.IOException ioe) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
470 log.error(ioe); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
471 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
472 finally { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
473 if (out != null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
474 out.close(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
475 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
476 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
477 */ |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
478 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
479 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
480 private static final class QIndex implements Comparable<QIndex> { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
481 double q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
482 int index; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
483 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
484 QIndex(double q, int index) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
485 this.q = q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
486 this.index = index; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
487 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
488 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
489 @Override |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
490 public int compareTo(QIndex other) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
491 double diff = q - other.q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
492 if (diff < 0d) return -1; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
493 if (diff > 0d) return +1; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
494 return 0; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
495 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
496 } // class QIndex |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
497 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
498 /** Ensure that the q colums are sorted in ascending order. */ |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
499 protected static int [] sortColumnsByAverageQ(WstValueTable.Column [] columns) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
500 QIndex [] order = new QIndex[columns.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
501 for (int i = 0; i < order.length; ++i) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
502 QRangeTree tree = columns[i].getQRangeTree(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
503 double avg = tree.averageQ(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
504 double max = tree.maxQ(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
505 double q = (avg+max)*0.5d; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
506 order[i] = new QIndex(q, i); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
507 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
508 Arrays.sort(order); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
509 WstValueTable.Column [] copy = new WstValueTable.Column[order.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
510 int [] map = new int[order.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
511 for (int i = 0; i < copy.length; ++i) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
512 copy[i] = columns[order[i].index]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
513 map[order[i].index] = i; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
514 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
515 System.arraycopy(copy, 0, columns, 0, order.length); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
516 return map; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
517 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
518 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
519 protected static int [] loadQRangesMap( |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
520 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
521 WstValueTable.Column [] columns, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
522 Wst wst |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
523 ) { |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
524 return loadQRangesMap(session, columns, wst.getId()); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
525 } |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
526 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
527 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
528 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |