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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
2 * Software engineering by
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
5 *
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
9 */
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
10
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
11 package org.dive4elements.river.importer.uinfo.parsers;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
12
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
13 import java.io.File;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
14 import java.util.ArrayList;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
15 import java.util.EnumMap;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
18 import java.util.regex.Matcher;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
19 import java.util.regex.Pattern;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
20
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
21 import org.apache.log4j.Logger;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
22 import org.dive4elements.river.importer.Config;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
25 import org.dive4elements.river.importer.common.AbstractParser;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
26 import org.dive4elements.river.importer.common.ParsingState;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
27 import org.dive4elements.river.importer.uinfo.importitem.VegetationSeriesImport;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
28 import org.dive4elements.river.importer.uinfo.importitem.VegetationZoneImport;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
33
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
34 /**
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
35 * Reads and parses a vegetation zones file
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
36 *
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
37 * @author Matthias Schäfer
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
38 *
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
39 */
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
40 public class VegetationParser extends AbstractParser<Vegetation, VegetationZone, VegetationZoneImport, VegetationSeriesImport> {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
41
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
42 /***** FIELDS *****/
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
43
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
44 private static final Logger log = Logger.getLogger(VegetationParser.class);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
50 private static final Pattern META_NAME = Pattern.compile("^#\\sEinteilung:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
51
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
52 private static final Pattern META_COLUMNTITLES = Pattern.compile("^#*\\s*Vegetationstyp\\s*;.+", Pattern.CASE_INSENSITIVE);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
53
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
54 private enum ColTitlePattern {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
60
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
61 private final Pattern pattern;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
62
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
63 ColTitlePattern(final String regexp) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
64 this.pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
65 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
66
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
67 public Pattern getPattern() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
68 return this.pattern;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
69 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
70 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
71
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
72 private final EnumMap<ColTitlePattern, Integer> cols = new EnumMap<>(ColTitlePattern.class);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
73
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
74 private int previousClassNo;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
75
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
76 private int previousDaysLimit;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
77
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
78
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
79 /***** CONSTRUCTORS *****/
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
80
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
81 public VegetationParser(final File importPath, final File rootRelativePath, final ImportRiver river) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
82 super(importPath, rootRelativePath, river);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
83 this.previousClassNo = 0;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
84 this.previousDaysLimit = -1;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
85 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
86
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
87
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
88 /***** METHODS *****/
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
89
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
90 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
91 protected Logger getLog() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
92 return log;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
93 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
94
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
95 /**
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
96 * Whether this import type shall be skipped
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
97 */
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
98 public static boolean shallSkip() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
99 return Config.INSTANCE.skipUInfoVegetation();
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
100 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
101
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
102 /**
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
103 * Creates a list of parsers for all vegetation import files in a directory
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
104 */
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
105 public static List<VegetationParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
110 return parsers;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
111 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
112
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
113 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
114 protected KmMode kmMode() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
115 return KmMode.NONE;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
116 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
117
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
118 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
119 protected VegetationSeriesImport createSeriesImport(final String filename) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
120 return new VegetationSeriesImport(filename);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
121 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
122
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
123 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
128 return true;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
129 else
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
130 return false;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
131 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
142 private boolean handleMetaName() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
143 final Matcher m = META_NAME.matcher(this.currentLine);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
144 if (m.matches()) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
145 this.metaPatternsMatched.add(META_NAME);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
146 this.seriesHeader.setName(parseMetaInfo(m.group(1).trim()));
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
147 return true;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
148 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
149 return false;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
150 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
151
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
152 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
153 protected boolean handleMetaColumnTitles() {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
154 if (!META_COLUMNTITLES.matcher(this.currentLine).matches())
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
155 return false;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
156 this.metaPatternsMatched.add(META_COLUMNTITLES);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
157 this.columnTitles.clear();
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
158 final String[] titles = this.currentLine.split(SEPARATOR_CHAR, 0);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
159 for (int i = 0; i <= titles.length - 1; i++)
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
160 this.columnTitles.add(titles[i].trim());
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
161 for (final ColTitlePattern col : ColTitlePattern.values())
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
162 this.cols.put(col, -1);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
163 for (int i = 1; i <= this.columnTitles.size() - 1; i++) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
164 for (final ColTitlePattern col : ColTitlePattern.values()) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
165 if (col.getPattern().matcher(this.columnTitles.get(i)).matches()) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
166 this.cols.put(col, i);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
167 break;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
168 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
169 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
186 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
187 return true;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
188 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
189
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
190 @Override
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
193 int classNo = 0;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
194 try {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
195 if (!values[this.cols.get(ColTitlePattern.OVERFLOW_LIMIT)].trim().isEmpty())
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
196 daysLimit = Integer.parseInt(values[this.cols.get(ColTitlePattern.OVERFLOW_LIMIT)]);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
197 classNo = Integer.parseInt(values[this.cols.get(ColTitlePattern.CLASSNO)]);
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
198 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
201 return null;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
202 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
203 // Check completeness of vegetation zone type set, if needed
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
204 // if (classNo != this.previousClassNo + 1) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
205 // logError("Wrong vegetation zone class number or wrong class order: line " + this.in.getLineNumber());
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
206 // return null;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
207 // }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
208 // if (!this.types.containsKey(Integer.valueOf(classNo))) {
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
209 // logError("Unknown vegetation zone class: line " + this.in.getLineNumber());
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
210 // return null;
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
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
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
253 }
201817aa7b1c Added the missing vegetation import classes
mschaefer
parents:
diff changeset
254 }

http://dive4elements.wald.intevation.org