2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.io
.berlinModel
.in
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.ArrayList
;
15 import java
.util
.HashMap
;
16 import java
.util
.HashSet
;
17 import java
.util
.List
;
20 import java
.util
.SortedSet
;
21 import java
.util
.TreeSet
;
22 import java
.util
.UUID
;
24 import org
.apache
.commons
.lang
.StringUtils
;
25 import org
.apache
.log4j
.Logger
;
26 import org
.springframework
.stereotype
.Component
;
28 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
29 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelCommonNamesImportValidator
;
30 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
31 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
32 import eu
.etaxonomy
.cdm
.io
.common
.Source
;
33 import eu
.etaxonomy
.cdm
.model
.common
.Annotation
;
34 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
35 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
36 import eu
.etaxonomy
.cdm
.model
.common
.DescriptionElementSource
;
37 import eu
.etaxonomy
.cdm
.model
.common
.Extension
;
38 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
39 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
40 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
41 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
42 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
43 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
44 import eu
.etaxonomy
.cdm
.model
.location
.TdwgArea
;
45 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
46 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
48 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
57 public class BerlinModelCommonNamesImport
extends BerlinModelImportBase
{
58 private static final Logger logger
= Logger
.getLogger(BerlinModelCommonNamesImport
.class);
60 public static final UUID REFERENCE_LANGUAGE_ISO639_2_UUID
= UUID
.fromString("40c4f8dd-3d9c-44a4-b77a-76e137a89a5f");
61 public static final UUID REFERENCE_LANGUAGE_STRING_UUID
= UUID
.fromString("2a1b678f-c27d-48c1-b43e-98fd0d426305");
62 public static final UUID STATUS_ANNOTATION_UUID
= UUID
.fromString("e3f7b80a-1286-458d-812c-5e818f731968");
64 public static final String NAMESPACE
= "common name";
67 private static final String pluralString
= "common names";
68 private static final String dbTableName
= "emCommonName";
71 //map that stores the regions (named areas) and makes them accessible via the regionFk
72 private Map
<String
, NamedArea
> regionMap
= new HashMap
<String
, NamedArea
>();
76 public BerlinModelCommonNamesImport(){
83 protected String
getIdQuery() {
84 String result
= " SELECT CommonNameId FROM emCommonName ";
91 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
94 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
95 String recordQuery
= "";
97 " SELECT emCommonName.CommonNameId, emCommonName.CommonName, PTaxon.RIdentifier AS taxonId, emCommonName.PTNameFk, emCommonName.RefFk AS refId, emCommonName.Status, " +
98 " emCommonName.RegionFks, emCommonName.MisNameRefFk, emCommonName.NameInSourceFk , emCommonName.Created_When, emCommonName.Updated_When, emCommonName.Created_Who, emCommonName.Updated_Who, emCommonName.Note as Notes," +
99 " regionLanguage.Language AS regionLanguage, languageCommonName.Language, languageCommonName.LanguageOriginal, languageCommonName.ISO639_1, languageCommonName.ISO639_2, " +
100 " emLanguageRegion.Region, emLanguageReference.RefFk as languageRefRefFk, emLanguageReference.ReferenceShort, " +
101 " emLanguageReference.ReferenceLong, emLanguageReference.LanguageFk, languageReferenceLanguage.Language AS refLanguage, " +
102 " languageReferenceLanguage.ISO639_2 AS refLanguageIso639_2, regionLanguage.ISO639_2 AS regionLanguageIso, " +
103 " misappliedTaxon.RIdentifier AS misappliedTaxonId " +
104 " FROM emLanguage as regionLanguage RIGHT OUTER JOIN " +
105 " emLanguageRegion ON regionLanguage.LanguageId = emLanguageRegion.LanguageFk RIGHT OUTER JOIN " +
106 " emLanguage AS languageReferenceLanguage RIGHT OUTER JOIN " +
107 " emLanguageReference ON languageReferenceLanguage.LanguageId = emLanguageReference.LanguageFk RIGHT OUTER JOIN " +
108 " emCommonName INNER JOIN " +
109 " PTaxon ON emCommonName.PTNameFk = PTaxon.PTNameFk AND emCommonName.PTRefFk = PTaxon.PTRefFk ON " +
110 " emLanguageReference.ReferenceId = emCommonName.LanguageRefFk LEFT OUTER JOIN " +
111 " emLanguage AS languageCommonName ON emCommonName.LanguageFk = languageCommonName.LanguageId ON " +
112 " emLanguageRegion.RegionId = emCommonName.RegionFks LEFT OUTER JOIN " +
113 " PTaxon as misappliedTaxon ON emCommonName.PTNameFk = misappliedTaxon.PTNameFk AND emCommonName.MisNameRefFk = misappliedTaxon.PTRefFk " +
114 " WHERE emCommonName.CommonNameId IN (" + ID_LIST_TOKEN
+ ")";
121 protected boolean doInvoke(BerlinModelImportState state
) {
122 boolean result
= true;
124 result
&= makeRegions(state
);
125 } catch (Exception e
) {
126 logger
.error("Error when creating common name regions:" + e
.getMessage());
129 result
&= super.doInvoke(state
);
137 private boolean makeRegions(BerlinModelImportState state
) {
138 boolean result
= true;
140 SortedSet
<Integer
> regionFks
= new TreeSet
<Integer
>();
141 Source source
= state
.getConfig().getSource();
143 result
= getRegionFks(result
, regionFks
, source
);
144 //concat filter string
145 String sqlWhere
= getSqlWhere(regionFks
);
147 //get E+M - TDWG Mapping
148 Map
<String
, String
> emTdwgMap
= getEmTdwgMap(source
);
150 fillRegionMap(source
, sqlWhere
, emTdwgMap
);
153 } catch (NumberFormatException e
) {
156 } catch (SQLException e
) {
164 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
166 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
167 boolean success
= true ;
168 BerlinModelImportConfigurator config
= state
.getConfig();
169 Set
<TaxonBase
> taxaToSave
= new HashSet
<TaxonBase
>();
170 Map
<String
, Taxon
> taxonMap
= (Map
<String
, Taxon
>) partitioner
.getObjectMap(BerlinModelTaxonImport
.NAMESPACE
);
171 Map
<String
, TaxonNameBase
> taxonNameMap
= (Map
<String
, TaxonNameBase
>) partitioner
.getObjectMap(BerlinModelTaxonNameImport
.NAMESPACE
);
173 Map
<String
, Reference
> biblioRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
);
174 Map
<String
, Reference
> nomRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
);
176 Map
<String
, Language
> iso6392Map
= new HashMap
<String
, Language
>();
178 // logger.warn("MisappliedNameRefFk not yet implemented for Common Names");
180 ResultSet rs
= partitioner
.getResultSet();
184 //create TaxonName element
185 Object commonNameId
= rs
.getObject("CommonNameId");
186 int taxonId
= rs
.getInt("taxonId");
187 Object refId
= rs
.getObject("refId");
188 Object ptNameFk
= rs
.getObject("PTNameFk");
189 String commonNameString
= rs
.getString("CommonName");
190 String iso639_2
= rs
.getString("ISO639_2");
191 String iso639_1
= rs
.getString("ISO639_1");
192 String languageString
= rs
.getString("Language");
193 String originalLanguageString
= rs
.getString("LanguageOriginal");
194 Object misNameRefFk
= rs
.getObject("MisNameRefFk");
195 Object languageRefRefFk
= rs
.getObject("languageRefRefFk");
196 String refLanguage
= rs
.getString("refLanguage");
197 String refLanguageIso639_2
= rs
.getString("refLanguageIso639_2");
198 String status
= rs
.getString("Status");
199 Object nameInSourceFk
= rs
.getObject("NameInSourceFk");
200 Object misappliedTaxonId
= rs
.getObject("misappliedTaxonId");
203 String region
= rs
.getString("Region");
204 String regionFks
= rs
.getString("RegionFks");
205 String
[] regionFkSplit
= regionFks
.split(",");
208 if (CdmUtils
.isEmpty(commonNameString
)){
209 String message
= "CommonName is empty or null. Do not import record for taxon " + taxonId
;
210 logger
.warn(message
);
216 TaxonBase taxonBase
= null;
217 taxonBase
= taxonMap
.get(String
.valueOf(taxonId
));
218 if (taxonBase
== null){
219 logger
.warn("Taxon (" + taxonId
+ ") could not be found. Common name " + commonNameString
+ " not imported");
221 }else if (! taxonBase
.isInstanceOf(Taxon
.class)){
222 logger
.warn("taxon (" + taxonId
+ ") is not accepted. Can't import common name " + commonNameId
);
225 taxon
= CdmBase
.deproxy(taxonBase
, Taxon
.class);
229 Language language
= getAndHandleLanguage(iso6392Map
, iso639_2
, iso639_1
, languageString
, originalLanguageString
);
232 List
<CommonTaxonName
> commonTaxonNames
= new ArrayList
<CommonTaxonName
>();
233 for (String regionFk
: regionFkSplit
){
234 CommonTaxonName commonTaxonName
;
235 if (commonTaxonNames
.size() == 0){
236 commonTaxonName
= CommonTaxonName
.NewInstance(commonNameString
, language
);
238 commonTaxonName
= (CommonTaxonName
)commonTaxonNames
.get(0).clone();
240 commonTaxonNames
.add(commonTaxonName
);
241 regionFk
= regionFk
.trim();
242 NamedArea area
= regionMap
.get(regionFk
);
244 logger
.warn("Area for " + regionFk
+ " not defined.");
246 commonTaxonName
.setArea(area
);
247 TaxonDescription description
= getDescription(taxon
);
248 description
.addElement(commonTaxonName
);
253 String strRefId
= String
.valueOf(refId
);
254 String languageRefFk
= String
.valueOf(languageRefRefFk
);
255 if (! CdmUtils
.nullSafeEqual(strRefId
, languageRefFk
)){
256 logger
.warn("CommonName.RefFk (" + CdmUtils
.Nz(strRefId
) + ") and LanguageReference.RefFk " + CdmUtils
.Nz(languageRefFk
) + " are not equal. I will import only languageRefFk");
259 Reference reference
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(languageRefRefFk
));
260 String microCitation
= null;
261 String originalNameString
= null;
263 TaxonNameBase nameUsedInSource
= taxonNameMap
.get(String
.valueOf(nameInSourceFk
));
264 if (nameInSourceFk
!= null && nameUsedInSource
== null){
265 logger
.warn("Name used in source (" + nameInSourceFk
+ ") was not found");
267 DescriptionElementSource source
= DescriptionElementSource
.NewInstance(reference
, microCitation
, nameUsedInSource
, originalNameString
);
268 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
269 commonTaxonName
.addSource(source
);
273 if (misNameRefFk
!= null){
274 //Taxon misappliedName = getMisappliedName(biblioRefMap, nomRefMap, misNameRefFk, taxon);
275 Taxon misappliedName
= null;
276 if (misappliedTaxonId
!= null){
277 misappliedName
= taxonMap
.get(String
.valueOf(misappliedTaxonId
));
279 TaxonNameBase taxonName
= taxonNameMap
.get(String
.valueOf(ptNameFk
));
280 Reference sec
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(misNameRefFk
));
281 if (taxonName
== null || sec
== null){
282 logger
.info("Taxon name or misapplied name reference is null for common name " + commonNameId
);
284 misappliedName
= Taxon
.NewInstance(taxonName
, sec
);
285 taxaToSave
.add(misappliedName
);
288 if (misappliedName
!= null){
289 taxon
.addMisappliedName(misappliedName
, config
.getSourceReference(), null);
290 TaxonDescription misappliedNameDescription
= getDescription(misappliedName
);
291 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
292 CommonTaxonName commonNameClone
= (CommonTaxonName
)commonTaxonName
.clone();
293 misappliedNameDescription
.addElement(commonNameClone
);
296 logger
.warn("Misapplied name is null for common name " + commonNameId
);
302 //reference extensions
303 if (reference
!= null){
304 if (CdmUtils
.isNotEmpty(refLanguage
)){
305 ExtensionType refLanguageExtensionType
= getExtensionType( state
, REFERENCE_LANGUAGE_STRING_UUID
, "reference language","The language of the reference","ref. lang.");
306 Extension
.NewInstance(reference
, refLanguage
, refLanguageExtensionType
);
309 if (CdmUtils
.isNotEmpty(refLanguageIso639_2
)){
310 ExtensionType refLanguageIsoExtensionType
= getExtensionType( state
, REFERENCE_LANGUAGE_ISO639_2_UUID
, "reference language iso 639-2","The iso 639-2 code of the references language","ref. lang. 639-2");
311 Extension
.NewInstance(reference
, refLanguageIso639_2
, refLanguageIsoExtensionType
);
313 }else if (CdmUtils
.isNotEmpty(refLanguage
) || CdmUtils
.isNotEmpty(refLanguageIso639_2
)){
314 logger
.warn("Reference is null (" + languageRefRefFk
+ ") but refLanguage (" + CdmUtils
.Nz(refLanguage
) + ") or iso639_2 (" + CdmUtils
.Nz(refLanguageIso639_2
) + ") was not null");
318 if (CdmUtils
.isNotEmpty(status
)){
319 AnnotationType statusAnnotationType
= getAnnotationType( state
, STATUS_ANNOTATION_UUID
, "status","The status of this object","status");
320 Annotation annotation
= Annotation
.NewInstance(status
, statusAnnotationType
, Language
.DEFAULT());
321 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
322 commonTaxonName
.addAnnotation(annotation
);
328 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
329 doIdCreatedUpdatedNotes(state
, commonTaxonName
, rs
, String
.valueOf(commonNameId
), NAMESPACE
);
331 partitioner
.startDoSave();
332 taxaToSave
.add(taxon
);
335 } catch (SQLException e
) {
336 logger
.error("SQLException:" + e
);
338 } catch (ClassCastException e
) {
342 // logger.info( i + " names handled");
343 getTaxonService().save(taxaToSave
);
351 * Not used anymore. Use MisappliedName RIdentifier instead
352 * @param biblioRefMap
354 * @param misNameRefFk
357 private boolean isFirstMisappliedName
= true;
358 private Taxon
getMisappliedName(Map
<String
, Reference
> biblioRefMap
, Map
<String
, Reference
> nomRefMap
,
359 Object misNameRefFk
, Taxon taxon
) {
360 Taxon misappliedTaxon
= null;
361 Reference misNameRef
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(misNameRefFk
));
362 misappliedTaxon
= Taxon
.NewInstance(taxon
.getName(), misNameRef
);
363 Set
<String
> includeProperty
= new HashSet
<String
>();
365 // //IMatchStrategy matchStrategy = DefaultMatchStrategy.NewInstance(TaxonBase.class);
366 // //List<TaxonBase> misappliedList1 = getCommonService().findMatching(misappliedTaxon, matchStrategy);
367 List
<TaxonBase
> misappliedList
= getTaxonService().list(misappliedTaxon
, includeProperty
, null, null, null, null);
368 if (misappliedList
.size() > 0){
369 misappliedTaxon
= CdmBase
.deproxy(misappliedList
.get(0), Taxon
.class);
371 } catch (ClassCastException e
) {
372 logger
.error(e
.getMessage());
373 if (isFirstMisappliedName
){
375 isFirstMisappliedName
= false;
378 return misappliedTaxon
;
386 * @param languageString
387 * @param originalLanguageString
390 private Language
getAndHandleLanguage(Map
<String
, Language
> iso639Map
, String iso639_2
, String iso639_1
, String languageString
, String originalLanguageString
) {
392 if (CdmUtils
.isNotEmpty(iso639_2
)|| CdmUtils
.isNotEmpty(iso639_1
) ){
393 //TODO test performance, implement in state
394 language
= getLanguageFromIsoMap(iso639Map
, iso639_2
, iso639_1
);
396 if (language
== null){
397 language
= getTermService().getLanguageByIso(iso639_2
);
398 iso639Map
.put(iso639_2
, language
);
399 if (language
== null){
400 language
= getTermService().getLanguageByIso(iso639_1
);
401 iso639Map
.put(iso639_1
, language
);
403 if (language
== null){
404 logger
.warn("Language for code ISO693-2 '" + iso639_2
+ "' and ISO693-1 '" + iso639_1
+ "' was not found");
407 } else if ("unknown".equals(languageString
)){
408 language
= Language
.UNKNOWN_LANGUAGE();
410 logger
.warn("language ISO 639_1 and ISO 639_2 were empty for " + languageString
);
413 addOriginalLanguage(language
, originalLanguageString
);
424 private Language
getLanguageFromIsoMap(Map
<String
, Language
> iso639Map
, String iso639_2
, String iso639_1
) {
426 language
= iso639Map
.get(iso639_2
);
427 if (language
== null){
428 language
= iso639Map
.get(iso639_1
);
435 * @param originalLanguageString
437 private void addOriginalLanguage(Language language
, String originalLanguageString
) {
438 if (CdmUtils
.isEmpty(originalLanguageString
)){
440 }else if (language
== null){
441 logger
.warn("Language could not be defined, but originalLanguageString exists: " + originalLanguageString
);
443 Representation representation
= language
.getRepresentation(language
);
444 if (representation
== null){
445 language
.addRepresentation(Representation
.NewInstance(originalLanguageString
, originalLanguageString
, originalLanguageString
, language
));
446 getTermService().saveOrUpdate(language
);
459 * @throws SQLException
461 private boolean getRegionFks(boolean result
, SortedSet
<Integer
> regionFks
,
462 Source source
) throws SQLException
{
463 String sql
= " SELECT DISTINCT RegionFks FROM emCommonName";
464 ResultSet rs
= source
.getResultSet(sql
);
466 String strRegionFks
= rs
.getString("RegionFks");
467 String
[] regionFkArray
= strRegionFks
.split(",");
468 for (String regionFk
: regionFkArray
){
469 regionFk
= regionFk
.trim();
470 if (! StringUtils
.isNumeric(regionFk
) || "".equals(regionFk
) ){
472 logger
.warn("RegionFk is not numeric: " + regionFk
);
474 regionFks
.add(Integer
.valueOf(regionFk
));
487 * @throws SQLException
489 private void fillRegionMap(Source source
, String sqlWhere
,
490 Map
<String
, String
> emTdwgMap
) throws SQLException
{
493 sql
= " SELECT RegionId, Region FROM emLanguageRegion WHERE RegionId IN ("+ sqlWhere
+ ") ";
494 rs
= source
.getResultSet(sql
);
496 Object regionId
= rs
.getObject("RegionId");
497 String region
= rs
.getString("Region");
498 String
[] splitRegion
= region
.split("-");
499 if (splitRegion
.length
<= 1){
500 NamedArea newArea
= NamedArea
.NewInstance(region
, region
, null);
501 getTermService().save(newArea
);
502 regionMap
.put(String
.valueOf(regionId
), newArea
);
503 logger
.warn("Found new area: " + region
);
504 }else if (splitRegion
.length
== 2){
505 String emCode
= splitRegion
[1].trim();
506 String tdwgCode
= emTdwgMap
.get(emCode
);
507 if (StringUtils
.isNotBlank(tdwgCode
) ){
508 NamedArea tdwgArea
= getNamedArea(tdwgCode
);
509 regionMap
.put(String
.valueOf(regionId
), tdwgArea
);
511 logger
.warn("emCode did not map to valid tdwgCode: " + CdmUtils
.Nz(emCode
) + "->" + CdmUtils
.Nz(tdwgCode
));
521 private NamedArea
getNamedArea(String tdwgCode
) {
523 if (tdwgCode
.equalsIgnoreCase("Ab")){
524 area
= NamedArea
.NewInstance("Azerbaijan (including Nakhichevan)", "Azerbaijan & Nakhichevan", "Ab");
525 getTermService().save(area
);
526 }else if (tdwgCode
.equalsIgnoreCase("Rf")){
527 area
= NamedArea
.NewInstance("The Russian Federation", "The Russian Federation", "Rf");
528 getTermService().save(area
);
529 }else if (tdwgCode
.equalsIgnoreCase("Uk")){
530 area
= NamedArea
.NewInstance("Ukraine (including Crimea)", "Ukraine & Crimea", "Uk");
531 getTermService().save(area
);
533 area
= TdwgArea
.getAreaByTdwgAbbreviation(tdwgCode
);
544 private String
getSqlWhere(SortedSet
<Integer
> regionFks
) {
545 String sqlWhere
= "";
546 for (Integer regionFk
: regionFks
){
547 sqlWhere
+= regionFk
+ ",";
549 sqlWhere
= sqlWhere
.substring(0, sqlWhere
.length()-1);
557 * @throws SQLException
559 private Map
<String
, String
> getEmTdwgMap(Source source
) throws SQLException
{
562 Map
<String
, String
> emTdwgMap
= new HashMap
<String
, String
>();
563 sql
= " SELECT EmCode, TDWGCode FROM emArea ";
564 rs
= source
.getResultSet(sql
);
566 String emCode
= rs
.getString("EMCode");
567 String TDWGCode
= rs
.getString("TDWGCode");
568 if (StringUtils
.isNotBlank(emCode
) ){
569 emCode
= emCode
.trim();
570 if (emCode
.equalsIgnoreCase("Ab") || emCode
.equalsIgnoreCase("Rf")|| emCode
.equalsIgnoreCase("Uk") ){
571 emTdwgMap
.put(emCode
, emCode
);
572 }else if (StringUtils
.isNotBlank(TDWGCode
)){
573 emTdwgMap
.put(emCode
, TDWGCode
.trim());
584 * Returns the first non-image gallery description. Creates a new one if no description exists.
588 private TaxonDescription
getDescription(Taxon taxon
) {
589 TaxonDescription result
= null;
590 for (TaxonDescription taxonDescription
: taxon
.getDescriptions()){
591 if (! taxonDescription
.isImageGallery()){
592 result
= taxonDescription
;
596 result
= TaxonDescription
.NewInstance(taxon
);
602 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
604 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
608 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
611 Set
<String
> taxonIdSet
= new HashSet
<String
>();
612 Set
<String
> nameIdSet
= new HashSet
<String
>();
613 Set
<String
> referenceIdSet
= new HashSet
<String
>();
615 handleForeignKey(rs
, taxonIdSet
, "taxonId");
616 handleForeignKey(rs
, taxonIdSet
, "misappliedTaxonId");
617 handleForeignKey(rs
, referenceIdSet
, "refId");
618 handleForeignKey(rs
, referenceIdSet
, "languageRefRefFk");
619 handleForeignKey(rs
, nameIdSet
, "NameInSourceFk");
620 handleForeignKey(rs
, nameIdSet
, "PTNameFk");
621 handleForeignKey(rs
, referenceIdSet
, "MisNameRefFk");
625 nameSpace
= BerlinModelTaxonNameImport
.NAMESPACE
;
626 cdmClass
= TaxonNameBase
.class;
628 Map
<String
, TaxonNameBase
> nameMap
= (Map
<String
, TaxonNameBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
629 result
.put(nameSpace
, nameMap
);
632 nameSpace
= BerlinModelTaxonImport
.NAMESPACE
;
633 cdmClass
= Taxon
.class;
635 Map
<String
, TaxonNameBase
> taxonMap
= (Map
<String
, TaxonNameBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
636 result
.put(nameSpace
, taxonMap
);
639 nameSpace
= BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
;
640 cdmClass
= Reference
.class;
641 idSet
= referenceIdSet
;
642 Map
<String
, Reference
> nomReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
643 result
.put(nameSpace
, nomReferenceMap
);
645 //biblio reference map
646 nameSpace
= BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
;
647 cdmClass
= Reference
.class;
648 idSet
= referenceIdSet
;
649 Map
<String
, Reference
> biblioReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
650 result
.put(nameSpace
, biblioReferenceMap
);
652 } catch (SQLException e
) {
653 throw new RuntimeException(e
);
654 } catch (NullPointerException nep
){
655 logger
.error("NullPointerException in getRelatedObjectsForPartition()");
663 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
666 protected boolean doCheck(BerlinModelImportState state
){
667 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelCommonNamesImportValidator();
668 return validator
.validate(state
);
673 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
676 protected String
getTableName() {
681 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
684 public String
getPluralString() {
689 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
691 protected boolean isIgnore(BerlinModelImportState state
){
692 return ! state
.getConfig().isDoCommonNames();