1 package eu
.etaxonomy
.cdm
.io
.berlinModel
;
3 import java
.sql
.ResultSet
;
4 import java
.sql
.SQLException
;
9 import org
.apache
.log4j
.Logger
;
11 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationController
;
12 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
13 import eu
.etaxonomy
.cdm
.api
.service
.IReferenceService
;
14 import eu
.etaxonomy
.cdm
.io
.source
.Source
;
15 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
16 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
17 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
18 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
19 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
20 import eu
.etaxonomy
.cdm
.strategy
.exceptions
.UnknownRankException
;
22 public class BerlinModelTaxonNameIO
{
23 private static final Logger logger
= Logger
.getLogger(BerlinModelTaxonNameIO
.class);
25 private static int modCount
= 1000;
27 public static boolean invoke(
29 CdmApplicationController cdmApp
,
31 Map
<Integer
, UUID
> taxonNameMap
,
32 Map
<Integer
, UUID
> referenceMap
){
37 boolean success
= true ;
39 logger
.info("start makeTaxonNames ...");
40 INameService nameService
= cdmApp
.getNameService();
41 IReferenceService referenceService
= cdmApp
.getReferenceService();
42 boolean delete
= deleteAll
;
45 List
<TaxonNameBase
> listAllNames
= nameService
.getAllNames(0, 1000);
46 while(listAllNames
.size() > 0 ){
47 for (TaxonNameBase name
: listAllNames
){
49 //nameService.remove(name);
51 listAllNames
= nameService
.getAllNames(0, 1000);
58 //get data from database
60 "SELECT TOP 102 Name.* , RefDetail.RefDetailId, RefDetail.RefFk, " +
61 " RefDetail.FullRefCache, RefDetail.FullNomRefCache, RefDetail.PreliminaryFlag AS RefDetailPrelim, RefDetail.Details, " +
62 " RefDetail.SecondarySources, RefDetail.IdInSource " +
63 " FROM Name LEFT OUTER JOIN RefDetail ON Name.NomRefDetailFk = RefDetail.RefDetailId AND Name.NomRefDetailFk = RefDetail.RefDetailId AND " +
64 " Name.NomRefFk = RefDetail.RefFk AND Name.NomRefFk = RefDetail.RefFk";
65 ResultSet rs
= source
.getResultSet(strQuery
) ;
71 if ((i
++ % modCount
) == 0){ logger
.info("Names handled: " + (i
-1));}
73 //create TaxonName element
74 int nameId
= rs
.getInt("nameId");
75 int rankId
= rs
.getInt("rankFk");
76 Object nomRefFk
= rs
.getInt("NomRefFk");
80 Rank rank
= BerlinModelTransformer
.rankId2Rank(rankId
);
82 //BotanicalName name = BotanicalName.NewInstance(BerlinModelTransformer.rankId2Rank(rankId));
83 BotanicalName botanicalName
= new BotanicalName(rank
);
86 dbAttrName
= "supraGenericName";
90 cdmAttrName
= "genusOrUninomial";
91 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
93 dbAttrName
= "genusSubdivisionEpi";
94 cdmAttrName
= "infraGenericEpithet";
95 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
97 dbAttrName
= "speciesEpi";
98 cdmAttrName
= "specificEpithet";
99 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
102 dbAttrName
= "infraSpeciesEpi";
103 cdmAttrName
= "infraSpecificEpithet";
104 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
106 dbAttrName
= "unnamedNamePhrase";
107 cdmAttrName
= "appendedPhrase";
108 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
110 dbAttrName
= "preliminaryFlag";
111 cdmAttrName
= "XX" + "protectedTitleCache";
112 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
114 dbAttrName
= "HybridFormulaFlag";
115 cdmAttrName
= "isHybridFormula";
116 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
118 dbAttrName
= "MonomHybFlag";
119 cdmAttrName
= "isMonomHybrid";
120 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
122 dbAttrName
= "BinomHybFlag";
123 cdmAttrName
= "isBinomHybrid";
124 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
126 dbAttrName
= "TrinomHybFlag";
127 cdmAttrName
= "isTrinomHybrid";
128 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
132 // dbAttrName = "notes";
133 // cdmAttrName = "isTrinomHybrid";
134 // ImportHelper.addStringValue(rs, botanicalName, dbAttrName, cdmAttrName);
147 dbAttrName
= "details";
148 cdmAttrName
= "nomenclaturalMicroReference";
149 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
154 if (referenceMap
!= null){
155 if (nomRefFk
!= null){
156 int nomRefFkInt
= (Integer
)nomRefFk
;
157 UUID referenceUuid
= referenceMap
.get(nomRefFkInt
);
158 ReferenceBase nomenclaturalReference
= referenceService
.getReferenceByUuid(referenceUuid
);
159 if (INomenclaturalReference
.class.isAssignableFrom(nomenclaturalReference
.getClass())){
160 botanicalName
.setNomenclaturalReference((INomenclaturalReference
)nomenclaturalReference
);
162 logger
.error("Nomenclatural reference (nomRefFk = " + nomRefFkInt
+ ") for TaxonName (nameId = " + nameId
+ ")"+
163 " is not assignable from INomenclaturalReference. Relation was not set!!");
172 // Annotation annotation = new Annotation("Berlin Model nameId: " + String.valueOf(refId), Language.DEFAULT());
173 // botanicalName.addAnnotations(annotation);
176 UUID nameUuid
= nameService
.saveTaxonName(botanicalName
);
177 taxonNameMap
.put(nameId
, nameUuid
);
179 } catch (UnknownRankException e
) {
180 logger
.warn("Name with id " + nameId
+ " has unknown rankId " + rankId
+ " and could not be saved.");
187 // strAttrName = "nomenclaturalCode";
188 // strValue = "Botanical";
189 // parent = elTaxonName;
190 // xml.addStringAttribute(strValue, parent, strAttrName, NS_NULL);
193 // strDbAttr = "FullNameCache";
194 // strElName = "Simple";
195 // parent = elTaxonName;
196 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, OBLIGATORY);
200 // strDbAttr = "RankAbbrev";
201 // strElName = "Rank";
202 // parent = elTaxonName;
203 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, OBLIGATORY);
206 // parent = elTaxonName;
207 // makeCanonicalName(rs, parent);
210 // //CanonicalAuthorship
211 // parent = elTaxonName;
212 // makeCanonicalAuthorship(rs, parent);
214 // } //fi fullVersion
217 // strDbAttr = "NomRefFk";
218 // strAttrName = "ref";
219 // strElName = "PublishedIn";
220 // parent = elTaxonName;
221 // Attribute attrPublRef = xml.addAttributeInElement(rs, strDbAttr, parent, strAttrName, strElName, nsTcs, FACULTATIVE);
223 // if (attrPublRef != null){
224 // //does Publication exist?
225 // String ref = attrPublRef.getValue();
226 // if (! publicationMap.containsKey(ref)){
227 // logger.error("PublishedIn ref " + ref + " for " + nameId + " does not exist.");
234 // String year = rs.getString("RefYear");
235 // if (year == null) {
236 // year = rs.getString("HigherRefYear");
239 // strElName = "Year";
240 // parent = elTaxonName;
241 // xml.addStringElement(strValue, parent, strElName, nsTcs, FACULTATIVE);
244 // strDbAttr = "Details";
245 // strElName = "MicroReference";
246 // parent = elTaxonName;
247 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, FACULTATIVE);
252 // //insert related Names (Basionyms, ReplacedSyns, etc.
253 // makeSpellingCorrections(nameMap);
254 // makeBasionyms(nameMap);
255 // makeLaterHomonyms(nameMap);
256 // makeReplacedNames(nameMap);
258 // //insert Status infos
259 // makeNameSpecificData(nameMap);
261 logger
.info("end makeTaxonNames ...");
263 } catch (SQLException e
) {
264 logger
.error("SQLException:" + e
);