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/AlgaTerraMorphologyImport.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.AlgaTerraMorphologyImportValidator;
27
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraSpecimenImportValidator;
28 26
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
29 27
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
30 28
import eu.etaxonomy.cdm.io.common.IOValidator;
31 29
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
32 30
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
33 31
import eu.etaxonomy.cdm.model.common.CdmBase;
32
import eu.etaxonomy.cdm.model.common.DefinedTerm;
34 33
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
35 34
import eu.etaxonomy.cdm.model.common.Language;
36 35
import eu.etaxonomy.cdm.model.common.Marker;
37 36
import eu.etaxonomy.cdm.model.common.MarkerType;
37
import eu.etaxonomy.cdm.model.common.TermType;
38 38
import eu.etaxonomy.cdm.model.common.TermVocabulary;
39 39
import eu.etaxonomy.cdm.model.description.CategoricalData;
40 40
import eu.etaxonomy.cdm.model.description.DescriptionBase;
41 41
import eu.etaxonomy.cdm.model.description.Feature;
42 42
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
43
import eu.etaxonomy.cdm.model.description.Modifier;
44 43
import eu.etaxonomy.cdm.model.description.QuantitativeData;
45 44
import eu.etaxonomy.cdm.model.description.State;
46 45
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
47 46
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
48 47
import eu.etaxonomy.cdm.model.description.TextData;
49 48
import eu.etaxonomy.cdm.model.occurrence.Collection;
50
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
51
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
49
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
50
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
52 51
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
52
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
53 53
import eu.etaxonomy.cdm.model.reference.Reference;
54 54

  
55 55

  
......
121 121
		
122 122
		//TODO do we still need this map? EcoFacts are not handled separate from Facts.
123 123
		//However, they have duplicates on derived unit level. Also check duplicateFk. 
124
		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);
125 125
		
126 126
		ResultSet rs = partitioner.getResultSet();
127 127

  
......
148 148
					Reference<?> sourceRef = state.getTransactionalSourceReference();
149 149
				
150 150
					//facade
151
					DerivedUnitType type = makeDerivedUnitType(recordBasis);
151
					SpecimenOrObservationType type = makeDerivedUnitType(recordBasis);
152 152
					
153 153
					DerivedUnitFacade facade;
154 154
					//field observation
......
156 156
						facade = DerivedUnitFacade.NewInstance(type);
157 157
						handleFieldObservationSpecimen(rs, facade, state, partitioner);
158 158
						handleEcoFactSpecificFieldObservation(rs,facade, state);
159
						FieldObservation fieldObservation = facade.getFieldObservation(true);
159
						FieldUnit fieldObservation = facade.getFieldUnit(true);
160 160
						ecoFactFieldObservationMap.put(String.valueOf(ecoFactId), fieldObservation);
161 161
					}else{
162
						FieldObservation fieldObservation = ecoFactFieldObservationMap.get(String.valueOf(duplicateFk));
162
						FieldUnit fieldObservation = ecoFactFieldObservationMap.get(String.valueOf(duplicateFk));
163 163
						facade = DerivedUnitFacade.NewInstance(type, fieldObservation);
164 164
					}
165 165
						
......
167 167
					handleEcoFactSpecificDerivedUnit(rs,facade, state);
168 168

  
169 169
					
170
					DerivedUnitBase<?> objectToSave = facade.innerDerivedUnit();
170
					DerivedUnit objectToSave = facade.innerDerivedUnit();
171 171
					objectsToSave.add(objectToSave); 
172 172
					
173 173

  
......
209 209
			MarkerType alkalinityMarkerType = getMarkerType(state, uuidMarkerAlkalinity, "Alkalinity", "Alkalinity", null);
210 210
			boolean alkFlag = Boolean.valueOf(alkalinityFlag.toString());
211 211
			Marker alkalinityMarker = Marker.NewInstance(alkalinityMarkerType, alkFlag);
212
			facade.getFieldObservation(true).addMarker(alkalinityMarker);
212
			facade.getFieldUnit(true).addMarker(alkalinityMarker);
213 213
		}
214 214
		
215 215
		
......
289 289
				logger.warn("Methods not yet handled: " + method);
290 290
			}
291 291
			//parameter
292
			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());
293 293
			if (StringUtils.isNotBlank(parameter)){
294 294
				UUID featureUuid = getParameterFeatureUuid(state, parameter);
295 295
				Feature feature = getFeature(state, featureUuid, parameter, parameter, null, vocParameter);
......
300 300
				quantData.setUnit(unit);
301 301
				try {
302 302
					
303
					Set<Modifier> valueModifier = new HashSet<Modifier>();
303
					Set<DefinedTerm> valueModifier = new HashSet<DefinedTerm>();
304 304
					valueStr = normalizeAndModifyValue(state, valueStr, valueModifier);
305 305
					//value
306 306
					Float valueFlt = Float.valueOf(valueStr);  //TODO maybe change model to Double ??
......
322 322
		
323 323
	}
324 324

  
325
	private String normalizeAndModifyValue(AlgaTerraImportState state, String valueStr, Set<Modifier> valueModifier) {
325
	private String normalizeAndModifyValue(AlgaTerraImportState state, String valueStr, Set<DefinedTerm> valueModifier) {
326 326
		valueStr = valueStr.replace(",", ".");
327 327
		if (valueStr.startsWith("<")){
328
			TermVocabulary<Modifier> measurementValueModifierVocabulary = getVocabulary(uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, Modifier.NewInstance());
329
			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);
330 330
			valueModifier.add(modifier);
331 331
			valueStr = valueStr.replace("<", "");
332 332
		}
333 333
		if (valueStr.startsWith(">")){
334
			TermVocabulary<Modifier> measurementValueModifierVocabulary = getVocabulary(uuidMeasurementValueModifier, "Measurement value modifier", "Measurement value modifier", null, null, false, Modifier.NewInstance());
335
			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);
336 336
			valueModifier.add(modifier);
337 337
			valueStr = valueStr.replace(">", "");
338 338
		}
......
371 371
		}
372 372
	}
373 373

  
374
	private Feature makeFeature(DerivedUnitType type) {
375
		if (type.equals(DerivedUnitType.DerivedUnit)){
376
			return Feature.INDIVIDUALS_ASSOCIATION();
377
		}else if (type.equals(DerivedUnitType.FieldObservation) || type.equals(DerivedUnitType.Observation) ){
378
			return Feature.OBSERVATION();
379
		}else if (type.equals(DerivedUnitType.Fossil) || type.equals(DerivedUnitType.LivingBeing) || type.equals(DerivedUnitType.Specimen )){
380
			return Feature.SPECIMEN();
381
		}
382
		logger.warn("No feature defined for derived unit type: " + type);
383
		return null;
384
	}
385

  
386

  
387
	private DerivedUnitType makeDerivedUnitType(String recordBasis) {
388
		DerivedUnitType result = null;
389
		if (StringUtils.isBlank(recordBasis)){
390
			result = DerivedUnitType.DerivedUnit;
391
		} else if (recordBasis.equalsIgnoreCase("FossileSpecimen")){
392
			result = DerivedUnitType.Fossil;
393
		}else if (recordBasis.equalsIgnoreCase("HumanObservation")){
394
			result = DerivedUnitType.Observation;
395
		}else if (recordBasis.equalsIgnoreCase("Literature")){
396
			logger.warn("Literature record basis not yet supported");
397
			result = DerivedUnitType.DerivedUnit;
398
		}else if (recordBasis.equalsIgnoreCase("LivingSpecimen")){
399
			result = DerivedUnitType.LivingBeing;
400
		}else if (recordBasis.equalsIgnoreCase("MachineObservation")){
401
			logger.warn("MachineObservation record basis not yet supported");
402
			result = DerivedUnitType.Observation;
403
		}else if (recordBasis.equalsIgnoreCase("PreservedSpecimen")){
404
			result = DerivedUnitType.Specimen;
405
		}
406
		return result;
407
	}
408 374

  
409
	/* (non-Javadoc)
410
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
411
	 */
375
	@Override
412 376
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
413 377
		String nameSpace;
414 378
		Class cdmClass;
......
430 394
			
431 395
			//field observation map for duplicates
432 396
			nameSpace = AlgaTerraMorphologyImport.ECO_FACT_FIELD_OBSERVATION_NAMESPACE;
433
			cdmClass = FieldObservation.class;
397
			cdmClass = FieldUnit.class;
434 398
			idSet = fieldObservationIdSet;
435
			Map<String, FieldObservation> fieldObservationMap = (Map<String, FieldObservation>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
399
			Map<String, FieldUnit> fieldObservationMap = (Map<String, FieldUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
436 400
			result.put(nameSpace, fieldObservationMap);
437 401

  
438 402
			//collections
......
451 415

  
452 416
			//terms
453 417
			nameSpace = AlgaTerraMorphologyImport.TERMS_NAMESPACE;
454
			cdmClass = FieldObservation.class;
418
			cdmClass = FieldUnit.class;
455 419
			idSet = termsIdSet;
456 420
			Map<String, DefinedTermBase> termMap = (Map<String, DefinedTermBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
457 421
			result.put(nameSpace, termMap);

Also available in: Unified diff