Revision bb38665e
Added by Andreas Müller over 10 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraDnaImport.java | ||
---|---|---|
27 | 27 |
import org.springframework.format.datetime.joda.DateTimeParser; |
28 | 28 |
import org.springframework.stereotype.Component; |
29 | 29 |
|
30 |
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade.DerivedUnitType; |
|
31 | 30 |
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraDnaImportValidator; |
32 | 31 |
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator; |
33 | 32 |
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState; |
... | ... | |
37 | 36 |
import eu.etaxonomy.cdm.model.common.Annotation; |
38 | 37 |
import eu.etaxonomy.cdm.model.common.AnnotationType; |
39 | 38 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
39 |
import eu.etaxonomy.cdm.model.common.DefinedTerm; |
|
40 | 40 |
import eu.etaxonomy.cdm.model.common.Language; |
41 | 41 |
import eu.etaxonomy.cdm.model.description.IndividualsAssociation; |
42 | 42 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
43 | 43 |
import eu.etaxonomy.cdm.model.molecular.DnaSample; |
44 |
import eu.etaxonomy.cdm.model.molecular.GenBankAccession; |
|
45 |
import eu.etaxonomy.cdm.model.molecular.Locus; |
|
46 | 44 |
import eu.etaxonomy.cdm.model.molecular.Sequence; |
47 | 45 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; |
48 | 46 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType; |
49 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
|
|
50 |
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
|
|
47 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
|
48 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
|
|
51 | 49 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
52 | 50 |
import eu.etaxonomy.cdm.model.reference.Reference; |
53 | 51 |
import eu.etaxonomy.cdm.model.reference.ReferenceFactory; |
... | ... | |
124 | 122 |
Set<SpecimenOrObservationBase> samplesToSave = new HashSet<SpecimenOrObservationBase>(); |
125 | 123 |
Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>(); |
126 | 124 |
|
127 |
Map<String, FieldObservation> ecoFactFieldObservationMap = (Map<String, FieldObservation>) partitioner.getObjectMap(ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
|
|
125 |
Map<String, FieldUnit> ecoFactFieldObservationMap = (Map<String, FieldUnit>) partitioner.getObjectMap(ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
|
|
128 | 126 |
|
129 | 127 |
ResultSet rs = partitioner.getResultSet(); |
130 | 128 |
|
... | ... | |
165 | 163 |
Sequence sequence = makeSequence(rs, dnaSample, dnaFactId, importDateTime); |
166 | 164 |
|
167 | 165 |
//locus |
168 |
Locus locus = Locus.NewInstance(keywordsStr, definitionStr); |
|
166 |
//FIXME Deduplicate DnaMarker |
|
167 |
DefinedTerm locus = DefinedTerm.NewDnaMarkerInstance(definitionStr, keywordsStr, null); |
|
169 | 168 |
locus.setCreated(importDateTime); |
170 |
sequence.setLocus(locus); |
|
169 |
this.getTermService().save(locus); |
|
170 |
|
|
171 |
sequence.setDnaMarker(locus); |
|
171 | 172 |
|
172 | 173 |
//GenBank Accession |
173 | 174 |
makeGenBankAccession(rs, sequence, importDateTime, dnaFactId); |
... | ... | |
198 | 199 |
ref.setTitleCache(referenceStr, true); |
199 | 200 |
referenceMap.put(referenceStr, ref); |
200 | 201 |
} |
201 |
sequence.setPublishedIn(ref);
|
|
202 |
sequence.addCitation(ref);
|
|
202 | 203 |
} |
203 | 204 |
|
204 | 205 |
//save |
... | ... | |
229 | 230 |
Integer ecoFactFk = nullSafeInt(rs, "ecoFactId"); |
230 | 231 |
if (ecoFactFk != null){ |
231 | 232 |
|
232 |
DerivedUnitBase<?> ecoFact = (DerivedUnitBase<?>)state.getRelatedObject(ECO_FACT_DERIVED_UNIT_NAMESPACE, ecoFactFk.toString());
|
|
233 |
DerivedUnit ecoFact = (DerivedUnit)state.getRelatedObject(ECO_FACT_DERIVED_UNIT_NAMESPACE, ecoFactFk.toString());
|
|
233 | 234 |
if (ecoFact == null){ |
234 | 235 |
logger.warn("EcoFact is null for ecoFactFk: " + ecoFactFk + ", DnaFactId: " + dnaFactId); |
235 | 236 |
}else{ |
... | ... | |
284 | 285 |
|
285 | 286 |
private Sequence makeSequence(ResultSet rs, DnaSample dnaSample, int dnaFactId, DateTime importDateTime) throws SQLException { |
286 | 287 |
String sequenceStr = rs.getString("PlainSequence"); |
287 |
Integer originalLen = null; |
|
288 | 288 |
Integer seqLen = nullSafeInt(rs, "SeqLen"); |
289 |
if (seqLen == null){ |
|
290 |
if (sequenceStr != null){ |
|
291 |
seqLen = sequenceStr.length(); |
|
292 |
} |
|
293 |
} |
|
294 |
|
|
295 |
if (sequenceStr != null){ |
|
296 |
originalLen = sequenceStr.length(); |
|
297 |
if (originalLen > 255){ |
|
298 |
logger.warn("Sequence truncated. Id: " + dnaFactId); |
|
299 |
sequenceStr = sequenceStr.substring(0, 255); |
|
300 |
} |
|
301 |
}else{ |
|
289 |
|
|
290 |
if (sequenceStr == null){ |
|
302 | 291 |
logger.warn("PlainSequence is null. Id: " + dnaFactId); |
303 |
} |
|
304 |
Sequence sequence = Sequence.NewInstance(sequenceStr); |
|
305 |
sequence.setLength(seqLen); |
|
306 |
if (! originalLen.equals(seqLen)){ |
|
307 |
logger.warn("SeqLen (" + seqLen+ ") and OriginalLen ("+originalLen+") differ for dnaFact: " + dnaFactId); |
|
292 |
}else{ |
|
293 |
if (sequenceStr.length() != seqLen){ |
|
294 |
logger.warn("SeqLen (" + seqLen+ ") and OriginalLen ("+sequenceStr.length()+") differ for dnaFact: " + dnaFactId); |
|
295 |
} |
|
308 | 296 |
} |
309 | 297 |
|
298 |
Sequence sequence = Sequence.NewInstance(sequenceStr, seqLen); |
|
310 | 299 |
sequence.setCreated(importDateTime); |
311 |
dnaSample.addSequences(sequence);
|
|
300 |
dnaSample.addSequence(sequence); |
|
312 | 301 |
return sequence; |
313 | 302 |
} |
314 | 303 |
|
... | ... | |
343 | 332 |
accessionStr = null; |
344 | 333 |
} |
345 | 334 |
if (isGenBankAccessionNumber(accessionStr, versionStr, genBankUri, dnaFactId) || genBankUri != null){ |
346 |
GenBankAccession accession = GenBankAccession.NewInstance(accessionStr); |
|
347 |
accession.setUri(genBankUri); |
|
348 |
accession.setCreated(importDateTime); |
|
349 |
sequence.addGenBankAccession(accession); |
|
335 |
sequence.setGeneticAccessionNumber(accessionStr); |
|
350 | 336 |
} |
351 | 337 |
} |
352 | 338 |
} |
... | ... | |
377 | 363 |
return ECO_FACT_FIELD_OBSERVATION_NAMESPACE; |
378 | 364 |
} |
379 | 365 |
|
380 |
|
|
381 |
private DerivedUnitType makeDerivedUnitType(String recordBasis) { |
|
382 |
DerivedUnitType result = null; |
|
383 |
if (StringUtils.isBlank(recordBasis)){ |
|
384 |
result = DerivedUnitType.DerivedUnit; |
|
385 |
} else if (recordBasis.equalsIgnoreCase("FossileSpecimen")){ |
|
386 |
result = DerivedUnitType.Fossil; |
|
387 |
}else if (recordBasis.equalsIgnoreCase("HumanObservation")){ |
|
388 |
result = DerivedUnitType.Observation; |
|
389 |
}else if (recordBasis.equalsIgnoreCase("Literature")){ |
|
390 |
logger.warn("Literature record basis not yet supported"); |
|
391 |
result = DerivedUnitType.DerivedUnit; |
|
392 |
}else if (recordBasis.equalsIgnoreCase("LivingSpecimen")){ |
|
393 |
result = DerivedUnitType.LivingBeing; |
|
394 |
}else if (recordBasis.equalsIgnoreCase("MachineObservation")){ |
|
395 |
logger.warn("MachineObservation record basis not yet supported"); |
|
396 |
result = DerivedUnitType.Observation; |
|
397 |
}else if (recordBasis.equalsIgnoreCase("PreservedSpecimen")){ |
|
398 |
result = DerivedUnitType.Specimen; |
|
399 |
} |
|
400 |
return result; |
|
401 |
} |
|
402 |
|
|
403 |
/* (non-Javadoc) |
|
404 |
* @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet) |
|
405 |
*/ |
|
366 |
@Override |
|
406 | 367 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) { |
407 | 368 |
String nameSpace; |
408 |
Class cdmClass; |
|
369 |
Class<?> cdmClass;
|
|
409 | 370 |
Set<String> idSet; |
410 | 371 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>(); |
411 | 372 |
|
... | ... | |
430 | 391 |
|
431 | 392 |
//eco fact derived unit map |
432 | 393 |
nameSpace = AlgaTerraFactEcologyImport.ECO_FACT_DERIVED_UNIT_NAMESPACE; |
433 |
cdmClass = DerivedUnitBase.class;
|
|
394 |
cdmClass = DerivedUnit.class; |
|
434 | 395 |
idSet = ecoFactFkSet; |
435 |
Map<String, DerivedUnitBase> derivedUnitMap = (Map<String, DerivedUnitBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
396 |
Map<String, DerivedUnit> derivedUnitMap = (Map<String, DerivedUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
|
436 | 397 |
result.put(nameSpace, derivedUnitMap); |
437 | 398 |
|
438 | 399 |
} catch (SQLException e) { |
... | ... | |
441 | 402 |
return result; |
442 | 403 |
} |
443 | 404 |
|
444 |
|
|
445 |
|
|
446 |
/* (non-Javadoc) |
|
447 |
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase) |
|
448 |
*/ |
|
449 | 405 |
@Override |
450 | 406 |
protected boolean doCheck(BerlinModelImportState state){ |
451 | 407 |
IOValidator<BerlinModelImportState> validator = new AlgaTerraDnaImportValidator(); |
Also available in: Unified diff
reintegrate cdmlib-app-3.3 branch into trunk