4 package eu
.etaxonomy
.cdm
.io
.tcs
;
6 import java
.util
.HashSet
;
7 import java
.util
.Iterator
;
12 import org
.apache
.log4j
.Logger
;
13 import org
.jdom
.Attribute
;
14 import org
.jdom
.Element
;
15 import org
.jdom
.Namespace
;
16 import org
.jdom
.filter
.ElementFilter
;
17 import org
.jdom
.filter
.Filter
;
19 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationController
;
20 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
21 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
22 import eu
.etaxonomy
.cdm
.common
.XmlHelp
;
23 import eu
.etaxonomy
.cdm
.io
.common
.CdmIoBase
;
24 import eu
.etaxonomy
.cdm
.io
.common
.ICdmIO
;
25 import eu
.etaxonomy
.cdm
.io
.common
.IIO
;
26 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
;
27 import eu
.etaxonomy
.cdm
.io
.common
.MapWrapper
;
28 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipTermBase
;
30 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
31 import eu
.etaxonomy
.cdm
.model
.reference
.Generic
;
32 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
33 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
34 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
35 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
36 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
37 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
38 import eu
.etaxonomy
.cdm
.strategy
.exceptions
.UnknownCdmTypeException
;
45 public class TcsTaxonIO
extends CdmIoBase
implements ICdmIO
{
46 private static final Logger logger
= Logger
.getLogger(TcsTaxonIO
.class);
48 private static int modCount
= 30000;
49 private static final String ioNameLocal
= "TcsTaxonIO";
51 public TcsTaxonIO(boolean ignore
){
52 super(ioNameLocal
, ignore
);
57 public boolean doCheck(IImportConfigurator config
){
58 boolean result
= true;
59 logger
.warn("Checking for Taxa not yet implemented");
60 //result &= checkArticlesWithoutJournal(bmiConfig);
61 //result &= checkPartOfJournal(bmiConfig);
67 public boolean doInvoke(IImportConfigurator config
, CdmApplicationController cdmApp
, Map
<String
, MapWrapper
<?
extends CdmBase
>> stores
){
69 MapWrapper
<TaxonBase
> taxonMap
= (MapWrapper
<TaxonBase
>)stores
.get(ICdmIO
.TAXON_STORE
);
70 MapWrapper
<TaxonNameBase
> taxonNameMap
= (MapWrapper
<TaxonNameBase
>)stores
.get(ICdmIO
.TAXONNAME_STORE
);
71 MapWrapper
<ReferenceBase
> referenceMap
= (MapWrapper
<ReferenceBase
>)stores
.get(ICdmIO
.REFERENCE_STORE
);
73 String xmlElementName
;
74 String xmlAttributeName
;
75 Namespace elementNamespace
;
76 Namespace attributeNamespace
;
80 logger
.info("start makeTaxa ...");
82 TcsImportConfigurator tcsConfig
= (TcsImportConfigurator
)config
;
83 Element root
= tcsConfig
.getSourceRoot();
84 boolean success
=true;
85 INameService nameService
= cdmApp
.getNameService();
88 Namespace rdfNamespace
= root
.getNamespace();
90 Namespace taxonConceptNamespace
= root
.getNamespace(prefix
);
92 Namespace commonNamespace
= root
.getNamespace(prefix
);
94 xmlElementName
= "TaxonConcept";
95 elementNamespace
= taxonConceptNamespace
;
96 List
<Element
> elTaxonConcepts
= root
.getChildren(xmlElementName
, elementNamespace
);
98 ITaxonService taxonService
= cdmApp
.getTaxonService();
102 for (Element elTaxonConcept
: elTaxonConcepts
){
103 if ((i
++ % modCount
) == 0){ logger
.info("Taxa handled: " + (i
-1));}
106 String taxonAbout
= elTaxonConcept
.getAttributeValue("about", rdfNamespace
);
109 xmlElementName
= "hasName";
110 elementNamespace
= taxonConceptNamespace
;
111 xmlAttributeName
= "resource";
112 attributeNamespace
= rdfNamespace
;
113 String strNameResource
= XmlHelp
.getChildAttributeValue(elTaxonConcept
, xmlElementName
, elementNamespace
, xmlAttributeName
, attributeNamespace
);
114 TaxonNameBase taxonNameBase
= taxonNameMap
.get(strNameResource
);
117 xmlElementName
= "accordingTo";
118 elementNamespace
= taxonConceptNamespace
;
119 String strAccordingTo
= elTaxonConcept
.getChildTextTrim(xmlElementName
, elementNamespace
);
121 Generic sec
= Generic
.NewInstance();
122 sec
.setTitleCache(strAccordingTo
);
126 if (hasIsSynonymRelation(elTaxonConcept
, rdfNamespace
)){
127 taxonBase
= Synonym
.NewInstance(taxonNameBase
, sec
);
129 taxonBase
= Taxon
.NewInstance(taxonNameBase
, sec
);
133 // xmlElementName = "primary";
134 // elementNamespace = taxonConceptNamespace;
135 // cdmAttrName = "isPrimary";
136 // Boolean primary = ImportHelper.addXmlBooleanValue(elTaxonConcept, taxon, xmlElementName, elementNamespace, cdmAttrName);
138 taxonMap
.put(taxonAbout
, taxonBase
);
141 //invokeRelations(source, cdmApp, deleteAll, taxonMap, referenceMap);
142 logger
.info("saving taxa ...");
143 taxonService
.saveTaxonAll(taxonMap
.objects());
144 logger
.info("end makeTaxa ...");
149 private static boolean hasIsSynonymRelation(Element taxonConcept
, Namespace rdfNamespace
){
150 boolean result
= false;
151 if (taxonConcept
== null || ! "TaxonConcept".equalsIgnoreCase(taxonConcept
.getName()) ){
155 String elName
= "relationshipCategory";
156 Filter filter
= new ElementFilter(elName
, taxonConcept
.getNamespace());
157 Iterator
<Element
> relationshipCategories
= taxonConcept
.getDescendants(filter
);
158 while (relationshipCategories
.hasNext()){
159 Element relationshipCategory
= relationshipCategories
.next();
160 Attribute resource
= relationshipCategory
.getAttribute("resource", rdfNamespace
);
161 String isSynonymFor
= "http://rs.tdwg.org/ontology/voc/TaxonConcept#IsSynonymFor";
162 if (resource
!= null && isSynonymFor
.equalsIgnoreCase(resource
.getValue()) ){