1 package eu
.etaxonomy
.cdm
.io
.berlinModel
;
3 import java
.sql
.ResultSet
;
4 import java
.sql
.SQLException
;
5 import java
.util
.HashMap
;
10 import org
.apache
.log4j
.Logger
;
12 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationController
;
13 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
14 import eu
.etaxonomy
.cdm
.api
.service
.IReferenceService
;
15 import eu
.etaxonomy
.cdm
.io
.source
.Source
;
16 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
17 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
18 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
19 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
20 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
21 import eu
.etaxonomy
.cdm
.strategy
.exceptions
.UnknownRankException
;
23 public class BerlinModelTaxonNameIO
{
24 private static final Logger logger
= Logger
.getLogger(BerlinModelTaxonNameIO
.class);
26 private static int modCount
= 1000;
28 public static boolean invoke(
30 CdmApplicationController cdmApp
,
32 MapWrapper
<TaxonNameBase
> taxonNameMap
,
33 MapWrapper
<ReferenceBase
> referenceMap
){
38 boolean success
= true ;
40 logger
.info("start makeTaxonNames ...");
41 INameService nameService
= cdmApp
.getNameService();
42 IReferenceService referenceService
= cdmApp
.getReferenceService();
43 boolean delete
= deleteAll
;
47 // List<TaxonNameBase> listAllNames = nameService.getAllNames(0, 1000);
48 // while(listAllNames.size() > 0 ){
49 // for (TaxonNameBase name : listAllNames ){
51 // //nameService.remove(name);
53 // listAllNames = nameService.getAllNames(0, 1000);
60 //get data from database
62 "SELECT Name.* , RefDetail.RefDetailId, RefDetail.RefFk, " +
63 " RefDetail.FullRefCache, RefDetail.FullNomRefCache, RefDetail.PreliminaryFlag AS RefDetailPrelim, RefDetail.Details, " +
64 " RefDetail.SecondarySources, RefDetail.IdInSource " +
65 " FROM Name LEFT OUTER JOIN RefDetail ON Name.NomRefDetailFk = RefDetail.RefDetailId AND Name.NomRefDetailFk = RefDetail.RefDetailId AND " +
66 " Name.NomRefFk = RefDetail.RefFk AND Name.NomRefFk = RefDetail.RefFk";
67 ResultSet rs
= source
.getResultSet(strQuery
) ;
73 if ((i
++ % modCount
) == 0){ logger
.info("Names handled: " + (i
-1));}
75 //create TaxonName element
76 int nameId
= rs
.getInt("nameId");
77 int rankId
= rs
.getInt("rankFk");
78 Object nomRefFk
= rs
.getInt("NomRefFk");
82 Rank rank
= BerlinModelTransformer
.rankId2Rank(rankId
);
84 //BotanicalName name = BotanicalName.NewInstance(BerlinModelTransformer.rankId2Rank(rankId));
85 BotanicalName botanicalName
= new BotanicalName(rank
);
88 dbAttrName
= "supraGenericName";
92 cdmAttrName
= "genusOrUninomial";
93 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
95 dbAttrName
= "genusSubdivisionEpi";
96 cdmAttrName
= "infraGenericEpithet";
97 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
99 dbAttrName
= "speciesEpi";
100 cdmAttrName
= "specificEpithet";
101 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
104 dbAttrName
= "infraSpeciesEpi";
105 cdmAttrName
= "infraSpecificEpithet";
106 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
108 dbAttrName
= "unnamedNamePhrase";
109 cdmAttrName
= "appendedPhrase";
110 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
112 dbAttrName
= "preliminaryFlag";
113 cdmAttrName
= "XX" + "protectedTitleCache";
114 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
116 dbAttrName
= "HybridFormulaFlag";
117 cdmAttrName
= "isHybridFormula";
118 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
120 dbAttrName
= "MonomHybFlag";
121 cdmAttrName
= "isMonomHybrid";
122 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
124 dbAttrName
= "BinomHybFlag";
125 cdmAttrName
= "isBinomHybrid";
126 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
128 dbAttrName
= "TrinomHybFlag";
129 cdmAttrName
= "isTrinomHybrid";
130 success
&= ImportHelper
.addBooleanValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
134 // dbAttrName = "notes";
135 // cdmAttrName = "isTrinomHybrid";
136 // ImportHelper.addStringValue(rs, botanicalName, dbAttrName, cdmAttrName);
149 dbAttrName
= "details";
150 cdmAttrName
= "nomenclaturalMicroReference";
151 success
&= ImportHelper
.addStringValue(rs
, botanicalName
, dbAttrName
, cdmAttrName
);
156 if (referenceMap
!= null){
157 if (nomRefFk
!= null){
158 int nomRefFkInt
= (Integer
)nomRefFk
;
159 ReferenceBase nomenclaturalReference
= referenceMap
.get(nomRefFkInt
);
160 if (INomenclaturalReference
.class.isAssignableFrom(nomenclaturalReference
.getClass())){
161 botanicalName
.setNomenclaturalReference((INomenclaturalReference
)nomenclaturalReference
);
163 logger
.error("Nomenclatural reference (nomRefFk = " + nomRefFkInt
+ ") for TaxonName (nameId = " + nameId
+ ")"+
164 " is not assignable from INomenclaturalReference. Relation was not set!!");
173 // Annotation annotation = new Annotation("Berlin Model nameId: " + String.valueOf(refId), Language.DEFAULT());
174 // botanicalName.addAnnotations(annotation);
176 taxonNameMap
.put(nameId
, botanicalName
);
178 } catch (UnknownRankException e
) {
179 logger
.warn("Name with id " + nameId
+ " has unknown rankId " + rankId
+ " and could not be saved.");
183 } //while rs.hasNext()
184 nameService
.saveTaxonNameAll(taxonNameMap
.objects());
188 // strAttrName = "nomenclaturalCode";
189 // strValue = "Botanical";
190 // parent = elTaxonName;
191 // xml.addStringAttribute(strValue, parent, strAttrName, NS_NULL);
194 // strDbAttr = "FullNameCache";
195 // strElName = "Simple";
196 // parent = elTaxonName;
197 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, OBLIGATORY);
201 // strDbAttr = "RankAbbrev";
202 // strElName = "Rank";
203 // parent = elTaxonName;
204 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, OBLIGATORY);
207 // parent = elTaxonName;
208 // makeCanonicalName(rs, parent);
211 // //CanonicalAuthorship
212 // parent = elTaxonName;
213 // makeCanonicalAuthorship(rs, parent);
215 // } //fi fullVersion
218 // strDbAttr = "NomRefFk";
219 // strAttrName = "ref";
220 // strElName = "PublishedIn";
221 // parent = elTaxonName;
222 // Attribute attrPublRef = xml.addAttributeInElement(rs, strDbAttr, parent, strAttrName, strElName, nsTcs, FACULTATIVE);
224 // if (attrPublRef != null){
225 // //does Publication exist?
226 // String ref = attrPublRef.getValue();
227 // if (! publicationMap.containsKey(ref)){
228 // logger.error("PublishedIn ref " + ref + " for " + nameId + " does not exist.");
235 // String year = rs.getString("RefYear");
236 // if (year == null) {
237 // year = rs.getString("HigherRefYear");
240 // strElName = "Year";
241 // parent = elTaxonName;
242 // xml.addStringElement(strValue, parent, strElName, nsTcs, FACULTATIVE);
245 // strDbAttr = "Details";
246 // strElName = "MicroReference";
247 // parent = elTaxonName;
248 // xml.addElement(rs,strDbAttr, parent, strElName, nsTcs, FACULTATIVE);
253 // //insert related Names (Basionyms, ReplacedSyns, etc.
254 // makeSpellingCorrections(nameMap);
255 // makeBasionyms(nameMap);
256 // makeLaterHomonyms(nameMap);
257 // makeReplacedNames(nameMap);
259 // //insert Status infos
260 // makeNameSpecificData(nameMap);
262 logger
.info("end makeTaxonNames ...");
264 } catch (SQLException e
) {
265 logger
.error("SQLException:" + e
);