comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensity.java @ 7460:2733b4aae74b

flys/issue1625: Changed default sediment density factor from 1.8 to 1.9 . The value can be changed by adusting conf.xml (/artifact-databae/options/sediment-density-factor/text()).
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 29 Oct 2013 19:46:41 +0100
parents 2facd4066a28
children 52c364813cb1
comparison
equal deleted inserted replaced
7459:9434437a1ef5 7460:2733b4aae74b
6 * documentation coming with Dive4Elements River for details. 6 * documentation coming with Dive4Elements River for details.
7 */ 7 */
8 8
9 package org.dive4elements.river.artifacts.model.minfo; 9 package org.dive4elements.river.artifacts.model.minfo;
10 10
11 import java.io.Serializable;
12
11 import java.util.ArrayList; 13 import java.util.ArrayList;
12 import java.util.Collections; 14 import java.util.Collections;
13 import java.util.HashMap; 15 import java.util.HashMap;
14 import java.util.List; 16 import java.util.List;
15 import java.util.Map; 17 import java.util.Map;
16 import java.util.Set; 18 import java.util.Set;
17 import java.util.TreeMap; 19 import java.util.TreeMap;
18 20
19 import java.io.Serializable;
20
21 import org.apache.log4j.Logger; 21 import org.apache.log4j.Logger;
22
23 import org.dive4elements.artifacts.common.utils.Config;
22 24
23 25
24 /** Sediment Densities for multiple years. */ 26 /** Sediment Densities for multiple years. */
25 public class SedimentDensity implements Serializable 27 public class SedimentDensity implements Serializable
26 { 28 {
27 private static final Logger logger = Logger 29 private static final Logger logger = Logger
28 .getLogger(SedimentDensity.class); 30 .getLogger(SedimentDensity.class);
29 31
32 public static final double DEFAULT_SEDIMNET_DENSITY_FACTOR = 1.9;
33
34 public static String SEDIMENT_DENSITY_FACTOR_XPATH =
35 "/artifact-database/options/sediment-density-factor/text()";
36
37 public static final double SEDIMNET_DENSITY_FACTOR =
38 getSedimentDensityFactor();
39
30 private Map<Integer, List<SedimentDensityValue>> densities; 40 private Map<Integer, List<SedimentDensityValue>> densities;
31 private List<Integer> years; 41 private List<Integer> years;
42
43
44 /** Figures out the sediment density factor from global config. */
45 private static final double getSedimentDensityFactor() {
46
47 double factor = DEFAULT_SEDIMNET_DENSITY_FACTOR;
48
49 String factorString =
50 Config.getStringXPath(SEDIMENT_DENSITY_FACTOR_XPATH);
51
52 if (factorString != null) {
53 try {
54 factor = Double.parseDouble(factorString.trim());
55 }
56 catch (NumberFormatException nfe) {
57 logger.error(nfe);
58 }
59 }
60
61 logger.info("Sedmiment density factor: " + factor);
62
63 return factor;
64 }
32 65
33 public SedimentDensity() { 66 public SedimentDensity() {
34 this.densities = new HashMap<Integer, List<SedimentDensityValue>>(); 67 this.densities = new HashMap<Integer, List<SedimentDensityValue>>();
35 this.years = new ArrayList<Integer>(); 68 this.years = new ArrayList<Integer>();
36 } 69 }
78 Collections.sort(this.years); 111 Collections.sort(this.years);
79 if (this.years.size() == 1 && years.get(0) <= year) { 112 if (this.years.size() == 1 && years.get(0) <= year) {
80 logger.debug("get density from year " + year + " at km " + km); 113 logger.debug("get density from year " + year + " at km " + km);
81 return getDensityAtKm(densities.get(years.get(0)), km); 114 return getDensityAtKm(densities.get(years.get(0)), km);
82 } 115 }
83 else if (this.years.size() > 1) { 116 if (this.years.size() > 1) {
84 for (int i = 0, I = years.size()-1; i < I; i++) { 117 for (int i = 0, I = years.size()-1; i < I; i++) {
85 int y1 = years.get(i); 118 int y1 = years.get(i);
86 int y2 = years.get(i + 1); 119 int y2 = years.get(i + 1);
87 if (year >= y1 && year < y2) { 120 if (year >= y1 && year < y2) {
88 return getDensityAtKm(densities.get(y1), km); 121 return getDensityAtKm(densities.get(y1), km);
90 else if (year >= y2 && i == years.size() -1) { 123 else if (year >= y2 && i == years.size() -1) {
91 return getDensityAtKm(densities.get(y2), km); 124 return getDensityAtKm(densities.get(y2), km);
92 } 125 }
93 } 126 }
94 } 127 }
95 return 1.8d; 128 return SEDIMNET_DENSITY_FACTOR;
96 } 129 }
97 130
98 /** Get (sorted) map of km to density of all years. */ 131 /** Get (sorted) map of km to density of all years. */
99 public double[][] getAllDensities() 132 public double[][] getAllDensities()
100 { 133 {

http://dive4elements.wald.intevation.org