Revision bb38665e
Added by Andreas Müller over 10 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraEcoFactImport.java | ||
---|---|---|
22 | 22 |
import org.springframework.stereotype.Component; |
23 | 23 |
|
24 | 24 |
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade; |
25 |
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade.DerivedUnitType; |
|
26 | 25 |
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraSpecimenImportValidator; |
27 | 26 |
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator; |
28 | 27 |
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState; |
... | ... | |
30 | 29 |
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner; |
31 | 30 |
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException; |
32 | 31 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
32 |
import eu.etaxonomy.cdm.model.common.DefinedTerm; |
|
33 | 33 |
import eu.etaxonomy.cdm.model.common.DefinedTermBase; |
34 | 34 |
import eu.etaxonomy.cdm.model.common.Language; |
35 | 35 |
import eu.etaxonomy.cdm.model.common.Marker; |
36 | 36 |
import eu.etaxonomy.cdm.model.common.MarkerType; |
37 |
import eu.etaxonomy.cdm.model.common.TermType; |
|
37 | 38 |
import eu.etaxonomy.cdm.model.common.TermVocabulary; |
38 | 39 |
import eu.etaxonomy.cdm.model.description.CategoricalData; |
39 | 40 |
import eu.etaxonomy.cdm.model.description.DescriptionBase; |
40 | 41 |
import eu.etaxonomy.cdm.model.description.Feature; |
41 | 42 |
import eu.etaxonomy.cdm.model.description.MeasurementUnit; |
42 |
import eu.etaxonomy.cdm.model.description.Modifier; |
|
43 | 43 |
import eu.etaxonomy.cdm.model.description.QuantitativeData; |
44 | 44 |
import eu.etaxonomy.cdm.model.description.State; |
45 | 45 |
import eu.etaxonomy.cdm.model.description.StatisticalMeasure; |
46 | 46 |
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue; |
47 | 47 |
import eu.etaxonomy.cdm.model.description.TextData; |
48 | 48 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
49 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
|
|
50 |
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
|
|
49 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
|
50 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
|
|
51 | 51 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
52 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; |
|
52 | 53 |
import eu.etaxonomy.cdm.model.reference.Reference; |
53 | 54 |
|
54 | 55 |
|
... | ... | |
120 | 121 |
|
121 | 122 |
//TODO do we still need this map? EcoFacts are not handled separate from Facts. |
122 | 123 |
//However, they have duplicates on derived unit level. Also check duplicateFk. |
123 |
Map<String, FieldObservation> ecoFactFieldObservationMap = (Map<String, FieldObservation>) partitioner.getObjectMap(ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
|
|
124 |
Map<String, FieldUnit> ecoFactFieldObservationMap = (Map<String, FieldUnit>) partitioner.getObjectMap(ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
|
|
124 | 125 |
|
125 | 126 |
ResultSet rs = partitioner.getResultSet(); |
126 | 127 |
|
... | ... | |
147 | 148 |
Reference<?> sourceRef = state.getTransactionalSourceReference(); |
148 | 149 |
|
149 | 150 |
//facade |
150 |
DerivedUnitType type = makeDerivedUnitType(recordBasis);
|
|
151 |
SpecimenOrObservationType type = makeDerivedUnitType(recordBasis);
|
|
151 | 152 |
|
152 | 153 |
DerivedUnitFacade facade; |
153 | 154 |
//field observation |
... | ... | |
155 | 156 |
facade = DerivedUnitFacade.NewInstance(type); |
156 | 157 |
handleFieldObservationSpecimen(rs, facade, state, partitioner); |
157 | 158 |
handleEcoFactSpecificFieldObservation(rs,facade, state); |
158 |
FieldObservation fieldObservation = facade.getFieldObservation(true);
|
|
159 |
FieldUnit fieldObservation = facade.getFieldUnit(true);
|
|
159 | 160 |
ecoFactFieldObservationMap.put(String.valueOf(ecoFactId), fieldObservation); |
160 | 161 |
}else{ |
161 |
FieldObservation fieldObservation = ecoFactFieldObservationMap.get(String.valueOf(duplicateFk));
|
|
162 |
FieldUnit fieldObservation = ecoFactFieldObservationMap.get(String.valueOf(duplicateFk));
|
|
162 | 163 |
facade = DerivedUnitFacade.NewInstance(type, fieldObservation); |
163 | 164 |
} |
164 | 165 |
|
... | ... | |
166 | 167 |
handleEcoFactSpecificDerivedUnit(rs,facade, state); |
167 | 168 |
|
168 | 169 |
|
169 |
DerivedUnitBase<?> objectToSave = facade.innerDerivedUnit();
|
|
170 |
DerivedUnit objectToSave = facade.innerDerivedUnit(); |
|
170 | 171 |
objectsToSave.add(objectToSave); |
171 | 172 |
|
172 | 173 |
|
... | ... | |
208 | 209 |
MarkerType alkalinityMarkerType = getMarkerType(state, uuidMarkerAlkalinity, "Alkalinity", "Alkalinity", null); |
209 | 210 |
boolean alkFlag = Boolean.valueOf(alkalinityFlag.toString()); |
210 | 211 |
Marker alkalinityMarker = Marker.NewInstance(alkalinityMarkerType, alkFlag); |
211 |
facade.getFieldObservation(true).addMarker(alkalinityMarker);
|
|
212 |
facade.getFieldUnit(true).addMarker(alkalinityMarker);
|
|
212 | 213 |
} |
213 | 214 |
|
214 | 215 |
|
... | ... | |
288 | 289 |
logger.warn("Methods not yet handled: " + method); |
289 | 290 |
} |
290 | 291 |
//parameter |
291 |
TermVocabulary<Feature> vocParameter = getVocabulary(uuidVocParameter, "Feature vocabulary for AlgaTerra measurement parameters", "Parameters", null, null, false, Feature.COMMON_NAME()); |
|
292 |
TermVocabulary<Feature> vocParameter = getVocabulary(TermType.Feature, uuidVocParameter, "Feature vocabulary for AlgaTerra measurement parameters", "Parameters", null, null, false, Feature.COMMON_NAME());
|
|
292 | 293 |
if (StringUtils.isNotBlank(parameter)){ |
293 | 294 |
UUID featureUuid = getParameterFeatureUuid(state, parameter); |
294 | 295 |
Feature feature = getFeature(state, featureUuid, parameter, parameter, null, vocParameter); |
... | ... | |
299 | 300 |
quantData.setUnit(unit); |
300 | 301 |
try { |
301 | 302 |
|
302 |
Set<Modifier> valueModifier = new HashSet<Modifier>();
|
|
303 |
Set<DefinedTerm> valueModifier = new HashSet<DefinedTerm>();
|
|
303 | 304 |
valueStr = normalizeAndModifyValue(state, valueStr, valueModifier); |
304 | 305 |
//value |
305 | 306 |
Float valueFlt = Float.valueOf(valueStr); //TODO maybe change model to Double ?? |
... | ... | |
321 | 322 |
|
322 | 323 |
} |
323 | 324 |
|
324 |
private String normalizeAndModifyValue(AlgaTerraImportState state, String valueStr, Set<Modifier> valueModifier) {
|
|
325 |
private String normalizeAndModifyValue(AlgaTerraImportState state, String valueStr, Set<DefinedTerm> valueModifier) {
|
|
325 | 326 |
valueStr = valueStr.replace(",", "."); |
326 | 327 |
if (valueStr.startsWith("<")){ |
327 |
TermVocabulary<Modifier> measurementValueModifierVocabulary = getVocabulary(uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, Modifier.NewInstance());
|
|
328 |
Modifier modifier = getModifier(state, uuidModifierLowerThan, "Lower", "Lower than the given measurement value", "<", measurementValueModifierVocabulary);
|
|
328 |
TermVocabulary<DefinedTerm> measurementValueModifierVocabulary = getVocabulary(TermType.Modifier, uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, DefinedTerm.NewModifierInstance(null, null, null));
|
|
329 |
DefinedTerm modifier = getModifier(state, uuidModifierLowerThan, "Lower", "Lower than the given measurement value", "<", measurementValueModifierVocabulary);
|
|
329 | 330 |
valueModifier.add(modifier); |
330 | 331 |
valueStr = valueStr.replace("<", ""); |
331 | 332 |
} |
332 | 333 |
if (valueStr.startsWith(">")){ |
333 |
TermVocabulary<Modifier> measurementValueModifierVocabulary = getVocabulary(uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, Modifier.NewInstance());
|
|
334 |
Modifier modifier = getModifier(state, uuidModifierGreaterThan, "Lower", "Lower than the given measurement value", "<", measurementValueModifierVocabulary);
|
|
334 |
TermVocabulary<DefinedTerm> measurementValueModifierVocabulary = getVocabulary(TermType.Modifier, uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, DefinedTerm.NewModifierInstance(null, null, null));
|
|
335 |
DefinedTerm modifier = getModifier(state, uuidModifierGreaterThan, "Lower", "Lower than the given measurement value", "<", measurementValueModifierVocabulary);
|
|
335 | 336 |
valueModifier.add(modifier); |
336 | 337 |
valueStr = valueStr.replace(">", ""); |
337 | 338 |
} |
... | ... | |
370 | 371 |
} |
371 | 372 |
} |
372 | 373 |
|
373 |
private Feature makeFeature(DerivedUnitType type) { |
|
374 |
if (type.equals(DerivedUnitType.DerivedUnit)){ |
|
375 |
return Feature.INDIVIDUALS_ASSOCIATION(); |
|
376 |
}else if (type.equals(DerivedUnitType.FieldObservation) || type.equals(DerivedUnitType.Observation) ){ |
|
377 |
return Feature.OBSERVATION(); |
|
378 |
}else if (type.equals(DerivedUnitType.Fossil) || type.equals(DerivedUnitType.LivingBeing) || type.equals(DerivedUnitType.Specimen )){ |
|
379 |
return Feature.SPECIMEN(); |
|
380 |
} |
|
381 |
logger.warn("No feature defined for derived unit type: " + type); |
|
382 |
return null; |
|
383 |
} |
|
384 |
|
|
385 |
|
|
386 |
private DerivedUnitType makeDerivedUnitType(String recordBasis) { |
|
387 |
DerivedUnitType result = null; |
|
388 |
if (StringUtils.isBlank(recordBasis)){ |
|
389 |
result = DerivedUnitType.DerivedUnit; |
|
390 |
} else if (recordBasis.equalsIgnoreCase("FossileSpecimen")){ |
|
391 |
result = DerivedUnitType.Fossil; |
|
392 |
}else if (recordBasis.equalsIgnoreCase("HumanObservation")){ |
|
393 |
result = DerivedUnitType.Observation; |
|
394 |
}else if (recordBasis.equalsIgnoreCase("Literature")){ |
|
395 |
logger.warn("Literature record basis not yet supported"); |
|
396 |
result = DerivedUnitType.DerivedUnit; |
|
397 |
}else if (recordBasis.equalsIgnoreCase("LivingSpecimen")){ |
|
398 |
result = DerivedUnitType.LivingBeing; |
|
399 |
}else if (recordBasis.equalsIgnoreCase("MachineObservation")){ |
|
400 |
logger.warn("MachineObservation record basis not yet supported"); |
|
401 |
result = DerivedUnitType.Observation; |
|
402 |
}else if (recordBasis.equalsIgnoreCase("PreservedSpecimen")){ |
|
403 |
result = DerivedUnitType.Specimen; |
|
404 |
} |
|
405 |
return result; |
|
406 |
} |
|
407 |
|
|
408 |
/* (non-Javadoc) |
|
409 |
* @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet) |
|
410 |
*/ |
|
374 |
@Override |
|
411 | 375 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) { |
412 | 376 |
String nameSpace; |
413 | 377 |
Class cdmClass; |
... | ... | |
429 | 393 |
|
430 | 394 |
//field observation map for duplicates |
431 | 395 |
nameSpace = AlgaTerraEcoFactImport.ECO_FACT_FIELD_OBSERVATION_NAMESPACE; |
432 |
cdmClass = FieldObservation.class;
|
|
396 |
cdmClass = FieldUnit.class;
|
|
433 | 397 |
idSet = fieldObservationIdSet; |
434 |
Map<String, FieldObservation> fieldObservationMap = (Map<String, FieldObservation>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
398 |
Map<String, FieldUnit> fieldObservationMap = (Map<String, FieldUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
435 | 399 |
result.put(nameSpace, fieldObservationMap); |
436 | 400 |
|
437 | 401 |
//collections |
... | ... | |
450 | 414 |
|
451 | 415 |
//terms |
452 | 416 |
nameSpace = AlgaTerraEcoFactImport.TERMS_NAMESPACE; |
453 |
cdmClass = FieldObservation.class;
|
|
417 |
cdmClass = FieldUnit.class; //????????
|
|
454 | 418 |
idSet = termsIdSet; |
455 | 419 |
Map<String, DefinedTermBase> termMap = (Map<String, DefinedTermBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace); |
456 | 420 |
result.put(nameSpace, termMap); |
... | ... | |
461 | 425 |
return result; |
462 | 426 |
} |
463 | 427 |
|
464 |
|
|
465 |
|
|
466 |
/* (non-Javadoc) |
|
467 |
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase) |
|
468 |
*/ |
|
469 | 428 |
@Override |
470 | 429 |
protected boolean doCheck(BerlinModelImportState state){ |
471 | 430 |
IOValidator<BerlinModelImportState> validator = new AlgaTerraSpecimenImportValidator(); |
472 | 431 |
return validator.validate(state); |
473 | 432 |
} |
474 | 433 |
|
475 |
|
|
476 |
/* (non-Javadoc) |
|
477 |
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator) |
|
478 |
*/ |
|
434 |
@Override |
|
479 | 435 |
protected boolean isIgnore(BerlinModelImportState state){ |
480 | 436 |
return ! ((AlgaTerraImportState)state).getAlgaTerraConfigurator().isDoEcoFacts(); |
481 | 437 |
} |
Also available in: Unified diff
reintegrate cdmlib-app-3.3 branch into trunk