Revision bb38665e
Added by Andreas Müller over 10 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraSpecimenImportBase.java | ||
---|---|---|
24 | 24 |
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase; |
25 | 25 |
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner; |
26 | 26 |
import eu.etaxonomy.cdm.io.common.Source; |
27 |
import eu.etaxonomy.cdm.io.common.TdwgAreaProvider; |
|
27 | 28 |
import eu.etaxonomy.cdm.model.agent.Team; |
28 | 29 |
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; |
29 | 30 |
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary; |
31 |
import eu.etaxonomy.cdm.model.common.TermType; |
|
30 | 32 |
import eu.etaxonomy.cdm.model.common.TimePeriod; |
31 | 33 |
import eu.etaxonomy.cdm.model.description.DescriptionBase; |
32 | 34 |
import eu.etaxonomy.cdm.model.description.Feature; |
... | ... | |
36 | 38 |
import eu.etaxonomy.cdm.model.location.NamedArea; |
37 | 39 |
import eu.etaxonomy.cdm.model.location.Point; |
38 | 40 |
import eu.etaxonomy.cdm.model.location.ReferenceSystem; |
39 |
import eu.etaxonomy.cdm.model.location.TdwgArea; |
|
40 |
import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry; |
|
41 |
import eu.etaxonomy.cdm.model.location.Country; |
|
41 | 42 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
43 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; |
|
42 | 44 |
import eu.etaxonomy.cdm.model.reference.Reference; |
43 | 45 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
44 | 46 |
|
... | ... | |
98 | 100 |
TransactionStatus txStatus = this.startTransaction(); |
99 | 101 |
|
100 | 102 |
boolean isOrdered = true; |
101 |
OrderedTermVocabulary<State> climateVoc = (OrderedTermVocabulary)getVocabulary(uuidVocAlgaTerraClimate, "Climate", "Climate", abbrevLabel, uri, isOrdered, null); |
|
102 |
OrderedTermVocabulary<State> habitatVoc = (OrderedTermVocabulary)getVocabulary(uuidVocAlgaTerraHabitat, "Habitat", "Habitat", abbrevLabel, uri, isOrdered, null); |
|
103 |
OrderedTermVocabulary<State> lifeformVoc = (OrderedTermVocabulary)getVocabulary(uuidVocAlgaTerraLifeForm, "Lifeform", "Lifeform", abbrevLabel, uri, isOrdered, null); |
|
103 |
OrderedTermVocabulary<State> climateVoc = (OrderedTermVocabulary)getVocabulary(TermType.State, uuidVocAlgaTerraClimate, "Climate", "Climate", abbrevLabel, uri, isOrdered, null);
|
|
104 |
OrderedTermVocabulary<State> habitatVoc = (OrderedTermVocabulary)getVocabulary(TermType.State, uuidVocAlgaTerraHabitat, "Habitat", "Habitat", abbrevLabel, uri, isOrdered, null);
|
|
105 |
OrderedTermVocabulary<State> lifeformVoc = (OrderedTermVocabulary)getVocabulary(TermType.State, uuidVocAlgaTerraLifeForm, "Lifeform", "Lifeform", abbrevLabel, uri, isOrdered, null);
|
|
104 | 106 |
|
105 | 107 |
|
106 | 108 |
Feature feature = getFeature(state, uuidFeatureAlgaTerraClimate, "Climate","Climate", null, null); |
... | ... | |
174 | 176 |
String geoCodeMethod = rs.getString("GeoCodeMethod"); |
175 | 177 |
|
176 | 178 |
Integer altitude = nullSafeInt(rs, "Altitude"); |
177 |
Integer lowerAltitude = nullSafeInt(rs,"AltitudeLowerValue"); |
|
179 |
Integer lowerAltitude = nullSafeInt(rs, "AltitudeLowerValue");
|
|
178 | 180 |
String altitudeUnit = rs.getString("AltitudeUnit"); |
179 | 181 |
Double depth = nullSafeDouble(rs, "Depth"); |
180 | 182 |
Double depthLow = nullSafeDouble(rs, "DepthLow"); |
... | ... | |
201 | 203 |
if (lowerAltitude == null){ |
202 | 204 |
facade.setAbsoluteElevation(altitude); |
203 | 205 |
}else{ |
204 |
if (! facade.isEvenDistance(lowerAltitude, altitude)){ |
|
205 |
//FIXME there is a ticket for this |
|
206 |
altitude = altitude + 1; |
|
207 |
logger.info("Current implementation of altitude does not allow uneven distances"); |
|
208 |
} |
|
209 | 206 |
facade.setAbsoluteElevationRange(lowerAltitude,altitude); |
210 | 207 |
} |
211 | 208 |
} |
212 | 209 |
if ( depth != null){ |
213 |
//FIXME needs model change to accept double #3072 |
|
214 |
Integer intDepth = depth.intValue(); |
|
215 | 210 |
if (depthLow == null){ |
216 |
facade.setDistanceToWaterSurface(intDepth);
|
|
211 |
facade.setDistanceToWaterSurface(depth);
|
|
217 | 212 |
}else{ |
218 |
//FIXME range not yet in model #3074
|
|
219 |
facade.setDistanceToWaterSurface(intDepth);
|
|
213 |
//TODO which direction is correct?
|
|
214 |
facade.setDistanceToWaterSurfaceRange(depth, depthLow);
|
|
220 | 215 |
} |
221 | 216 |
} |
222 | 217 |
|
... | ... | |
234 | 229 |
|
235 | 230 |
//id, created, updated, notes |
236 | 231 |
if (unitId != null){ |
237 |
this.doIdCreatedUpdatedNotes(state, facade.innerFieldObservation(), rs, unitId, getFieldObservationNameSpace());
|
|
232 |
this.doIdCreatedUpdatedNotes(state, facade.innerFieldUnit(), rs, unitId, getFieldObservationNameSpace());
|
|
238 | 233 |
}else{ |
239 |
logger.warn("FieldObservation has no unitId: " + facade.innerFieldObservation() + ": " + getFieldObservationNameSpace());
|
|
234 |
logger.warn("FieldObservation has no unitId: " + facade.innerFieldUnit() + ": " + getFieldObservationNameSpace());
|
|
240 | 235 |
} |
241 | 236 |
} catch (Exception e) { |
242 | 237 |
throw new RuntimeException(e); |
... | ... | |
276 | 271 |
|
277 | 272 |
|
278 | 273 |
protected DescriptionBase getFieldObservationDescription(DerivedUnitFacade facade) { |
279 |
Set<DescriptionBase> descriptions = facade.innerFieldObservation().getDescriptions();
|
|
274 |
Set<DescriptionBase> descriptions = facade.innerFieldUnit().getDescriptions();
|
|
280 | 275 |
for (DescriptionBase desc : descriptions){ |
281 | 276 |
if (desc.isImageGallery() == false){ |
282 | 277 |
return desc; |
283 | 278 |
} |
284 | 279 |
} |
285 |
SpecimenDescription specDesc = SpecimenDescription.NewInstance(facade.innerFieldObservation());
|
|
280 |
SpecimenDescription specDesc = SpecimenDescription.NewInstance(facade.innerFieldUnit());
|
|
286 | 281 |
descriptions.add(specDesc); |
287 | 282 |
return specDesc; |
288 | 283 |
} |
... | ... | |
295 | 290 |
NamedArea tdwgArea; |
296 | 291 |
String tdwg4 = rs.getString("L4Code"); |
297 | 292 |
if (isNotBlank(tdwg4)){ |
298 |
tdwgArea = TdwgArea.getAreaByTdwgAbbreviation(tdwg4); |
|
293 |
tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(tdwg4);
|
|
299 | 294 |
}else{ |
300 | 295 |
String tdwg3 = rs.getString("L3Code"); |
301 | 296 |
if (isNotBlank(tdwg3)){ |
302 |
tdwgArea = TdwgArea.getAreaByTdwgAbbreviation(tdwg3); |
|
297 |
tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(tdwg3);
|
|
303 | 298 |
}else{ |
304 | 299 |
Integer tdwg2 = rs.getInt("L2Code"); |
305 |
tdwgArea = TdwgArea.getAreaByTdwgAbbreviation(String.valueOf(tdwg2)); |
|
300 |
tdwgArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(String.valueOf(tdwg2));
|
|
306 | 301 |
} |
307 | 302 |
} |
308 | 303 |
if (tdwgArea == null){ |
... | ... | |
312 | 307 |
} |
313 | 308 |
|
314 | 309 |
//Countries |
315 |
WaterbodyOrCountry country = null;
|
|
310 |
Country country = null; |
|
316 | 311 |
String isoCountry = rs.getString("ISOCountry"); |
317 | 312 |
String countryStr = rs.getString("Country"); |
318 | 313 |
if (isNotBlank(isoCountry)){ |
319 |
country = WaterbodyOrCountry.getWaterbodyOrCountryByIso3166A2(isoCountry);
|
|
314 |
country = Country.getCountryByIso3166A2(isoCountry);
|
|
320 | 315 |
}else if (isNotBlank(countryStr)){ |
321 | 316 |
logger.warn("Country exists but no ISO code"); |
322 | 317 |
} |
... | ... | |
329 | 324 |
} |
330 | 325 |
|
331 | 326 |
//Waterbody |
332 |
WaterbodyOrCountry waterbody = null;
|
|
327 |
NamedArea waterbody = null;
|
|
333 | 328 |
String waterbodyStr = rs.getString("WaterBody"); |
334 | 329 |
if (isNotBlank(waterbodyStr)){ |
335 | 330 |
if (waterbodyStr.equals("Atlantic Ocean")){ |
336 |
waterbody = WaterbodyOrCountry.ATLANTICOCEAN();
|
|
331 |
waterbody = NamedArea.ATLANTICOCEAN();
|
|
337 | 332 |
}else{ |
338 | 333 |
logger.warn("Waterbody not recognized: " + waterbody); |
339 | 334 |
} |
... | ... | |
348 | 343 |
} |
349 | 344 |
|
350 | 345 |
|
351 |
|
|
346 |
protected SpecimenOrObservationType makeDerivedUnitType(String recordBasis) { |
|
347 |
SpecimenOrObservationType result = null; |
|
348 |
if (StringUtils.isBlank(recordBasis)){ |
|
349 |
result = SpecimenOrObservationType.DerivedUnit; |
|
350 |
} else if (recordBasis.equalsIgnoreCase("FossileSpecimen")){ |
|
351 |
result = SpecimenOrObservationType.Fossil; |
|
352 |
}else if (recordBasis.equalsIgnoreCase("HumanObservation")){ |
|
353 |
result = SpecimenOrObservationType.HumanObservation; |
|
354 |
}else if (recordBasis.equalsIgnoreCase("Literature")){ |
|
355 |
//FIXME |
|
356 |
logger.warn("Literature record basis not yet supported"); |
|
357 |
result = SpecimenOrObservationType.DerivedUnit; |
|
358 |
}else if (recordBasis.equalsIgnoreCase("LivingSpecimen")){ |
|
359 |
result = SpecimenOrObservationType.LivingSpecimen; |
|
360 |
}else if (recordBasis.equalsIgnoreCase("MachineObservation")){ |
|
361 |
result = SpecimenOrObservationType.MachineObservation; |
|
362 |
}else if (recordBasis.equalsIgnoreCase("Observation")){ |
|
363 |
result = SpecimenOrObservationType.Observation; |
|
364 |
}else if (recordBasis.equalsIgnoreCase("LivingCulture")){ |
|
365 |
//FIXME |
|
366 |
logger.warn("LivingCulture record basis not yet supported"); |
|
367 |
result = SpecimenOrObservationType.DerivedUnit; |
|
368 |
}else if (recordBasis.equalsIgnoreCase("PreservedSpecimen")){ |
|
369 |
result = SpecimenOrObservationType.PreservedSpecimen; |
|
370 |
} |
|
371 |
return result; |
|
372 |
} |
|
352 | 373 |
|
374 |
|
|
375 |
protected Feature makeFeature(SpecimenOrObservationType type) { |
|
376 |
if (type.equals(SpecimenOrObservationType.DerivedUnit)){ |
|
377 |
return Feature.INDIVIDUALS_ASSOCIATION(); |
|
378 |
}else if (type.isFeatureObservation()){ |
|
379 |
return Feature.OBSERVATION(); |
|
380 |
}else if (type.isPreservedSpecimen()){ |
|
381 |
return Feature.SPECIMEN(); |
|
382 |
} |
|
383 |
logger.warn("No feature defined for derived unit type: " + type); |
|
384 |
return null; |
|
385 |
} |
|
386 |
|
|
353 | 387 |
private ReferenceSystem makeRefrenceSystem(String geoCodeMethod, AlgaTerraImportState state) { |
354 | 388 |
if (StringUtils.isBlank(geoCodeMethod)){ |
355 | 389 |
return null; |
Also available in: Unified diff
reintegrate cdmlib-app-3.3 branch into trunk