Revision d6ad43ba
Added by Andreas Müller about 11 years ago
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
latest AlgaTerra import updates