Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/VegetationParser.java @ 9661:9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
localized vegetation type names by querying the database instead of translating by resource property,
detecting and cancelling the import of a second vegetation zone file for a river,
detecting, logging, cancelling in case of wrong column titles,
detecting, logging and ignoring lines with missing (color) values,
comparing vegetation zone name and class with the database and logging+ignoring in case of inconsistencies,
starting the most elevated zone with 0 instead of -1 overflow days
author | mschaefer |
---|---|
date | Mon, 23 Mar 2020 16:38:12 +0100 |
parents | 6146358c4842 |
children |
rev | line source |
---|---|
9014 | 1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 | |
11 package org.dive4elements.river.importer.uinfo.parsers; | |
12 | |
13 import java.io.File; | |
14 import java.util.ArrayList; | |
15 import java.util.EnumMap; | |
16 import java.util.List; | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
17 import java.util.Locale; |
9014 | 18 import java.util.regex.Matcher; |
19 import java.util.regex.Pattern; | |
20 | |
21 import org.apache.log4j.Logger; | |
22 import org.dive4elements.river.importer.Config; | |
23 import org.dive4elements.river.importer.ImportRiver; | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
24 import org.dive4elements.river.importer.ImporterSession; |
9014 | 25 import org.dive4elements.river.importer.common.AbstractParser; |
26 import org.dive4elements.river.importer.common.ParsingState; | |
27 import org.dive4elements.river.importer.uinfo.importitem.VegetationSeriesImport; | |
28 import org.dive4elements.river.importer.uinfo.importitem.VegetationZoneImport; | |
29 import org.dive4elements.river.model.uinfo.Vegetation; | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
30 import org.dive4elements.river.model.uinfo.VegetationType; |
9014 | 31 import org.dive4elements.river.model.uinfo.VegetationZone; |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
32 import org.hibernate.Session; |
9014 | 33 |
34 /** | |
35 * Reads and parses a vegetation zones file | |
36 * | |
37 * @author Matthias Schäfer | |
38 * | |
39 */ | |
40 public class VegetationParser extends AbstractParser<Vegetation, VegetationZone, VegetationZoneImport, VegetationSeriesImport> { | |
41 | |
42 /***** FIELDS *****/ | |
43 | |
44 private static final Logger log = Logger.getLogger(VegetationParser.class); | |
45 | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
46 private static final String IMPORT_FILENAME = "Standardvegetationszonen.csv"; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
47 |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
48 private static final Pattern META_FIRST = Pattern.compile("^#\\sVegetationszonen.*", Pattern.CASE_INSENSITIVE); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
49 |
9014 | 50 private static final Pattern META_NAME = Pattern.compile("^#\\sEinteilung:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE); |
51 | |
52 private static final Pattern META_COLUMNTITLES = Pattern.compile("^#*\\s*Vegetationstyp\\s*;.+", Pattern.CASE_INSENSITIVE); | |
53 | |
54 private enum ColTitlePattern { | |
55 OVERFLOW_LIMIT("((.)|(Ue))berflutungsdauer-bis\\s*\\[(.*)\\].*"), // | |
9401
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
56 CLASSNO("Vegetationsklasse.*"), // |
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
57 COLOR_R("Rot"), // |
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
58 COLOR_G("Gr((.)|(ue))n"), // |
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
59 COLOR_B("Blau"); |
9014 | 60 |
61 private final Pattern pattern; | |
62 | |
63 ColTitlePattern(final String regexp) { | |
64 this.pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); | |
65 } | |
66 | |
67 public Pattern getPattern() { | |
68 return this.pattern; | |
69 } | |
70 } | |
71 | |
72 private final EnumMap<ColTitlePattern, Integer> cols = new EnumMap<>(ColTitlePattern.class); | |
73 | |
74 private int previousClassNo; | |
75 | |
76 private int previousDaysLimit; | |
77 | |
78 | |
79 /***** CONSTRUCTORS *****/ | |
80 | |
81 public VegetationParser(final File importPath, final File rootRelativePath, final ImportRiver river) { | |
82 super(importPath, rootRelativePath, river); | |
83 this.previousClassNo = 0; | |
84 this.previousDaysLimit = -1; | |
85 } | |
86 | |
87 | |
88 /***** METHODS *****/ | |
89 | |
90 @Override | |
91 protected Logger getLog() { | |
92 return log; | |
93 } | |
94 | |
95 /** | |
96 * Whether this import type shall be skipped | |
97 */ | |
98 public static boolean shallSkip() { | |
99 return Config.INSTANCE.skipUInfoVegetation(); | |
100 } | |
101 | |
102 /** | |
103 * Creates a list of parsers for all vegetation import files in a directory | |
104 */ | |
105 public static List<VegetationParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) { | |
106 final List<VegetationParser> parsers = new ArrayList<>(); | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
107 final File importFile = new File(importDir, IMPORT_FILENAME); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
108 if (importFile.exists()) |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
109 parsers.add(new VegetationParser(importFile, new File(relativeDir, IMPORT_FILENAME), river)); |
9014 | 110 return parsers; |
111 } | |
112 | |
113 @Override | |
114 protected KmMode kmMode() { | |
115 return KmMode.NONE; | |
116 } | |
117 | |
118 @Override | |
119 protected VegetationSeriesImport createSeriesImport(final String filename) { | |
120 return new VegetationSeriesImport(filename); | |
121 } | |
122 | |
123 @Override | |
124 protected boolean handleMetaOther() { | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
125 if (handleMetaFirst()) |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
126 return true; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
127 else if (handleMetaName()) |
9014 | 128 return true; |
129 else | |
130 return false; | |
131 } | |
132 | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
133 private boolean handleMetaFirst() { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
134 final Matcher m = META_FIRST.matcher(this.currentLine); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
135 if (m.matches()) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
136 this.metaPatternsMatched.add(META_FIRST); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
137 return true; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
138 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
139 return false; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
140 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
141 |
9014 | 142 private boolean handleMetaName() { |
143 final Matcher m = META_NAME.matcher(this.currentLine); | |
144 if (m.matches()) { | |
145 this.metaPatternsMatched.add(META_NAME); | |
146 this.seriesHeader.setName(parseMetaInfo(m.group(1).trim())); | |
147 return true; | |
148 } | |
149 return false; | |
150 } | |
151 | |
152 @Override | |
153 protected boolean handleMetaColumnTitles() { | |
154 if (!META_COLUMNTITLES.matcher(this.currentLine).matches()) | |
155 return false; | |
156 this.metaPatternsMatched.add(META_COLUMNTITLES); | |
157 this.columnTitles.clear(); | |
158 final String[] titles = this.currentLine.split(SEPARATOR_CHAR, 0); | |
159 for (int i = 0; i <= titles.length - 1; i++) | |
160 this.columnTitles.add(titles[i].trim()); | |
161 for (final ColTitlePattern col : ColTitlePattern.values()) | |
162 this.cols.put(col, -1); | |
163 for (int i = 1; i <= this.columnTitles.size() - 1; i++) { | |
164 for (final ColTitlePattern col : ColTitlePattern.values()) { | |
165 if (col.getPattern().matcher(this.columnTitles.get(i)).matches()) { | |
166 this.cols.put(col, i); | |
167 break; | |
168 } | |
169 } | |
170 } | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
171 this.previousClassNo = 0; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
172 this.previousDaysLimit = 0; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
173 return true; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
174 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
175 |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
176 @Override |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
177 protected boolean checkMetaData() { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
178 if (super.checkMetaData() == false) |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
179 return false; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
180 for (final ColTitlePattern value : ColTitlePattern.values()) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
181 if (this.cols.get(value) < 0) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
182 logError("No valid header line with the column titles found"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
183 this.headerParsingState = ParsingState.STOP; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
184 return false; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
185 } |
9014 | 186 } |
187 return true; | |
188 } | |
189 | |
190 @Override | |
191 protected VegetationZoneImport createKmLineImport(final Double km, final String[] values) { | |
9401
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
192 int daysLimit = 366; |
9014 | 193 int classNo = 0; |
194 try { | |
195 if (!values[this.cols.get(ColTitlePattern.OVERFLOW_LIMIT)].trim().isEmpty()) | |
196 daysLimit = Integer.parseInt(values[this.cols.get(ColTitlePattern.OVERFLOW_LIMIT)]); | |
197 classNo = Integer.parseInt(values[this.cols.get(ColTitlePattern.CLASSNO)]); | |
198 } | |
199 catch (final Exception e) { | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
200 logLineWarning("Invalid overflow days limit and/or vegetation zone class (%s)", e.getMessage()); |
9014 | 201 return null; |
202 } | |
203 // Check completeness of vegetation zone type set, if needed | |
204 // if (classNo != this.previousClassNo + 1) { | |
205 // logError("Wrong vegetation zone class number or wrong class order: line " + this.in.getLineNumber()); | |
206 // return null; | |
207 // } | |
208 // if (!this.types.containsKey(Integer.valueOf(classNo))) { | |
209 // logError("Unknown vegetation zone class: line " + this.in.getLineNumber()); | |
210 // return null; | |
211 // } | |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
212 boolean classokay = false; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
213 final Session session = ImporterSession.getInstance().getDatabaseSession(); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
214 for (final VegetationType vt : VegetationType.getTypes(session)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
215 if (classNo == vt.getId().intValue()) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
216 final String dbname = vt.getLocalizedName(Locale.GERMAN); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
217 if (!values[0].equalsIgnoreCase(dbname)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
218 logLineWarning("Wrong Vegetationstyp or Vegetationsklasse (%d is '%s' in the database)", classNo, dbname); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
219 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
220 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
221 classokay = true; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
222 break; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
223 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
224 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
225 if (!classokay) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
226 logLineWarning("Unknown Vegetationsklasse"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
227 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
228 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
229 |
9014 | 230 this.previousClassNo = classNo; |
9509
6146358c4842
Fixed: f2 sign corrected in vegetation zone height calculation, vegetation zone limit handling changed in the importer
mschaefer
parents:
9401
diff
changeset
|
231 final int minDays = this.previousDaysLimit; |
9401
361de818f76e
Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive
mschaefer
parents:
9359
diff
changeset
|
232 this.previousDaysLimit = daysLimit; |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
233 final Integer red = parseIntegerCheckNull(values, this.cols.get(ColTitlePattern.COLOR_R)); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
234 final Integer green = parseIntegerCheckNull(values, this.cols.get(ColTitlePattern.COLOR_G)); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
235 final Integer blue = parseIntegerCheckNull(values, this.cols.get(ColTitlePattern.COLOR_B)); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
236 if ((red == null) || (green == null) || (blue == null)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
237 logLineWarning("One or more color components invalid or missing"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
238 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
239 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
240 if ((red.intValue() < 0) || (red.intValue() > 255)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
241 logLineWarning("Invalid red value"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
242 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
243 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
244 if ((green.intValue() < 0) || (green.intValue() > 255)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
245 logLineError("Invalid green value"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
246 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
247 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
248 if ((blue.intValue() < 0) || (blue.intValue() > 255)) { |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
249 logLineError("Invalid blue value"); |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
250 return null; |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
251 } |
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9509
diff
changeset
|
252 return new VegetationZoneImport(classNo, minDays, daysLimit, red.intValue(), green.intValue(), blue.intValue()); |
9014 | 253 } |
254 } |