3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.io
.taxonx2013
;
14 import org
.apache
.log4j
.Logger
;
16 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
17 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableSource
;
18 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSourceType
;
19 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementSource
;
20 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
21 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
22 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
23 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
24 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
25 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
26 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
27 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
35 public class TaxonXAddSources
{
37 private Reference sourceUrlRef
;
38 private TaxonXImport importer
;
39 private TaxonXImportState configState
;
40 @SuppressWarnings("unused")
41 private static final Logger logger
= Logger
.getLogger(TaxonXAddSources
.class);
46 public void setImporter(TaxonXImport importer
) {
47 this.importer
=importer
;
52 * @param configState the configState to set
54 public void setConfigState(TaxonXImportState configState
) {
55 this.configState
= configState
;
60 * @return the sourceUrlRef
62 public Reference
getSourceUrlRef() {
67 * @param sourceUrlRef the sourceUrlRef to set
69 public void setSourceUrlRef(Reference sourceUrlRef
) {
70 this.sourceUrlRef
= sourceUrlRef
;
74 protected IdentifiableSource
getIdentifiableSource(Reference reference
, Set
<IdentifiableSource
> sources
, boolean original
){
75 // logger.info("getIdentifiableSource");
76 boolean sourceExists
=false;
77 IdentifiableSource source
=null;
78 for (IdentifiableSource src
: sources
){
79 String micro
= src
.getCitationMicroReference();
80 Reference r
= src
.getCitation();
81 if (r
.getTitleCache().equals(reference
.getTitleCache())) {
88 source
= IdentifiableSource
.NewInstance(OriginalSourceType
.PrimaryTaxonomicSource
,null,null,reference
,null);
90 source
= IdentifiableSource
.NewInstance(OriginalSourceType
.Import
,null,null,reference
,null);
96 protected DescriptionElementSource
getDescriptionElementSource(Reference reference
, Set
<DescriptionElementSource
> sources
, boolean original
){
97 //logger.info("getDescriptionElementSource");
98 boolean sourceExists
=false;
99 DescriptionElementSource source
=null;
100 for (DescriptionElementSource src
: sources
){
101 String micro
= src
.getCitationMicroReference();
102 Reference r
= src
.getCitation();
103 if (r
.getTitleCache().equals(reference
.getTitleCache())) {
110 source
= DescriptionElementSource
.NewInstance(OriginalSourceType
.PrimaryTaxonomicSource
,null,null,reference
,null);
112 source
= DescriptionElementSource
.NewInstance(OriginalSourceType
.Import
,null,null,reference
,null);
123 protected void addSource(Reference refMods
, Synonym synonym
) {
124 //logger.info("addSource");
125 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
126 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
127 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
,synonym
.getSources(), false);
128 IdentifiableSource id2
= getIdentifiableSource(refMods
,synonym
.getSources(), true);
129 IdentifiableSource id3
= getIdentifiableSource(sec
,synonym
.getSources(), false);
131 synonym
.addSource(id
);
134 synonym
.addSource(id2
);
136 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
137 synonym
.addSource(id3
);
144 * @param indAssociation
146 protected IndividualsAssociation
addSource(Reference refMods
, IndividualsAssociation indAssociation
) {
147 //logger.info("addSource");
148 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
149 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
150 DescriptionElementSource id
= getDescriptionElementSource(sourceUrlRef
, indAssociation
.getSources(), false);
151 DescriptionElementSource id2
= getDescriptionElementSource(refMods
, indAssociation
.getSources(), true);
152 DescriptionElementSource id3
= getDescriptionElementSource(sec
, indAssociation
.getSources(), false);
155 indAssociation
.addSource(id
);
158 indAssociation
.addSource(id2
);
160 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
161 indAssociation
.addSource(id3
);
163 return indAssociation
;
168 * @param acceptedTaxon
170 protected void addSource(Reference refMods
, Taxon acceptedTaxon
) {
171 //logger.info("addSource");
172 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
173 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
174 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
, acceptedTaxon
.getSources(), false);
175 IdentifiableSource id2
= getIdentifiableSource(refMods
, acceptedTaxon
.getSources(), true);
176 IdentifiableSource id3
= getIdentifiableSource(sec
, acceptedTaxon
.getSources(), false);
178 acceptedTaxon
.addSource(id
);
181 acceptedTaxon
.addSource(id2
);
183 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
184 acceptedTaxon
.addSource(id3
);
190 * @param nameToBeFilled
192 protected void addSource(Reference refMods
, NonViralName
<?
> nameToBeFilled
) {
193 //logger.info("addSource");
194 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
195 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
196 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
, nameToBeFilled
.getSources(), false);
197 IdentifiableSource id2
= getIdentifiableSource(refMods
, nameToBeFilled
.getSources(), true);
198 IdentifiableSource id3
= getIdentifiableSource(sec
, nameToBeFilled
.getSources(), false);
201 nameToBeFilled
.addSource(id
);
204 nameToBeFilled
.addSource(id2
);
206 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
207 nameToBeFilled
.addSource(id3
);
216 protected void addSource(Reference refMods
, TextData textData
) {
217 //logger.info("addSource");
218 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
219 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
220 DescriptionElementSource id
= getDescriptionElementSource(sourceUrlRef
, textData
.getSources(), false);
221 DescriptionElementSource id2
= getDescriptionElementSource(refMods
, textData
.getSources(), true);
222 DescriptionElementSource id3
= getDescriptionElementSource(sec
, textData
.getSources(), false);
225 textData
.addSource(id
);
228 textData
.addSource(id2
);
230 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
231 textData
.addSource(id3
);
238 * @param taxonDescription
241 protected void addAndSaveSource(Reference refMods
, TaxonDescription taxonDescription
, Reference currentRef
) {
242 //logger.info("addAndSaveSource");
243 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
244 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
245 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
, taxonDescription
.getSources(), false);
246 IdentifiableSource id2
= getIdentifiableSource(refMods
, taxonDescription
.getSources(), true);
247 IdentifiableSource id3
= getIdentifiableSource(sec
, taxonDescription
.getSources(), false);
250 taxonDescription
.addSource(id
);
253 taxonDescription
.addSource(id2
);
255 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
256 taxonDescription
.addSource(id3
);
259 importer
.getDescriptionService().saveOrUpdate(taxonDescription
);
264 * @param derivedUnitBase
266 protected void addAndSaveSource(Reference refMods
, DerivedUnit derivedUnitBase
) {
267 //logger.info("addAndSaveSource");
268 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
269 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
270 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
, derivedUnitBase
.getSources(), false);
271 IdentifiableSource id2
= getIdentifiableSource(refMods
, derivedUnitBase
.getSources(), true);
272 IdentifiableSource id3
= getIdentifiableSource(sec
, derivedUnitBase
.getSources(), false);
275 derivedUnitBase
.addSource(id
);
278 derivedUnitBase
.addSource(id2
);
280 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
281 derivedUnitBase
.addSource(id3
);
283 importer
.getOccurrenceService().saveOrUpdate(derivedUnitBase
);
284 derivedUnitBase
= CdmBase
.deproxy(derivedUnitBase
, DerivedUnit
.class);
290 * @param taxonDescription
292 public void addSource(Reference refMods
, TaxonDescription taxonDescription
) {
293 //logger.info("addSource");
294 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
295 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
296 IdentifiableSource id
= getIdentifiableSource(sourceUrlRef
, taxonDescription
.getSources(), false);
297 IdentifiableSource id2
= getIdentifiableSource(refMods
, taxonDescription
.getSources(), true);
298 IdentifiableSource id3
= getIdentifiableSource(sec
, taxonDescription
.getSources(), false);
301 taxonDescription
.addSource(id
);
304 taxonDescription
.addSource(id2
);
306 if(!configState
.getConfig().doKeepOriginalSecundum() && id3
!=null) {
307 taxonDescription
.addSource(id3
);
309 importer
.getDescriptionService().saveOrUpdate(taxonDescription
);
320 public void addSource(Reference reference
, TextData textData
, TaxonNameBase name
, Reference refMods
) {
321 //logger.info("addSource");
322 sourceUrlRef
=CdmBase
.deproxy(sourceUrlRef
, Reference
.class);
323 Reference sec
= CdmBase
.deproxy(configState
.getConfig().getSecundum(), Reference
.class);
324 DescriptionElementSource id1
= getDescriptionElementSource(refMods
, textData
.getSources(),name
, true);
325 DescriptionElementSource id2
= getDescriptionElementSource(reference
, textData
.getSources(),name
, false);
327 textData
.addSource(id1
);
331 textData
.addSource(id2
);
337 @SuppressWarnings({ "unused", "rawtypes" })
338 private DescriptionElementSource
getDescriptionElementSource(Reference reference
, Set
<DescriptionElementSource
> sources
,
339 TaxonNameBase originalname
, boolean original
){
340 //logger.info("getDescriptionElementSource");
341 boolean sourceExists
=false;
342 DescriptionElementSource source
=null;
343 for (DescriptionElementSource src
: sources
){
344 String micro
= src
.getCitationMicroReference();
345 Reference r
= src
.getCitation();
346 TaxonNameBase oname
= src
.getNameUsedInSource();
348 if (r
.getTitleCache().equals(reference
.getTitleCache())) {
349 if (oname
.getTitleCache().equalsIgnoreCase(originalname
.getTitleCache())) {
354 } catch (Exception e
) {
355 // TODO Auto-generated catch block
361 source
= DescriptionElementSource
.NewInstance(OriginalSourceType
.PrimaryTaxonomicSource
, null,null, reference
, null, originalname
, null);
363 source
= DescriptionElementSource
.NewInstance(OriginalSourceType
.Import
, null,null, reference
, null, originalname
, null);