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 int modCount
= 10000;
68 private static final String pluralString
= "common names";
69 private static final String dbTableName
= "emCommonName";
72 //map that stores the regions (named areas) and makes them accessible via the regionFk
73 private Map
<String
, NamedArea
> regionMap
= new HashMap
<String
, NamedArea
>();
77 public BerlinModelCommonNamesImport(){
84 protected String
getIdQuery() {
85 String result
= " SELECT CommonNameId FROM emCommonName ";
92 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
95 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
96 String recordQuery
= "";
98 " SELECT emCommonName.CommonNameId, emCommonName.CommonName, PTaxon.RIdentifier AS taxonId, emCommonName.PTNameFk, emCommonName.RefFk AS refId, emCommonName.Status, " +
99 " emCommonName.RegionFks, emCommonName.MisNameRefFk, emCommonName.NameInSourceFk , emCommonName.Created_When, emCommonName.Updated_When, emCommonName.Created_Who, emCommonName.Updated_Who, emCommonName.Note as Notes," +
100 " regionLanguage.Language AS regionLanguage, languageCommonName.Language, languageCommonName.LanguageOriginal, languageCommonName.ISO639_1, languageCommonName.ISO639_2, " +
101 " emLanguageRegion.Region, emLanguageReference.RefFk as languageRefRefFk, emLanguageReference.ReferenceShort, " +
102 " emLanguageReference.ReferenceLong, emLanguageReference.LanguageFk, languageReferenceLanguage.Language AS refLanguage, " +
103 " languageReferenceLanguage.ISO639_2 AS refLanguageIso639_2, regionLanguage.ISO639_2 AS regionLanguageIso, " +
104 " misappliedTaxon.RIdentifier AS misappliedTaxonId " +
105 " FROM emLanguage as regionLanguage RIGHT OUTER JOIN " +
106 " emLanguageRegion ON regionLanguage.LanguageId = emLanguageRegion.LanguageFk RIGHT OUTER JOIN " +
107 " emLanguage AS languageReferenceLanguage RIGHT OUTER JOIN " +
108 " emLanguageReference ON languageReferenceLanguage.LanguageId = emLanguageReference.LanguageFk RIGHT OUTER JOIN " +
109 " emCommonName INNER JOIN " +
110 " PTaxon ON emCommonName.PTNameFk = PTaxon.PTNameFk AND emCommonName.PTRefFk = PTaxon.PTRefFk ON " +
111 " emLanguageReference.ReferenceId = emCommonName.LanguageRefFk LEFT OUTER JOIN " +
112 " emLanguage AS languageCommonName ON emCommonName.LanguageFk = languageCommonName.LanguageId ON " +
113 " emLanguageRegion.RegionId = emCommonName.RegionFks LEFT OUTER JOIN " +
114 " PTaxon as misappliedTaxon ON emCommonName.PTNameFk = misappliedTaxon.PTNameFk AND emCommonName.MisNameRefFk = misappliedTaxon.PTRefFk " +
115 " WHERE emCommonName.CommonNameId IN (" + ID_LIST_TOKEN
+ ")";
122 protected boolean doInvoke(BerlinModelImportState state
) {
123 boolean result
= true;
125 result
&= makeRegions(state
);
126 } catch (Exception e
) {
127 logger
.error("Error when creating common name regions:" + e
.getMessage());
130 result
&= super.doInvoke(state
);
138 private boolean makeRegions(BerlinModelImportState state
) {
139 boolean result
= true;
141 SortedSet
<Integer
> regionFks
= new TreeSet
<Integer
>();
142 Source source
= state
.getConfig().getSource();
144 result
= getRegionFks(result
, regionFks
, source
);
145 //concat filter string
146 String sqlWhere
= getSqlWhere(regionFks
);
148 //get E+M - TDWG Mapping
149 Map
<String
, String
> emTdwgMap
= getEmTdwgMap(source
);
151 fillRegionMap(source
, sqlWhere
, emTdwgMap
);
154 } catch (NumberFormatException e
) {
157 } catch (SQLException e
) {
165 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
167 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
168 boolean success
= true ;
169 BerlinModelImportConfigurator config
= state
.getConfig();
170 Set
<TaxonBase
> taxaToSave
= new HashSet
<TaxonBase
>();
171 Map
<String
, Taxon
> taxonMap
= (Map
<String
, Taxon
>) partitioner
.getObjectMap(BerlinModelTaxonImport
.NAMESPACE
);
172 Map
<String
, TaxonNameBase
> taxonNameMap
= (Map
<String
, TaxonNameBase
>) partitioner
.getObjectMap(BerlinModelTaxonNameImport
.NAMESPACE
);
174 Map
<String
, Reference
> biblioRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
);
175 Map
<String
, Reference
> nomRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
);
177 Map
<String
, Language
> iso6392Map
= new HashMap
<String
, Language
>();
179 // logger.warn("MisappliedNameRefFk not yet implemented for Common Names");
181 ResultSet rs
= partitioner
.getResultSet();
185 //create TaxonName element
186 Object commonNameId
= rs
.getObject("CommonNameId");
187 int taxonId
= rs
.getInt("taxonId");
188 Object refId
= rs
.getObject("refId");
189 Object ptNameFk
= rs
.getObject("PTNameFk");
190 String commonNameString
= rs
.getString("CommonName");
191 String iso639_2
= rs
.getString("ISO639_2");
192 String iso639_1
= rs
.getString("ISO639_1");
193 String languageString
= rs
.getString("Language");
194 String originalLanguageString
= rs
.getString("LanguageOriginal");
195 Object misNameRefFk
= rs
.getObject("MisNameRefFk");
196 Object languageRefRefFk
= rs
.getObject("languageRefRefFk");
197 String refLanguage
= rs
.getString("refLanguage");
198 String refLanguageIso639_2
= rs
.getString("refLanguageIso639_2");
199 String status
= rs
.getString("Status");
200 Object nameInSourceFk
= rs
.getObject("NameInSourceFk");
201 Object misappliedTaxonId
= rs
.getObject("misappliedTaxonId");
204 String region
= rs
.getString("Region");
205 String regionFks
= rs
.getString("RegionFks");
206 String
[] regionFkSplit
= regionFks
.split(",");
209 if (CdmUtils
.isEmpty(commonNameString
)){
210 String message
= "CommonName is empty or null. Do not import record for taxon " + taxonId
;
211 logger
.warn(message
);
217 TaxonBase taxonBase
= null;
218 taxonBase
= taxonMap
.get(String
.valueOf(taxonId
));
219 if (taxonBase
== null){
220 logger
.warn("Taxon (" + taxonId
+ ") could not be found. Common name " + commonNameString
+ " not imported");
222 }else if (! taxonBase
.isInstanceOf(Taxon
.class)){
223 logger
.warn("taxon (" + taxonId
+ ") is not accepted. Can't import common name " + commonNameId
);
226 taxon
= CdmBase
.deproxy(taxonBase
, Taxon
.class);
230 Language language
= getAndHandleLanguage(iso6392Map
, iso639_2
, iso639_1
, languageString
, originalLanguageString
);
233 List
<CommonTaxonName
> commonTaxonNames
= new ArrayList
<CommonTaxonName
>();
234 for (String regionFk
: regionFkSplit
){
235 CommonTaxonName commonTaxonName
;
236 if (commonTaxonNames
.size() == 0){
237 commonTaxonName
= CommonTaxonName
.NewInstance(commonNameString
, language
);
239 commonTaxonName
= (CommonTaxonName
)commonTaxonNames
.get(0).clone();
241 commonTaxonNames
.add(commonTaxonName
);
242 regionFk
= regionFk
.trim();
243 NamedArea area
= regionMap
.get(regionFk
);
245 logger
.warn("Area for " + regionFk
+ " not defined.");
247 commonTaxonName
.setArea(area
);
248 TaxonDescription description
= getDescription(taxon
);
249 description
.addElement(commonTaxonName
);
254 String strRefId
= String
.valueOf(refId
);
255 String languageRefFk
= String
.valueOf(languageRefRefFk
);
256 if (! CdmUtils
.nullSafeEqual(strRefId
, languageRefFk
)){
257 logger
.warn("CommonName.RefFk (" + CdmUtils
.Nz(strRefId
) + ") and LanguageReference.RefFk " + CdmUtils
.Nz(languageRefFk
) + " are not equal. I will import only languageRefFk");
260 Reference reference
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(languageRefRefFk
));
261 String microCitation
= null;
262 String originalNameString
= null;
264 TaxonNameBase nameUsedInSource
= taxonNameMap
.get(String
.valueOf(nameInSourceFk
));
265 if (nameInSourceFk
!= null && nameUsedInSource
== null){
266 logger
.warn("Name used in source (" + nameInSourceFk
+ ") was not found");
268 DescriptionElementSource source
= DescriptionElementSource
.NewInstance(reference
, microCitation
, nameUsedInSource
, originalNameString
);
269 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
270 commonTaxonName
.addSource(source
);
274 if (misNameRefFk
!= null){
275 //Taxon misappliedName = getMisappliedName(biblioRefMap, nomRefMap, misNameRefFk, taxon);
276 Taxon misappliedName
= null;
277 if (misappliedTaxonId
!= null){
278 misappliedName
= taxonMap
.get(String
.valueOf(misappliedTaxonId
));
280 TaxonNameBase taxonName
= taxonNameMap
.get(String
.valueOf(ptNameFk
));
281 Reference sec
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(misNameRefFk
));
282 if (taxonName
== null || sec
== null){
283 logger
.info("Taxon name or misapplied name reference is null for common name " + commonNameId
);
285 misappliedName
= Taxon
.NewInstance(taxonName
, sec
);
286 taxaToSave
.add(misappliedName
);
289 if (misappliedName
!= null){
290 taxon
.addMisappliedName(misappliedName
, config
.getSourceReference(), null);
291 TaxonDescription misappliedNameDescription
= getDescription(misappliedName
);
292 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
293 CommonTaxonName commonNameClone
= (CommonTaxonName
)commonTaxonName
.clone();
294 misappliedNameDescription
.addElement(commonNameClone
);
297 logger
.warn("Misapplied name is null for common name " + commonNameId
);
303 //reference extensions
304 if (reference
!= null){
305 if (CdmUtils
.isNotEmpty(refLanguage
)){
306 ExtensionType refLanguageExtensionType
= getExtensionType( state
, REFERENCE_LANGUAGE_STRING_UUID
, "reference language","The language of the reference","ref. lang.");
307 Extension
.NewInstance(reference
, refLanguage
, refLanguageExtensionType
);
310 if (CdmUtils
.isNotEmpty(refLanguageIso639_2
)){
311 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");
312 Extension
.NewInstance(reference
, refLanguageIso639_2
, refLanguageIsoExtensionType
);
314 }else if (CdmUtils
.isNotEmpty(refLanguage
) || CdmUtils
.isNotEmpty(refLanguageIso639_2
)){
315 logger
.warn("Reference is null (" + languageRefRefFk
+ ") but refLanguage (" + CdmUtils
.Nz(refLanguage
) + ") or iso639_2 (" + CdmUtils
.Nz(refLanguageIso639_2
) + ") was not null");
319 if (CdmUtils
.isNotEmpty(status
)){
320 AnnotationType statusAnnotationType
= getAnnotationType( state
, STATUS_ANNOTATION_UUID
, "status","The status of this object","status");
321 Annotation annotation
= Annotation
.NewInstance(status
, statusAnnotationType
, Language
.DEFAULT());
322 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
323 commonTaxonName
.addAnnotation(annotation
);
329 for (CommonTaxonName commonTaxonName
: commonTaxonNames
){
330 doIdCreatedUpdatedNotes(state
, commonTaxonName
, rs
, String
.valueOf(commonNameId
), NAMESPACE
);
332 partitioner
.startDoSave();
333 taxaToSave
.add(taxon
);
336 } catch (SQLException e
) {
337 logger
.error("SQLException:" + e
);
339 } catch (ClassCastException e
) {
343 // logger.info( i + " names handled");
344 getTaxonService().save(taxaToSave
);
352 * Not used anymore. Use MisappliedName RIdentifier instead
353 * @param biblioRefMap
355 * @param misNameRefFk
358 private boolean isFirstMisappliedName
= true;
359 private Taxon
getMisappliedName(Map
<String
, Reference
> biblioRefMap
, Map
<String
, Reference
> nomRefMap
,
360 Object misNameRefFk
, Taxon taxon
) {
361 Taxon misappliedTaxon
= null;
362 Reference misNameRef
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, String
.valueOf(misNameRefFk
));
363 misappliedTaxon
= Taxon
.NewInstance(taxon
.getName(), misNameRef
);
364 Set
<String
> includeProperty
= new HashSet
<String
>();
366 // //IMatchStrategy matchStrategy = DefaultMatchStrategy.NewInstance(TaxonBase.class);
367 // //List<TaxonBase> misappliedList1 = getCommonService().findMatching(misappliedTaxon, matchStrategy);
368 List
<TaxonBase
> misappliedList
= getTaxonService().list(misappliedTaxon
, includeProperty
, null, null, null, null);
369 if (misappliedList
.size() > 0){
370 misappliedTaxon
= CdmBase
.deproxy(misappliedList
.get(0), Taxon
.class);
372 } catch (ClassCastException e
) {
373 logger
.error(e
.getMessage());
374 if (isFirstMisappliedName
){
376 isFirstMisappliedName
= false;
379 return misappliedTaxon
;
387 * @param languageString
388 * @param originalLanguageString
391 private Language
getAndHandleLanguage(Map
<String
, Language
> iso639Map
, String iso639_2
, String iso639_1
, String languageString
, String originalLanguageString
) {
393 if (CdmUtils
.isNotEmpty(iso639_2
)|| CdmUtils
.isNotEmpty(iso639_1
) ){
394 //TODO test performance, implement in state
395 language
= getLanguageFromIsoMap(iso639Map
, iso639_2
, iso639_1
);
397 if (language
== null){
398 language
= getTermService().getLanguageByIso(iso639_2
);
399 iso639Map
.put(iso639_2
, language
);
400 if (language
== null){
401 language
= getTermService().getLanguageByIso(iso639_1
);
402 iso639Map
.put(iso639_1
, language
);
404 if (language
== null){
405 logger
.warn("Language for code ISO693-2 '" + iso639_2
+ "' and ISO693-1 '" + iso639_1
+ "' was not found");
409 logger
.warn("language ISO 639_1 and ISO 639_2 were empty for " + languageString
);
412 addOriginalLanguage(language
, originalLanguageString
);
423 private Language
getLanguageFromIsoMap(Map
<String
, Language
> iso639Map
, String iso639_2
, String iso639_1
) {
425 language
= iso639Map
.get(iso639_2
);
426 if (language
== null){
427 language
= iso639Map
.get(iso639_1
);
434 * @param originalLanguageString
436 private void addOriginalLanguage(Language language
, String originalLanguageString
) {
437 if (CdmUtils
.isEmpty(originalLanguageString
)){
439 }else if (language
== null){
440 logger
.warn("Language could not be defined, but originalLanguageString exists: " + originalLanguageString
);
442 Representation representation
= language
.getRepresentation(language
);
443 if (representation
== null){
444 language
.addRepresentation(Representation
.NewInstance(originalLanguageString
, originalLanguageString
, originalLanguageString
, language
));
445 getTermService().saveOrUpdate(language
);
458 * @throws SQLException
460 private boolean getRegionFks(boolean result
, SortedSet
<Integer
> regionFks
,
461 Source source
) throws SQLException
{
462 String sql
= " SELECT DISTINCT RegionFks FROM emCommonName";
463 ResultSet rs
= source
.getResultSet(sql
);
465 String strRegionFks
= rs
.getString("RegionFks");
466 String
[] regionFkArray
= strRegionFks
.split(",");
467 for (String regionFk
: regionFkArray
){
468 regionFk
= regionFk
.trim();
469 if (! StringUtils
.isNumeric(regionFk
) || "".equals(regionFk
) ){
471 logger
.warn("RegionFk is not numeric: " + regionFk
);
473 regionFks
.add(Integer
.valueOf(regionFk
));
486 * @throws SQLException
488 private void fillRegionMap(Source source
, String sqlWhere
,
489 Map
<String
, String
> emTdwgMap
) throws SQLException
{
492 sql
= " SELECT RegionId, Region FROM emLanguageRegion WHERE RegionId IN ("+ sqlWhere
+ ") ";
493 rs
= source
.getResultSet(sql
);
495 Object regionId
= rs
.getObject("RegionId");
496 String region
= rs
.getString("Region");
497 String
[] splitRegion
= region
.split("-");
498 if (splitRegion
.length
<= 1){
499 NamedArea newArea
= NamedArea
.NewInstance(region
, region
, null);
500 getTermService().save(newArea
);
501 regionMap
.put(String
.valueOf(regionId
), newArea
);
502 logger
.warn("Found new area: " + region
);
503 }else if (splitRegion
.length
== 2){
504 String emCode
= splitRegion
[1].trim();
505 String tdwgCode
= emTdwgMap
.get(emCode
);
506 if (StringUtils
.isNotBlank(tdwgCode
) ){
507 NamedArea tdwgArea
= getNamedArea(tdwgCode
);
508 regionMap
.put(String
.valueOf(regionId
), tdwgArea
);
510 logger
.warn("emCode did not map to valid tdwgCode: " + CdmUtils
.Nz(emCode
) + "->" + CdmUtils
.Nz(tdwgCode
));
520 private NamedArea
getNamedArea(String tdwgCode
) {
522 if (tdwgCode
.equalsIgnoreCase("Ab")){
523 area
= NamedArea
.NewInstance("Azerbaijan (including Nakhichevan)", "Azerbaijan & Nakhichevan", "Ab");
524 getTermService().save(area
);
525 }else if (tdwgCode
.equalsIgnoreCase("Rf")){
526 area
= NamedArea
.NewInstance("The Russian Federation", "The Russian Federation", "Rf");
527 getTermService().save(area
);
528 }else if (tdwgCode
.equalsIgnoreCase("Uk")){
529 area
= NamedArea
.NewInstance("Ukraine (including Crimea)", "Ukraine & Crimea", "Uk");
530 getTermService().save(area
);
532 area
= TdwgArea
.getAreaByTdwgAbbreviation(tdwgCode
);
543 private String
getSqlWhere(SortedSet
<Integer
> regionFks
) {
544 String sqlWhere
= "";
545 for (Integer regionFk
: regionFks
){
546 sqlWhere
+= regionFk
+ ",";
548 sqlWhere
= sqlWhere
.substring(0, sqlWhere
.length()-1);
556 * @throws SQLException
558 private Map
<String
, String
> getEmTdwgMap(Source source
) throws SQLException
{
561 Map
<String
, String
> emTdwgMap
= new HashMap
<String
, String
>();
562 sql
= " SELECT EmCode, TDWGCode FROM emArea ";
563 rs
= source
.getResultSet(sql
);
565 String emCode
= rs
.getString("EMCode");
566 String TDWGCode
= rs
.getString("TDWGCode");
567 if (StringUtils
.isNotBlank(emCode
) ){
568 emCode
= emCode
.trim();
569 if (emCode
.equalsIgnoreCase("Ab") || emCode
.equalsIgnoreCase("Rf")|| emCode
.equalsIgnoreCase("Uk") ){
570 emTdwgMap
.put(emCode
, emCode
);
571 }else if (StringUtils
.isNotBlank(TDWGCode
)){
572 emTdwgMap
.put(emCode
, TDWGCode
.trim());
583 * Returns the first non-image gallery description. Creates a new one if no description exists.
587 private TaxonDescription
getDescription(Taxon taxon
) {
588 TaxonDescription result
= null;
589 for (TaxonDescription taxonDescription
: taxon
.getDescriptions()){
590 if (! taxonDescription
.isImageGallery()){
591 result
= taxonDescription
;
595 result
= TaxonDescription
.NewInstance(taxon
);
601 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
603 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
607 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
610 Set
<String
> taxonIdSet
= new HashSet
<String
>();
611 Set
<String
> nameIdSet
= new HashSet
<String
>();
612 Set
<String
> referenceIdSet
= new HashSet
<String
>();
614 handleForeignKey(rs
, taxonIdSet
, "taxonId");
615 handleForeignKey(rs
, taxonIdSet
, "misappliedTaxonId");
616 handleForeignKey(rs
, referenceIdSet
, "refId");
617 handleForeignKey(rs
, referenceIdSet
, "languageRefRefFk");
618 handleForeignKey(rs
, nameIdSet
, "NameInSourceFk");
619 handleForeignKey(rs
, nameIdSet
, "PTNameFk");
620 handleForeignKey(rs
, referenceIdSet
, "MisNameRefFk");
624 nameSpace
= BerlinModelTaxonNameImport
.NAMESPACE
;
625 cdmClass
= TaxonNameBase
.class;
627 Map
<String
, TaxonNameBase
> nameMap
= (Map
<String
, TaxonNameBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
628 result
.put(nameSpace
, nameMap
);
631 nameSpace
= BerlinModelTaxonImport
.NAMESPACE
;
632 cdmClass
= Taxon
.class;
634 Map
<String
, TaxonNameBase
> taxonMap
= (Map
<String
, TaxonNameBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
635 result
.put(nameSpace
, taxonMap
);
638 nameSpace
= BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
;
639 cdmClass
= Reference
.class;
640 idSet
= referenceIdSet
;
641 Map
<String
, Reference
> nomReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
642 result
.put(nameSpace
, nomReferenceMap
);
644 //biblio reference map
645 nameSpace
= BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
;
646 cdmClass
= Reference
.class;
647 idSet
= referenceIdSet
;
648 Map
<String
, Reference
> biblioReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
649 result
.put(nameSpace
, biblioReferenceMap
);
651 } catch (SQLException e
) {
652 throw new RuntimeException(e
);
653 } catch (NullPointerException nep
){
654 logger
.error("NullPointerException in getRelatedObjectsForPartition()");
662 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
665 protected boolean doCheck(BerlinModelImportState state
){
666 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelCommonNamesImportValidator();
667 return validator
.validate(state
);
672 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
675 protected String
getTableName() {
680 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
683 public String
getPluralString() {
688 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
690 protected boolean isIgnore(BerlinModelImportState state
){
691 return ! state
.getConfig().isDoCommonNames();