Project

General

Profile

« Previous | Next » 

Revision d6ad43ba

Added by Andreas Müller about 11 years ago

latest AlgaTerra import updates

View differences:

app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraTypeImport.java
31 31
import eu.etaxonomy.cdm.io.common.IOValidator;
32 32
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
33 33
import eu.etaxonomy.cdm.model.common.CdmBase;
34
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
34 35
import eu.etaxonomy.cdm.model.name.BotanicalName;
35 36
import eu.etaxonomy.cdm.model.name.Rank;
36 37
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
......
38 39
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
39 40
import eu.etaxonomy.cdm.model.occurrence.Collection;
40 41
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
42
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
41 43
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
42 44
import eu.etaxonomy.cdm.model.reference.Reference;
43 45

  
......
83 85
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
84 86
			String strQuery =    
85 87
					
86
			" SELECT ts.*, ts.TypeSpecimenId as unitId, td.*, gz.ID as GazetteerId, gz.L2Code, gz.L3Code, gz.L4Code, gz.ISOCountry, gz.Country, ts.WaterBody " + 
87
               " " +
88
			" SELECT ts.*, ts.TypeSpecimenId as unitId, td.*, gz.ID as GazetteerId, gz.L2Code, gz.L3Code, gz.L4Code, gz.ISOCountry, gz.Country, ts.WaterBody, " + 
89
               " ts.RefFk as tsRefFk, ts.RefDetailFk as tsRefDetailFk, td.RefFk as tdRefFk, td.RefDetailFk as tdRefDetailFk " +
88 90
            " FROM TypeSpecimenDesignation tsd  " 
89 91
            	+ " LEFT OUTER JOIN TypeSpecimen AS ts ON tsd.TypeSpecimenFk = ts.TypeSpecimenId " 
90 92
            	+ " FULL OUTER JOIN TypeDesignation td ON  td.TypeDesignationId = tsd.TypeDesignationFk "
......
119 121
		Map<String, TaxonNameBase> taxonNameMap = (Map<String, TaxonNameBase>) partitioner.getObjectMap(BerlinModelTaxonNameImport.NAMESPACE);
120 122
		Map<String, DerivedUnit> ecoFactMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(AlgaTerraEcoFactImport.ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
121 123
		Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(TYPE_SPECIMEN_FIELD_OBSERVATION_NAMESPACE);
122
		Map<String, Reference> biblioReference = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);
124
		Map<String, Reference> biblioRefMap = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);
125
		Map<String, Reference> nomRefMap = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE);
123 126
		
124 127
		
125 128
		ResultSet rs = partitioner.getResultSet();
......
138 141
				int typeDesignationId = rs.getInt("TypeDesignationId");
139 142
				Integer typeStatusFk =  nullSafeInt(rs, "typeStatusFk");
140 143
				Integer ecoFactId = nullSafeInt(rs, "ecoFactFk");
144
				Integer tdRefFk = nullSafeInt(rs, "tdRefFk");
145
				Integer tdRefDetailFk = nullSafeInt(rs, "tdRefDetailFk");
146
				
147
				
141 148
//				String recordBasis = rs.getString("RecordBasis");
142 149
				
143 150
				try {
......
154 161
					//field observation
155 162
					handleFieldObservationSpecimen(rs, facade, state, partitioner);
156 163
					
157
					//TODO devide like in EcoFact (if necessary)
158
					handleTypeSpecimenSpecificSpecimen(rs,facade, state);
164
					//TODO divide like in EcoFact (if necessary)
165
					handleTypeSpecimenSpecificSpecimen(rs,facade, state, biblioRefMap, nomRefMap, typeSpecimenId);
159 166
					
160 167
					handleFirstDerivedSpecimen(rs, facade, state, partitioner);
161 168
					
......
166 173
					SpecimenTypeDesignationStatus status = getSpecimenTypeDesignationStatusByKey(typeStatusFk);
167 174
					designation.setTypeSpecimen(facade.innerDerivedUnit());
168 175
					designation.setTypeStatus(status);
176
					if (tdRefFk != null){
177
						Reference<?> typeDesigRef = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, String.valueOf(tdRefFk));
178
						if (typeDesigRef == null){
179
							logger.warn("Type designation reference not found in maps: " + tdRefFk);
180
						}else{
181
							designation.setCitation(typeDesigRef);
182
						}
183
					}
184
					
185
					if (tdRefDetailFk != null){
186
						logger.warn("TypeDesignation.RefDetailFk not yet implemented: " + typeDesignationId);
187
					}
188
					
169 189
					if (name != null){
170 190
						name.addTypeDesignation(designation, true); //TODO check if true is correct
171 191
					}else{
......
219 239
		return result;
220 240
	}
221 241

  
222
	private void handleTypeSpecimenSpecificSpecimen(ResultSet rs, DerivedUnitFacade facade, AlgaTerraImportState state) throws SQLException {
242
	private void handleTypeSpecimenSpecificSpecimen(ResultSet rs, DerivedUnitFacade facade, AlgaTerraImportState state, Map<String, Reference> biblioRefMap, Map<String, Reference> nomRefMap, int typeSpecimenId) throws SQLException {
243
		
244
		
223 245
		//TODO
224 246
		
225 247
		
248
		
249
		DerivedUnitBase<?> derivedUnit = facade.innerDerivedUnit();
250
		
226 251
		//collection
227 252
		String barcode = rs.getString("Barcode");
228 253
		if (StringUtils.isNotBlank(barcode)){
229 254
			facade.setBarcode(barcode);
230 255
		}
231 256
		
257
		//RefFk + RefDetailFk
258
		Integer  refFk = nullSafeInt(rs, "tsRefFk");
259
		if (refFk != null){
260
			
261
			Reference<?> ref = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, String.valueOf(refFk));
262
			if (ref == null){
263
				logger.warn("TypeSpecimen reference (" + refFk + ")not found in biblioRef. TypeSpecimenId: " + typeSpecimenId);
264
			}else{
265
				IdentifiableSource source = IdentifiableSource.NewInstance(ref, null);
266
				derivedUnit.addSource(source);
267
			}
268
		}
269
		
270
		Integer refDetailFk = nullSafeInt(rs, "tsRefDetailFk");
271
		if (refDetailFk != null){
272
			logger.warn("TypeSpecimen.RefDetailFk should always be NULL but wasn't: " + typeSpecimenId);
273
		}
274
		
275
		
276
		
232 277
	}
233 278

  
234 279
	/**
......
327 372
			Set<String> typeSpecimenIdSet = new HashSet<String>();
328 373
			Set<String> termsIdSet = new HashSet<String>();
329 374
			Set<String> collectionIdSet = new HashSet<String>();
375
			Set<String> referenceIdSet = new HashSet<String>();
330 376
			
331 377
			while (rs.next()){
332 378
				handleForeignKey(rs, nameIdSet, "nameFk");
333 379
				handleForeignKey(rs, ecoFieldObservationIdSet, "ecoFactFk");
334 380
				handleForeignKey(rs, typeSpecimenIdSet, "TypeSpecimenId");
335 381
				handleForeignKey(rs, collectionIdSet, "CollectionFk");
382
				handleForeignKey(rs, referenceIdSet, "tsRefFk");
383
				handleForeignKey(rs, referenceIdSet, "tdRefFk");
336 384
			}
337 385
			
338 386
			//name map
......
371 419
			Map<String, Collection> subCollectionMap = (Map<String, Collection>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
372 420
			result.put(nameSpace, subCollectionMap);
373 421

  
422
			//nom reference map
423
			nameSpace = BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE;
424
			cdmClass = Reference.class;
425
			idSet = referenceIdSet;
426
			Map<String, Reference> nomReferenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
427
			result.put(nameSpace, nomReferenceMap);
428

  
429
			//biblio reference map
430
			nameSpace = BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE;
431
			cdmClass = Reference.class;
432
			idSet = referenceIdSet;
433
			Map<String, Reference> biblioReferenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
434
			result.put(nameSpace, biblioReferenceMap);
435

  
374 436
			
375 437
			//
376 438
//			//terms

Also available in: Unified diff