Revision 8ef74e91
Added by Andreas Müller over 5 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelOccurrenceImport.java | ||
---|---|---|
9 | 9 |
|
10 | 10 |
package eu.etaxonomy.cdm.io.berlinModel.in; |
11 | 11 |
|
12 |
import java.net.URI; |
|
13 | 12 |
import java.sql.ResultSet; |
14 | 13 |
import java.sql.SQLException; |
15 | 14 |
import java.util.ArrayList; |
... | ... | |
18 | 17 |
import java.util.List; |
19 | 18 |
import java.util.Map; |
20 | 19 |
import java.util.Set; |
21 |
import java.util.UUID; |
|
22 | 20 |
|
23 | 21 |
import org.apache.commons.lang.StringUtils; |
24 | 22 |
import org.apache.log4j.Logger; |
25 | 23 |
import org.springframework.stereotype.Component; |
26 |
import org.springframework.transaction.TransactionStatus; |
|
27 | 24 |
|
28 | 25 |
import eu.etaxonomy.cdm.common.CdmUtils; |
29 | 26 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
30 | 27 |
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer; |
31 | 28 |
import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelOccurrenceImportValidator; |
32 |
import eu.etaxonomy.cdm.io.common.CdmImportBase; |
|
33 | 29 |
import eu.etaxonomy.cdm.io.common.IOValidator; |
34 | 30 |
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner; |
35 |
import eu.etaxonomy.cdm.io.common.Source; |
|
36 | 31 |
import eu.etaxonomy.cdm.io.common.TdwgAreaProvider; |
37 | 32 |
import eu.etaxonomy.cdm.model.common.Annotation; |
38 | 33 |
import eu.etaxonomy.cdm.model.common.AnnotationType; |
39 | 34 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
40 |
import eu.etaxonomy.cdm.model.common.ExtensionType;
|
|
35 |
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
|
|
41 | 36 |
import eu.etaxonomy.cdm.model.common.Language; |
42 | 37 |
import eu.etaxonomy.cdm.model.common.Marker; |
43 | 38 |
import eu.etaxonomy.cdm.model.common.MarkerType; |
44 | 39 |
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary; |
45 |
import eu.etaxonomy.cdm.model.common.OriginalSourceType; |
|
46 |
import eu.etaxonomy.cdm.model.common.TermType; |
|
47 |
import eu.etaxonomy.cdm.model.common.TermVocabulary; |
|
48 | 40 |
import eu.etaxonomy.cdm.model.description.DescriptionElementBase; |
49 | 41 |
import eu.etaxonomy.cdm.model.description.Distribution; |
50 | 42 |
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm; |
51 | 43 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
52 | 44 |
import eu.etaxonomy.cdm.model.location.NamedArea; |
53 |
import eu.etaxonomy.cdm.model.location.NamedAreaLevel; |
|
54 |
import eu.etaxonomy.cdm.model.location.NamedAreaType; |
|
55 | 45 |
import eu.etaxonomy.cdm.model.reference.Reference; |
56 | 46 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
57 | 47 |
import eu.etaxonomy.cdm.model.taxon.TaxonBase; |
... | ... | |
64 | 54 |
*/ |
65 | 55 |
@Component |
66 | 56 |
public class BerlinModelOccurrenceImport extends BerlinModelImportBase { |
67 |
private static final Logger logger = Logger.getLogger(BerlinModelOccurrenceImport.class); |
|
57 |
|
|
58 |
private static final long serialVersionUID = -7918122767284077183L; |
|
59 |
|
|
60 |
private static final Logger logger = Logger.getLogger(BerlinModelOccurrenceImport.class); |
|
68 | 61 |
|
69 | 62 |
public static final String NAMESPACE = "Occurrence"; |
70 | 63 |
private static final String EM_AREA_NAMESPACE = "emArea"; |
... | ... | |
104 | 97 |
return strQuery; |
105 | 98 |
} |
106 | 99 |
|
107 |
private Map<Integer, NamedArea> euroMedAreas = new HashMap<Integer, NamedArea>();
|
|
100 |
// private Map<Integer, NamedArea> euroMedAreas = new HashMap<>();
|
|
108 | 101 |
|
109 | 102 |
|
110 | 103 |
@Override |
111 | 104 |
public void doInvoke(BerlinModelImportState state) { |
112 |
if (state.getConfig().isUseEmAreaVocabulary()){ |
|
113 |
try { |
|
114 |
createEuroMedAreas(state); |
|
115 |
} catch (Exception e) { |
|
116 |
logger.error("Exception occurred when trying to create euroMed Areas"); |
|
117 |
e.printStackTrace(); |
|
118 |
state.setSuccess(false); |
|
119 |
} |
|
120 |
} |
|
105 |
// if (state.getConfig().isUseEmAreaVocabulary()){
|
|
106 |
// try {
|
|
107 |
// createEuroMedAreas(state);
|
|
108 |
// } catch (Exception e) {
|
|
109 |
// logger.error("Exception occurred when trying to create euroMed Areas");
|
|
110 |
// e.printStackTrace();
|
|
111 |
// state.setSuccess(false);
|
|
112 |
// }
|
|
113 |
// }
|
|
121 | 114 |
super.doInvoke(state); |
122 | 115 |
//reset |
123 |
euroMedAreas = new HashMap<Integer, NamedArea>();
|
|
116 |
// euroMedAreas = new HashMap<>();
|
|
124 | 117 |
} |
125 | 118 |
|
126 |
private TermVocabulary<NamedArea> createEuroMedAreas(BerlinModelImportState state) throws SQLException { |
|
127 |
logger.warn("Start creating E+M areas"); |
|
128 |
Source source = state.getConfig().getSource(); |
|
129 |
Reference sourceReference = state.getConfig().getSourceReference(); |
|
130 |
|
|
131 |
TransactionStatus txStatus = this.startTransaction(); |
|
132 |
|
|
133 |
sourceReference = getSourceReference(sourceReference); |
|
134 |
|
|
135 |
TermVocabulary<NamedArea> euroMedAreas = makeEmptyEuroMedVocabulary(); |
|
136 |
|
|
137 |
MarkerType eurMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurArea, "eur", "eur Area", "eur", getEuroMedMarkerTypeVoc()); |
|
138 |
MarkerType euroMedAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurMedArea, "EuroMedArea", "EuroMedArea", "EuroMedArea", getEuroMedMarkerTypeVoc()); |
|
139 |
ExtensionType isoCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidIsoCode, "IsoCode", "IsoCode", "iso"); |
|
140 |
ExtensionType tdwgCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidTdwgAreaCode, "TDWG code", "TDWG Area code", "tdwg"); |
|
141 |
ExtensionType mclCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidMclCode, "MCL code", "MedCheckList code", "mcl"); |
|
142 |
NamedAreaLevel areaLevelTop = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelTop, "Euro+Med top area level", "Euro+Med top area level. This level is only to be used for the area representing the complete Euro+Med area", "e+m top", null); |
|
143 |
NamedAreaLevel areaLevelEm1 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelFirst, "Euro+Med 1. area level", "Euro+Med 1. area level", "e+m 1.", null); |
|
144 |
NamedAreaLevel areaLevelEm2 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelSecond, "Euro+Med 2. area level", "Euro+Med 2. area level", "Euro+Med 1. area level", null); |
|
145 |
|
|
146 |
|
|
147 |
String sql = "SELECT * , CASE WHEN EMCode = 'EM' THEN 'a' ELSE 'b' END as isEM " + |
|
148 |
" FROM emArea " + |
|
149 |
" ORDER BY isEM, EMCode"; |
|
150 |
ResultSet rs = source.getResultSet(sql); |
|
151 |
|
|
152 |
NamedArea euroMedArea = null; |
|
153 |
NamedArea lastLevel1Area = null; |
|
154 |
|
|
155 |
//euroMedArea (EMCode = 'EM') |
|
156 |
rs.next(); |
|
157 |
euroMedArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType, isoCodeExtType, tdwgCodeExtType, mclCodeExtType, |
|
158 |
areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area); |
|
159 |
euroMedAreas.addTerm(euroMedArea); |
|
160 |
|
|
161 |
//all other areas |
|
162 |
while (rs.next()){ |
|
163 |
NamedArea newArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType, |
|
164 |
isoCodeExtType, tdwgCodeExtType, mclCodeExtType, |
|
165 |
areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area); |
|
166 |
if (newArea != null){ |
|
167 |
euroMedAreas.addTerm(newArea); |
|
168 |
if (newArea.getPartOf().equals(euroMedArea)){ |
|
169 |
lastLevel1Area = newArea; |
|
170 |
} |
|
171 |
} |
|
172 |
} |
|
173 |
emAreaFinetuning(euroMedAreas, areaLevelEm2); |
|
174 |
|
|
175 |
markAreasAsHidden(state, euroMedAreas); |
|
176 |
|
|
177 |
getVocabularyService().saveOrUpdate(euroMedAreas); |
|
178 |
|
|
179 |
try { |
|
180 |
commitTransaction(txStatus); |
|
181 |
} catch (Exception e) { |
|
182 |
e.printStackTrace(); |
|
183 |
logger.error("An exception occurred when trying to commit E+M Areas"); |
|
184 |
} |
|
185 |
logger.warn("Created E+M areas"); |
|
186 |
|
|
187 |
return euroMedAreas; |
|
188 |
} |
|
189 |
|
|
190 |
/** |
|
191 |
* @param areaLevelEm2 |
|
192 |
* @param euroMedAreas2 |
|
119 |
/** |
|
120 |
* @param emCode |
|
121 |
* @return |
|
193 | 122 |
*/ |
194 |
private void emAreaFinetuning(TermVocabulary<NamedArea> euroMedAreas, NamedAreaLevel areaLevelEm2) { |
|
195 |
//CZ |
|
196 |
NamedArea oldArea = euroMedAreas.getTermByIdInvocabulary("Cz"); |
|
197 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cs"), areaLevelEm2); |
|
198 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sk"), areaLevelEm2); |
|
199 |
|
|
200 |
//Ju |
|
201 |
oldArea = euroMedAreas.getTermByIdInvocabulary("Ju"); |
|
202 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("BH"), areaLevelEm2); |
|
203 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cg"), areaLevelEm2); |
|
204 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ct"), areaLevelEm2); |
|
205 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Mk"), areaLevelEm2); |
|
206 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sl"), areaLevelEm2); |
|
207 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sr"), areaLevelEm2); |
|
208 |
|
|
209 |
//IJ |
|
210 |
oldArea = euroMedAreas.getTermByIdInvocabulary("IJ"); |
|
211 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ir"), areaLevelEm2); |
|
212 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Jo"), areaLevelEm2); |
|
213 |
|
|
214 |
//LS |
|
215 |
oldArea = euroMedAreas.getTermByIdInvocabulary("LS"); |
|
216 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Le"), areaLevelEm2); |
|
217 |
makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sy"), areaLevelEm2); |
|
218 |
|
|
219 |
} |
|
220 |
|
|
221 |
//5.Mark areas to be hidden #3979 .5 |
|
222 |
private void markAreasAsHidden(BerlinModelImportState state, TermVocabulary<NamedArea> euroMedAreasVoc) { |
|
223 |
|
|
224 |
try { |
|
225 |
|
|
226 |
@SuppressWarnings("unchecked") |
|
227 |
TermVocabulary<MarkerType> vocUserDefinedMarkerTypes = getVocabularyService().find(CdmImportBase.uuidUserDefinedMarkerTypeVocabulary); |
|
228 |
if (vocUserDefinedMarkerTypes == null){ |
|
229 |
String message = "Marker type vocabulary could not be found. Hidden areas not added."; |
|
230 |
logger.error(message); |
|
231 |
System.out.println(message); |
|
123 |
private NamedArea getAreaByAreaId(int areaId) { |
|
124 |
NamedArea result = null; |
|
125 |
String areaIdStr = String.valueOf(areaId); |
|
126 |
OrderedTermVocabulary<NamedArea> voc = getAreaVoc(); |
|
127 |
for (NamedArea area : voc.getTerms()){ |
|
128 |
for (IdentifiableSource source : area.getSources()){ |
|
129 |
if (areaIdStr.equals(source.getIdInSource()) && BerlinModelAreaImport.NAMESPACE.equals(source.getIdNamespace())){ |
|
130 |
if (result != null){ |
|
131 |
logger.warn("Result for areaId already exists. areaId: " + areaId); |
|
132 |
} |
|
133 |
result = area; |
|
134 |
} |
|
232 | 135 |
} |
233 |
MarkerType hiddenAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidHiddenArea, |
|
234 |
"Hidden Area","Used to hide distributions for the named areas in publications", null, getEuroMedMarkerTypeVoc()); |
|
235 |
|
|
236 |
//Add hidden area marker to Rs(C) and Rs(N) |
|
237 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs); |
|
238 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_B); |
|
239 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_C); |
|
240 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_E); |
|
241 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_N); |
|
242 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_K); |
|
243 |
hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_W); |
|
244 |
} catch (Exception e) { |
|
245 |
e.printStackTrace(); |
|
246 |
logger.error("Exception in markAreasAsHidden: " + e.getMessage()); |
|
247 | 136 |
} |
248 |
|
|
137 |
return result; |
|
249 | 138 |
} |
250 | 139 |
|
251 |
private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType hiddenAreaMarkerType, UUID areaUuid) { |
|
252 |
for (NamedArea namedArea : euroMedAreasVoc){ |
|
253 |
if (namedArea.getUuid().equals(areaUuid)){ |
|
254 |
namedArea.addMarker(Marker.NewInstance(hiddenAreaMarkerType, true)); |
|
255 |
return; |
|
256 |
} |
|
140 |
private OrderedTermVocabulary<NamedArea> areaVoc; |
|
141 |
@SuppressWarnings("unchecked") |
|
142 |
private OrderedTermVocabulary<NamedArea> getAreaVoc(){ |
|
143 |
if (areaVoc == null){ |
|
144 |
areaVoc = (OrderedTermVocabulary<NamedArea>)getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas); |
|
257 | 145 |
} |
146 |
return areaVoc; |
|
258 | 147 |
} |
259 | 148 |
|
260 |
/** |
|
261 |
* @param oldArea |
|
262 |
* @param namedArea |
|
263 |
* @param areaLevelEm2 |
|
264 |
*/ |
|
265 |
private void makeSubterm(NamedArea oldArea, NamedArea namedArea, NamedAreaLevel areaLevelEm2) { |
|
266 |
namedArea.setLevel(areaLevelEm2); |
|
267 |
namedArea.setPartOf(oldArea); |
|
268 |
} |
|
269 |
|
|
270 |
/** |
|
271 |
* @param sourceReference |
|
272 |
* @return |
|
273 |
*/ |
|
274 |
private Reference getSourceReference(Reference sourceReference) { |
|
275 |
Reference persistentSourceReference = getReferenceService().find(sourceReference.getUuid()); //just to be sure |
|
276 |
if (persistentSourceReference != null){ |
|
277 |
sourceReference = persistentSourceReference; |
|
278 |
} |
|
279 |
return sourceReference; |
|
280 |
} |
|
281 |
|
|
282 |
/** |
|
283 |
* @param eurMarkerType |
|
284 |
* @param euroMedAreaMarkerType |
|
285 |
* @param isoCodeExtType |
|
286 |
* @param tdwgCodeExtType |
|
287 |
* @param mclCodeExtType |
|
288 |
* @param rs |
|
289 |
* @param areaLevelEm2 |
|
290 |
* @param areaLevelEm1 |
|
291 |
* @param areaLevelTop |
|
292 |
* @throws SQLException |
|
293 |
*/ |
|
294 |
private NamedArea makeSingleEuroMedArea(ResultSet rs, MarkerType eurMarkerType, |
|
295 |
MarkerType euroMedAreaMarkerType, ExtensionType isoCodeExtType, |
|
296 |
ExtensionType tdwgCodeExtType, ExtensionType mclCodeExtType, |
|
297 |
NamedAreaLevel areaLevelTop, NamedAreaLevel areaLevelEm1, NamedAreaLevel areaLevelEm2, |
|
298 |
Reference sourceReference, NamedArea euroMedArea, NamedArea level1Area) throws SQLException { |
|
299 |
Integer areaId = rs.getInt("AreaId"); |
|
300 |
String emCode = nullSafeTrim(rs.getString("EMCode")); |
|
301 |
String isoCode = nullSafeTrim(rs.getString("ISOCode")); |
|
302 |
String tdwgCode = nullSafeTrim(rs.getString("TDWGCode")); |
|
303 |
String unit = nullSafeTrim(rs.getString("Unit")); |
|
304 |
// ,[Status] |
|
305 |
// ,[OutputOrder] |
|
306 |
boolean eurMarker = rs.getBoolean("eur"); |
|
307 |
boolean euroMedAreaMarker = rs.getBoolean("EuroMedArea"); |
|
308 |
String notes = nullSafeTrim(rs.getString("Notes")); |
|
309 |
String mclCode = nullSafeTrim(rs.getString("MCLCode")); |
|
310 |
String geoSearch = nullSafeTrim(rs.getString("NameForGeoSearch")); |
|
311 |
|
|
312 |
|
|
313 |
|
|
314 |
if (isBlank(emCode)){ |
|
315 |
emCode = unit; |
|
316 |
} |
|
317 |
|
|
318 |
//uuid |
|
319 |
UUID uuid = BerlinModelTransformer.getEMAreaUuid(emCode); |
|
320 |
NamedArea area = (NamedArea)getTermService().find(uuid); |
|
321 |
if (area == null){ |
|
322 |
//label |
|
323 |
area = NamedArea.NewInstance(geoSearch, unit, emCode); |
|
324 |
if (uuid != null){ |
|
325 |
area.setUuid(uuid); |
|
326 |
}else{ |
|
327 |
if (areaId == 211 || areaId == 213){ //Additional Azores and Canary Is. area are merged into primary area, see also area.addSource part below |
|
328 |
return null; |
|
329 |
} |
|
330 |
logger.warn("Uuid for emCode could not be defined: " + emCode); |
|
331 |
} |
|
332 |
} |
|
333 |
|
|
334 |
|
|
335 |
//code |
|
336 |
area.setIdInVocabulary(emCode); |
|
337 |
//notes |
|
338 |
if (StringUtils.isNotEmpty(notes)){ |
|
339 |
area.addAnnotation(Annotation.NewInstance(notes, AnnotationType.EDITORIAL(), Language.DEFAULT())); |
|
340 |
} |
|
341 |
//markers |
|
342 |
area.addMarker(Marker.NewInstance(eurMarkerType, eurMarker)); |
|
343 |
area.addMarker(Marker.NewInstance(euroMedAreaMarkerType, euroMedAreaMarker)); |
|
344 |
|
|
345 |
//extensions |
|
346 |
if (isNotBlank(isoCode)){ |
|
347 |
area.addExtension(isoCode, isoCodeExtType); |
|
348 |
} |
|
349 |
if (isNotBlank(tdwgCode)){ |
|
350 |
area.addExtension(tdwgCode, tdwgCodeExtType); |
|
351 |
} |
|
352 |
if (isNotBlank(mclCode)){ |
|
353 |
area.addExtension(mclCode, mclCodeExtType); |
|
354 |
} |
|
355 |
|
|
356 |
//type |
|
357 |
area.setType(NamedAreaType.ADMINISTRATION_AREA()); |
|
358 |
|
|
359 |
//source |
|
360 |
area.addSource(OriginalSourceType.Import, String.valueOf(areaId), EM_AREA_NAMESPACE, sourceReference, null); |
|
361 |
//add duplicate area ids for canary |
|
362 |
if (areaId == 624){ //Canary Is. |
|
363 |
area.addSource(OriginalSourceType.Import, String.valueOf(213), EM_AREA_NAMESPACE, sourceReference, null); |
|
364 |
} |
|
365 |
if (areaId == 210){//Azores |
|
366 |
area.addSource(OriginalSourceType.Import, String.valueOf(211), EM_AREA_NAMESPACE, sourceReference, null); |
|
367 |
} |
|
368 |
|
|
369 |
//parent |
|
370 |
if (euroMedArea != null){ |
|
371 |
if (emCode.contains("(")){ |
|
372 |
area.setPartOf(level1Area); |
|
373 |
area.setLevel(areaLevelEm2); |
|
374 |
}else{ |
|
375 |
area.setPartOf(euroMedArea); |
|
376 |
area.setLevel(areaLevelEm1); |
|
377 |
} |
|
378 |
}else{ |
|
379 |
area.setLevel(areaLevelTop); |
|
380 |
} |
|
381 |
this.euroMedAreas.put(areaId, area); |
|
382 |
|
|
383 |
//save |
|
384 |
getTermService().saveOrUpdate(area); |
|
385 |
|
|
386 |
return area; |
|
387 |
} |
|
388 | 149 |
|
389 | 150 |
private String nullSafeTrim(String string) { |
390 | 151 |
if (string == null){ |
... | ... | |
394 | 155 |
} |
395 | 156 |
} |
396 | 157 |
|
397 |
/** |
|
398 |
* |
|
399 |
*/ |
|
400 |
private TermVocabulary<NamedArea> makeEmptyEuroMedVocabulary() { |
|
401 |
TermType type = TermType.NamedArea; |
|
402 |
String description = "Euro+Med area vocabulary"; |
|
403 |
String label = "E+M areas"; |
|
404 |
String abbrev = null; |
|
405 |
URI termSourceUri = null; |
|
406 |
OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewInstance(type, description, label, abbrev, termSourceUri); |
|
407 |
|
|
408 |
result.setUuid(BerlinModelTransformer.uuidVocEuroMedAreas); |
|
409 |
getVocabularyService().save(result); |
|
410 |
return result; |
|
411 |
} |
|
412 |
|
|
413 | 158 |
@Override |
414 | 159 |
public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) { |
415 | 160 |
boolean success = true; |
416 |
Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();
|
|
161 |
Set<TaxonBase> taxaToSave = new HashSet<>(); |
|
417 | 162 |
|
418 | 163 |
Map<String, TaxonBase<?>> taxonMap = partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE); |
419 | 164 |
|
... | ... | |
422 | 167 |
try { |
423 | 168 |
//map to store the mapping of duplicate berlin model occurrences to their real distributions |
424 | 169 |
//duplicated may occur due to area mappings from BM areas to TDWG areas |
425 |
Map<Integer, String> duplicateMap = new HashMap<Integer, String>();
|
|
170 |
Map<Integer, String> duplicateMap = new HashMap<>(); |
|
426 | 171 |
int oldTaxonId = -1; |
427 | 172 |
TaxonDescription oldDescription = null; |
428 | 173 |
int i = 0; |
... | ... | |
453 | 198 |
|
454 | 199 |
Reference sourceRef = state.getTransactionalSourceReference(); |
455 | 200 |
|
456 |
List<NamedArea> areas = makeAreaList(state, rs, occurrenceId);
|
|
201 |
List<NamedArea> areas = makeAreaList(state, partitioner, rs, occurrenceId);
|
|
457 | 202 |
|
458 | 203 |
//create description(elements) |
459 | 204 |
TaxonDescription taxonDescription = getTaxonDescription(newTaxonId, oldTaxonId, oldDescription, taxonMap, occurrenceId, sourceRef); |
... | ... | |
513 | 258 |
|
514 | 259 |
/** |
515 | 260 |
* @param state |
261 |
* @param partitioner |
|
516 | 262 |
* @param rs |
517 | 263 |
* @param occurrenceId |
518 | 264 |
* @param tdwgCodeString |
... | ... | |
521 | 267 |
* @throws SQLException |
522 | 268 |
*/ |
523 | 269 |
//Create area list |
524 |
private List<NamedArea> makeAreaList(BerlinModelImportState state, ResultSet rs, int occurrenceId) throws SQLException { |
|
525 |
List<NamedArea> areas = new ArrayList<NamedArea>(); |
|
270 |
private List<NamedArea> makeAreaList(BerlinModelImportState state, ResultSetPartitioner partitioner, ResultSet rs, int occurrenceId) throws SQLException { |
|
271 |
|
|
272 |
List<NamedArea> areas = new ArrayList<>(); |
|
526 | 273 |
|
527 | 274 |
if (state.getConfig().isUseEmAreaVocabulary()){ |
528 |
Integer areaId = rs.getInt("AreaId"); |
|
529 |
NamedArea area = this.euroMedAreas.get(areaId); |
|
275 |
Integer areaId = rs.getInt("AreaId"); |
|
276 |
NamedArea area = getAreaByAreaId(areaId); |
|
277 |
if (area == null){ |
|
278 |
logger.warn("Area for areaId " + areaId + " not found."); |
|
279 |
} |
|
530 | 280 |
areas.add(area); |
531 | 281 |
}else{ |
532 | 282 |
String tdwgCodeString = rs.getString("TDWGCode"); |
... | ... | |
566 | 316 |
|
567 | 317 |
@Override |
568 | 318 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) { |
569 |
String nameSpace; |
|
570 |
Class<?> cdmClass; |
|
571 |
Set<String> idSet; |
|
572 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>(); |
|
573 | 319 |
|
574 | 320 |
try{ |
321 |
|
|
322 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>(); |
|
575 | 323 |
Set<String> taxonIdSet = new HashSet<String>(); |
576 | 324 |
while (rs.next()){ |
577 | 325 |
handleForeignKey(rs, taxonIdSet, "taxonId"); |
578 | 326 |
} |
579 | 327 |
|
580 | 328 |
//taxon map |
581 |
nameSpace = BerlinModelTaxonImport.NAMESPACE; |
|
582 |
cdmClass = TaxonBase.class; |
|
583 |
idSet = taxonIdSet; |
|
584 |
Map<String, TaxonBase> objectMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
329 |
String nameSpace = BerlinModelTaxonImport.NAMESPACE;
|
|
330 |
Class<?> cdmClass = TaxonBase.class;
|
|
331 |
Set<String> idSet = taxonIdSet;
|
|
332 |
Map<String, ? extends CdmBase> objectMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
585 | 333 |
result.put(nameSpace, objectMap); |
586 | 334 |
|
335 |
return result; |
|
587 | 336 |
} catch (SQLException e) { |
588 | 337 |
throw new RuntimeException(e); |
589 | 338 |
} |
590 |
return result; |
|
591 | 339 |
} |
592 | 340 |
|
593 | 341 |
|
594 |
|
|
595 | 342 |
/** |
596 | 343 |
* Tests if a distribution with the same tdwgArea and the same status already exists in the description. |
597 | 344 |
* If so the old distribution is returned |
Also available in: Unified diff
ref #7346 use E+M area vocabulary for common names