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 static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
;
13 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
;
14 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_INCLUDED_IN
;
15 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_MISAPPLIED_NAME_OF
;
16 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF
;
17 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF
;
18 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PARTIAL_SYN_OF
;
19 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF
;
20 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF
;
21 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_PROPARTE_SYN_OF
;
22 import static eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
.TAX_REL_IS_SYNONYM_OF
;
24 import java
.sql
.ResultSet
;
25 import java
.sql
.SQLException
;
26 import java
.util
.HashMap
;
27 import java
.util
.HashSet
;
30 import java
.util
.UUID
;
32 import org
.apache
.log4j
.Logger
;
33 import org
.springframework
.stereotype
.Component
;
35 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
36 import eu
.etaxonomy
.cdm
.common
.ResultWrapper
;
37 import eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
;
38 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelTaxonRelationImportValidator
;
39 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
40 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
41 import eu
.etaxonomy
.cdm
.io
.common
.Source
;
42 import eu
.etaxonomy
.cdm
.model
.common
.AnnotatableEntity
;
43 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
44 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableSource
;
45 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
46 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationship
;
48 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
49 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
50 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
51 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
52 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
53 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
54 import eu
.etaxonomy
.cdm
.strategy
.exceptions
.UnknownCdmTypeException
;
62 public class BerlinModelTaxonRelationImport
extends BerlinModelImportBase
{
63 private static final Logger logger
= Logger
.getLogger(BerlinModelTaxonRelationImport
.class);
65 public static final String TREE_NAMESPACE
= "PTRefFk";
67 private static int modCount
= 30000;
68 private static final String pluralString
= "taxon relations";
69 private static final String dbTableName
= "RelPTaxon";
72 public BerlinModelTaxonRelationImport(){
77 * Creates a classification for each PTaxon reference which belongs to a taxon that is included at least in one
78 * <i>taxonomically included</i> relationship
81 * @throws SQLException
83 private void makeClassifications(BerlinModelImportState state
) throws SQLException
{
84 logger
.info("start make classification ...");
85 Source source
= state
.getConfig().getSource();
87 Set
<String
> idSet
= getTreeReferenceIdSet(source
);
90 String nameSpace
= BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
;
91 Class cdmClass
= Reference
.class;
92 idSet
= new HashSet
<String
>();
93 Map
<String
, Reference
> nomRefMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
95 //biblio reference map
96 nameSpace
= BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
;
97 cdmClass
= Reference
.class;
98 // idSet = new HashSet<String>();
99 Map
<String
, Reference
> biblioRefMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
101 ResultSet rs
= source
.getResultSet(getClassificationQuery()) ;
108 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info("RelPTaxa handled: " + (i
-1));}
110 Object ptRefFkObj
= rs
.getObject("PTRefFk");
111 String ptRefFk
= String
.valueOf(ptRefFkObj
);
112 Reference
<?
> ref
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, ptRefFk
);
114 rs
.getString("RefCache");
115 String treeName
= "Classification - No Name";
116 String refCache
= rs
.getString("RefCache");
117 if (CdmUtils
.isNotEmpty(refCache
)){
120 if (ref
!= null && CdmUtils
.isNotEmpty(ref
.getTitleCache())){
121 treeName
= ref
.getTitleCache();
123 Classification tree
= Classification
.NewInstance(treeName
);
124 tree
.setReference(ref
);
125 if (i
== 1 && state
.getConfig().getClassificationUuid() != null){
126 tree
.setUuid(state
.getConfig().getClassificationUuid());
128 IdentifiableSource identifiableSource
= IdentifiableSource
.NewInstance(ptRefFk
, TREE_NAMESPACE
);
129 tree
.addSource(identifiableSource
);
131 getClassificationService().save(tree
);
132 state
.putClassificationUuidInt((Integer
)ptRefFkObj
, tree
);
133 } catch (Exception e
) {
134 logger
.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e
.getMessage());
138 } catch (SQLException e
) {
139 logger
.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e
.getMessage());
142 logger
.info("end make classification ...");
149 * @throws SQLException
151 private Set
<String
> getTreeReferenceIdSet(Source source
) throws SQLException
{
152 Set
<String
> result
= new HashSet
<String
>();
153 ResultSet rs
= source
.getResultSet(getClassificationQuery()) ;
155 Object id
= rs
.getObject("PTRefFk");
156 result
.add(String
.valueOf(id
));
164 private String
getClassificationQuery() {
165 String strQuery
= "SELECT PTaxon.PTRefFk, Reference.RefCache " +
166 " FROM RelPTaxon INNER JOIN " +
167 " PTaxon AS PTaxon ON RelPTaxon.PTNameFk2 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = PTaxon.PTRefFk INNER JOIN " +
168 " Reference ON PTaxon.PTRefFk = Reference.RefId " +
169 " WHERE (RelPTaxon.RelQualifierFk = 1) " +
170 " GROUP BY PTaxon.PTRefFk, Reference.RefCache ";
176 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
179 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
181 " SELECT RelPTaxon.*, FromTaxon.RIdentifier as taxon1Id, ToTaxon.RIdentifier as taxon2Id, ToTaxon.PTRefFk as treeRefFk, q.is_concept_relation " +
182 " FROM PTaxon as FromTaxon " +
183 " INNER JOIN RelPTaxon ON FromTaxon.PTNameFk = RelPTaxon.PTNameFk1 AND FromTaxon.PTRefFk = RelPTaxon.PTRefFk1 " +
184 " INNER JOIN PTaxon AS ToTaxon ON RelPTaxon.PTNameFk2 = ToTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = ToTaxon.PTRefFk " +
185 " INNER JOIN RelPTQualifier q ON q.RelPTQualifierId = RelPTaxon.RelQualifierFk " +
186 " WHERE RelPTaxon.RelPTaxonId IN ("+ID_LIST_TOKEN
+") ";
191 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
193 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
194 boolean success
= true ;
195 BerlinModelImportConfigurator config
= state
.getConfig();
196 Set
<TaxonBase
> taxaToSave
= new HashSet
<TaxonBase
>();
197 Map
<String
, TaxonBase
> taxonMap
= (Map
<String
, TaxonBase
>) partitioner
.getObjectMap(BerlinModelTaxonImport
.NAMESPACE
);
198 Map
<Integer
, Classification
> classificationMap
= new HashMap
<Integer
, Classification
>();
199 Map
<String
, Reference
> biblioRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
);
200 Map
<String
, Reference
> nomRefMap
= (Map
<String
, Reference
>) partitioner
.getObjectMap(BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
);
202 ResultSet rs
= partitioner
.getResultSet();
209 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info("RelPTaxa handled: " + (i
-1));}
211 int relPTaxonId
= rs
.getInt("RelPTaxonId");
213 int taxon1Id
= rs
.getInt("taxon1Id");
214 int taxon2Id
= rs
.getInt("taxon2Id");
215 Object relRefFkObj
= rs
.getObject("relRefFk");
216 int treeRefFk
= rs
.getInt("treeRefFk");
217 int relQualifierFk
= rs
.getInt("relQualifierFk");
218 String notes
= rs
.getString("notes");
219 boolean isConceptRelationship
= rs
.getBoolean("is_concept_relation");
221 TaxonBase taxon1
= taxonMap
.get(String
.valueOf(taxon1Id
));
222 TaxonBase taxon2
= taxonMap
.get(String
.valueOf(taxon2Id
));
224 String refFk
= String
.valueOf(relRefFkObj
);
225 Reference citation
= getReferenceOnlyFromMaps(biblioRefMap
, nomRefMap
, refFk
);
227 String microcitation
= null; //does not exist in RelPTaxon
229 if (taxon2
!= null && taxon1
!= null){
230 if (!(taxon2
instanceof Taxon
)){
231 logger
.error("TaxonBase (ID = " + taxon2
.getId()+ ", RIdentifier = " + taxon2Id
+ ") can't be casted to Taxon");
235 AnnotatableEntity taxonRelationship
= null;
236 Taxon toTaxon
= (Taxon
)taxon2
;
237 if (isTaxonRelationship(relQualifierFk
)){
238 if (!(taxon1
instanceof Taxon
)){
239 logger
.error("TaxonBase (ID = " + taxon1
.getId()+ ", RIdentifier = " + taxon1Id
+ ") can't be casted to Taxon");
243 Taxon fromTaxon
= (Taxon
)taxon1
;
244 if (relQualifierFk
== TAX_REL_IS_INCLUDED_IN
){
245 taxonRelationship
= makeTaxonomicallyIncluded(state
, classificationMap
, treeRefFk
, fromTaxon
, toTaxon
, citation
, microcitation
);
246 }else if (relQualifierFk
== TAX_REL_IS_MISAPPLIED_NAME_OF
){
247 taxonRelationship
= toTaxon
.addMisappliedName(fromTaxon
, citation
, microcitation
);
249 }else if (isSynonymRelationship(relQualifierFk
)){
250 if (!(taxon1
instanceof Synonym
)){
251 logger
.warn("Validated: Taxon (ID = " + taxon1
.getId()+ ", RIdentifier = " + taxon1Id
+ ") can't be casted to Synonym");
255 Synonym synonym
= (Synonym
)taxon1
;
256 SynonymRelationship synRel
= getSynRel(relQualifierFk
, toTaxon
, synonym
, citation
, microcitation
);
257 taxonRelationship
= synRel
;
259 if (relQualifierFk
== TAX_REL_IS_SYNONYM_OF
||
260 relQualifierFk
== TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
||
261 relQualifierFk
== TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
){
262 addProParteAndPartial(synRel
, synonym
, config
);
263 }else if (relQualifierFk
== TAX_REL_IS_PROPARTE_SYN_OF
||
264 relQualifierFk
== TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF
||
265 relQualifierFk
== TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF
){
266 synRel
.setProParte(true);
267 }else if(relQualifierFk
== TAX_REL_IS_PARTIAL_SYN_OF
||
268 relQualifierFk
== TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF
||
269 relQualifierFk
== TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF
){
270 synRel
.setPartial(true);
273 logger
.warn("Proparte/Partial not yet implemented for TaxonRelationShipType " + relQualifierFk
);
275 }else if (isConceptRelationship
){
276 ResultWrapper
<Boolean
> isInverse
= new ResultWrapper
<Boolean
>();
278 TaxonRelationshipType relType
= BerlinModelTransformer
.taxonRelId2TaxonRelType(relQualifierFk
, isInverse
);
279 if (! (taxon1
instanceof Taxon
)){
281 logger
.error("TaxonBase (ID = " + taxon1
.getId()+ ", RIdentifier = " + taxon1Id
+ ") can't be casted to Taxon");
283 Taxon fromTaxon
= (Taxon
)taxon1
;
284 taxonRelationship
= fromTaxon
.addTaxonRelation(toTaxon
, relType
, citation
, microcitation
);
286 } catch (UnknownCdmTypeException e
) {
287 //TODO other relationships
288 logger
.warn("TaxonRelationShipType " + relQualifierFk
+ " (conceptRelationship) not yet implemented");
293 logger
.warn("TaxonRelationShipType " + relQualifierFk
+ " not yet implemented");
297 doNotes(taxonRelationship
, notes
);
298 taxaToSave
.add(taxon2
);
304 logger
.warn("Taxa for RelPTaxon " + relPTaxonId
+ " do not exist in store");
307 } catch (Exception e
) {
308 logger
.error("Exception occurred when trying to handle taxon relationship " + relPTaxonId
+ ":" + e
.getMessage());
309 // e.printStackTrace();
312 }catch(SQLException e
){
313 throw new RuntimeException(e
);
315 logger
.info("Taxa to save: " + taxaToSave
.size());
316 partitioner
.startDoSave();
317 getTaxonService().save(taxaToSave
);
318 classificationMap
= null;
326 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)
329 protected void doInvoke(BerlinModelImportState state
){
331 makeClassifications(state
);
332 super.doInvoke(state
);
334 } catch (SQLException e
) {
335 throw new RuntimeException(e
);
342 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
344 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition( ResultSet rs
) {
348 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
351 Set
<String
> taxonIdSet
= new HashSet
<String
>();
352 Set
<String
> referenceIdSet
= new HashSet
<String
>();
353 // Set<String> classificationIdSet = new HashSet<String>();
355 handleForeignKey(rs
, taxonIdSet
, "taxon1Id");
356 handleForeignKey(rs
, taxonIdSet
, "taxon2Id");
357 // handleForeignKey(rs, classificationIdSet, "treeRefFk");
358 handleForeignKey(rs
, referenceIdSet
, "RelRefFk");
362 nameSpace
= BerlinModelTaxonImport
.NAMESPACE
;
363 cdmClass
= TaxonBase
.class;
365 Map
<String
, TaxonBase
> taxonMap
= (Map
<String
, TaxonBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
366 result
.put(nameSpace
, taxonMap
);
369 // nameSpace = "Classification";
370 // cdmClass = Classification.class;
371 // idSet = classificationIdSet;
372 // Map<String, Classification> treeMap = (Map<String, Classification>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
373 // result.put(cdmClass, treeMap);
374 // Set<UUID> treeUuidSet = state
375 // getClassificationService().find(uuidSet);
379 nameSpace
= BerlinModelReferenceImport
.NOM_REFERENCE_NAMESPACE
;
380 cdmClass
= Reference
.class;
381 idSet
= referenceIdSet
;
382 Map
<String
, Reference
> nomReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
383 result
.put(nameSpace
, nomReferenceMap
);
385 //biblio reference map
386 nameSpace
= BerlinModelReferenceImport
.BIBLIO_REFERENCE_NAMESPACE
;
387 cdmClass
= Reference
.class;
388 idSet
= referenceIdSet
;
389 Map
<String
, Reference
> biblioReferenceMap
= (Map
<String
, Reference
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
390 result
.put(nameSpace
, biblioReferenceMap
);
392 } catch (SQLException e
) {
393 throw new RuntimeException(e
);
398 private SynonymRelationship
getSynRel (int relQualifierFk
, Taxon toTaxon
, Synonym synonym
, Reference citation
, String microcitation
){
399 SynonymRelationship result
;
400 if (relQualifierFk
== TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
||
401 relQualifierFk
== TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF
||
402 relQualifierFk
== TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF
){
403 result
= toTaxon
.addHomotypicSynonym(synonym
, citation
, microcitation
);
404 }else if (relQualifierFk
== TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
||
405 relQualifierFk
== TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF
||
406 relQualifierFk
== TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF
){
407 result
= toTaxon
.addSynonym(synonym
, SynonymRelationshipType
.HETEROTYPIC_SYNONYM_OF(), citation
, microcitation
);
408 }else if (relQualifierFk
== TAX_REL_IS_SYNONYM_OF
||
409 relQualifierFk
== TAX_REL_IS_PROPARTE_SYN_OF
||
410 relQualifierFk
== TAX_REL_IS_PARTIAL_SYN_OF
){
411 result
= toTaxon
.addSynonym(synonym
, SynonymRelationshipType
.SYNONYM_OF(), citation
, microcitation
);
413 logger
.warn("SynonymyRelationShipType could not be defined for relQualifierFk " + relQualifierFk
+ ". 'Unknown'-Type taken instead.");
414 result
= toTaxon
.addSynonym(synonym
, SynonymRelationshipType
.SYNONYM_OF(), citation
, microcitation
);
420 private boolean isSynonymRelationship(int relQualifierFk
){
421 if (relQualifierFk
== TAX_REL_IS_SYNONYM_OF
||
422 relQualifierFk
== TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
||
423 relQualifierFk
== TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
||
424 relQualifierFk
== TAX_REL_IS_PROPARTE_SYN_OF
||
425 relQualifierFk
== TAX_REL_IS_PARTIAL_SYN_OF
||
426 relQualifierFk
== TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF
||
427 relQualifierFk
== TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF
||
428 relQualifierFk
== TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF
||
429 relQualifierFk
== TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF
437 private boolean isTaxonRelationship(int relQualifierFk
){
438 if (relQualifierFk
== TAX_REL_IS_INCLUDED_IN
||
439 relQualifierFk
== TAX_REL_IS_MISAPPLIED_NAME_OF
){
446 private void addProParteAndPartial(SynonymRelationship synRel
, Synonym synonym
, BerlinModelImportConfigurator bmiConfig
){
447 if (bmiConfig
.isPartialSynonym(synonym
)){
448 synRel
.setPartial(true);
450 if (bmiConfig
.isProParteSynonym(synonym
)){
451 synRel
.setProParte(true);
455 private TaxonNode
makeTaxonomicallyIncluded(BerlinModelImportState state
, Map
<Integer
, Classification
> classificationMap
, int treeRefFk
, Taxon child
, Taxon parent
, Reference citation
, String microCitation
){
456 Classification tree
= classificationMap
.get(treeRefFk
);
458 UUID treeUuid
= state
.getTreeUuidByIntTreeKey(treeRefFk
);
459 tree
= getClassificationService().find(treeUuid
);
460 classificationMap
.put(treeRefFk
, tree
);
463 throw new IllegalStateException("Tree for ToTaxon reference does not exist.");
465 return tree
.addParentChild(parent
, child
, citation
, microCitation
);
470 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
473 protected boolean doCheck(BerlinModelImportState state
){
474 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelTaxonRelationImportValidator();
475 return validator
.validate(state
);
480 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
483 protected String
getTableName() {
488 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
491 public String
getPluralString() {
496 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
498 protected boolean isIgnore(BerlinModelImportState state
){
499 return ! state
.getConfig().isDoRelTaxa();