Project

General

Profile

« Previous | Next » 

Revision bb38665e

Added by Andreas Müller over 10 years ago

reintegrate cdmlib-app-3.3 branch into trunk

View differences:

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