if (logger.isDebugEnabled()) {\r
logger.debug("Taxon created (" + taxonId + ")");\r
}\r
- \r
- if (fauEuConfig.isDoBasionyms()) {\r
- if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
- && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
-\r
- // create basionym\r
- ZoologicalName basionym = ZoologicalName.NewInstance(rank);\r
- basionym.setNameCache(localName);\r
- basionym.setCombinationAuthorTeam(author);\r
- basionym.setPublicationYear(year);\r
- zooName.addBasionym(basionym, sourceReference, null, null);\r
- zooName.setBasionymAuthorTeam(author);\r
- if (logger.isDebugEnabled()) {\r
- logger.debug("Basionym created (" + taxonId + ")");\r
- }\r
-\r
- // create homotypic synonym\r
- Synonym homotypicSynonym = Synonym.NewInstance(basionym, sourceReference);\r
-// SynonymRelationship synRel = \r
-// taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
-// sourceReference, null);\r
-// homotypicSynonym.addRelationship(synRel);\r
- taxon.addHomotypicSynonym(homotypicSynonym, sourceReference, null);\r
- if (logger.isDebugEnabled()) {\r
- logger.debug("Homotypic synonym created (" + taxonId + ")");\r
- }\r
-\r
- }\r
- }\r
+\r
+// if (fauEuConfig.isDoBasionyms()) {\r
+// if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
+// && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+//\r
+// // create basionym\r
+// ZoologicalName basionym = ZoologicalName.NewInstance(rank);\r
+// basionym.setNameCache(localName);\r
+// basionym.setCombinationAuthorTeam(author);\r
+// basionym.setPublicationYear(year);\r
+// zooName.addBasionym(basionym, sourceReference, null, null);\r
+// zooName.setBasionymAuthorTeam(author);\r
+// if (logger.isDebugEnabled()) {\r
+// logger.debug("Basionym created (" + taxonId + ")");\r
+// }\r
+//\r
+// // create homotypic synonym\r
+// Synonym homotypicSynonym = Synonym.NewInstance(basionym, sourceReference);\r
+//// SynonymRelationship synRel = \r
+//// taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
+//// sourceReference, null);\r
+//// homotypicSynonym.addRelationship(synRel);\r
+// taxon.addHomotypicSynonym(homotypicSynonym, sourceReference, null);\r
+// if (logger.isDebugEnabled()) {\r
+// logger.debug("Homotypic synonym created (" + taxonId + ")");\r
+// }\r
+//\r
+// }\r
+// }\r
\r
}\r
taxonBase = taxon;\r
}\r
\r
\r
-// private boolean createAdditionalObjects(FaunaEuropaeaTaxon fauEuTaxon,\r
-// TaxonBase<?> taxonBase, ZoologicalName zooName,\r
-// FaunaEuropaeaImportState state) { \r
-//\r
-// Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
-// MapWrapper<TaxonBase> taxonStore = (MapWrapper<TaxonBase>)stores.get(ICdmIO.TAXON_STORE);\r
-// FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();\r
-// ReferenceBase<?> sourceRef = fauEuConfig.getSourceReference();\r
-// MapWrapper<TeamOrPersonBase> authorStore = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.TEAM_STORE);\r
-//\r
-// // create basionym\r
-// if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
-// && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
-// TeamOrPersonBase<?> author = authorStore.get(fauEuTaxon.getAuthorId());\r
-// ZoologicalName basionym = ZoologicalName.NewInstance(fauEuTaxon.getRankId());\r
-// basionym.setNameCache(fauEuTaxon.getLocalName());\r
-// basionym.setCombinationAuthorTeam(author);\r
-// basionym.setPublicationYear(fauEuTaxon.getYear());\r
-// // TODO: add microcitation, rule considered\r
-// zooName.addBasionym(basionym, sourceRef, null, null);\r
-// zooName.setBasionymAuthorTeam(author);\r
-// }\r
-// }\r
- \r
/**\r
* Processes taxa from complete taxon store\r
*/\r
if (logger.isDebugEnabled()) { \r
logger.debug("Original genus FauEu taxon is null"); \r
}\r
-\r
}\r
}\r
\r
-// String nameString = calculateTaxonName(fauEuTaxon, taxonBase, taxonName, taxonStore, fauEuTaxonMap);\r
String nameString = \r
- buildTaxonName(fauEuTaxon, taxonBase, taxonName, taxonStore, fauEuTaxonMap, fauEuConfig);\r
-// setTaxonName(nameString, fauEuTaxon, taxonBase, fauEuConfig);\r
+ buildTaxonName(fauEuTaxon, taxonBase, taxonName, fauEuTaxonMap, fauEuConfig);\r
+ if (fauEuConfig.isDoBasionyms() && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+ success = createBasionym(fauEuTaxon, taxonBase, taxonName, fauEuTaxonMap, fauEuConfig);\r
+ }\r
}\r
return success; \r
}\r
+\r
\r
- \r
- /* Remove last part of name */\r
- private String removeEpithet(String nameString) {\r
- \r
- String subString = nameString;\r
- int index = nameString.lastIndexOf(" ");\r
- if (index > 0) {\r
- subString = nameString.substring(0, index);\r
+ private boolean createBasionym(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName, \r
+ Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
+\r
+// if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
+// && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+\r
+ boolean success = true;\r
+\r
+ try {\r
+ ZoologicalName zooName = taxonName.deproxy(taxonName, ZoologicalName.class);\r
+ Taxon taxon = taxonBase.deproxy(taxonBase, Taxon.class);\r
+ \r
+ // create basionym\r
+ ZoologicalName basionym = ZoologicalName.NewInstance(taxonName.getRank());\r
+ basionym.setCombinationAuthorTeam(zooName.getCombinationAuthorTeam());\r
+ basionym.setPublicationYear(zooName.getPublicationYear());\r
+ zooName.addBasionym(basionym, fauEuConfig.getSourceReference(), null, null);\r
+ zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Basionym created (" + fauEuTaxon.getId() + ")");\r
+ }\r
+\r
+ // create homotypic synonym\r
+ Synonym homotypicSynonym = Synonym.NewInstance(basionym, fauEuConfig.getSourceReference());\r
+// SynonymRelationship synRel = \r
+// taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
+// sourceReference, null);\r
+// homotypicSynonym.addRelationship(synRel);\r
+ taxon.addHomotypicSynonym(homotypicSynonym, fauEuConfig.getSourceReference(), null);\r
+ if (logger.isDebugEnabled()) {\r
+ logger.debug("Homotypic synonym created (" + fauEuTaxon.getId() + ")");\r
+ }\r
+ \r
+ buildTaxonName(fauEuTaxon, homotypicSynonym, basionym, fauEuTaxonMap, fauEuConfig);\r
+ \r
+ } catch (Exception e) {\r
+ logger.warn("Exception occurred when creating basionym for " + fauEuTaxon.getId());\r
+ e.printStackTrace();\r
}\r
- return subString;\r
+ \r
+ \r
+ return success;\r
}\r
\r
\r
}\r
\r
\r
+ /* Build taxon title cache */\r
+ private String buildTaxonTitleCache(String nameCache, String referenceCache) {\r
+ \r
+ StringBuilder titleCacheStringBuilder = new StringBuilder(nameCache);\r
+ titleCacheStringBuilder.append(" sec. ");\r
+ titleCacheStringBuilder.append(referenceCache);\r
+ return titleCacheStringBuilder.toString();\r
+ }\r
+\r
+ \r
/* Build name full title cache */\r
private String buildNameFullTitleCache(String titleCache, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
\r
\r
StringBuilder nameCacheStringBuilder = new StringBuilder();\r
\r
+ int rank = fauEuTaxon.getRankId();\r
+ int parentId = fauEuTaxon.getParentId();\r
+ FaunaEuropaeaTaxon parent = fauEuTaxonMap.get(parentId);\r
+ int grandParentId = parent.getParentId();\r
+ FaunaEuropaeaTaxon grandParent = fauEuTaxonMap.get(grandParentId);\r
+ int greatGrandParentId = grandParent.getParentId();\r
+ FaunaEuropaeaTaxon greatGrandParent = fauEuTaxonMap.get(greatGrandParentId);\r
+\r
+ \r
+ if (fauEuTaxon.isValid()) { // Taxon\r
+ \r
+ if (rank == R_SPECIES) {\r
+\r
+ if(parent.getRankId() == R_SUBGENUS) {\r
+\r
+ String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(grandParent.getLocalName()), \r
+ infraGenericEpithet.append(parent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+ } else if(parent.getRankId() == R_GENUS) {\r
+\r
+ String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(parent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusPart);\r
+ }\r
+ nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+ specificEpithet.append(fauEuTaxon.getLocalName());\r
+\r
+ } else if (rank == R_SUBSPECIES) {\r
+\r
+ if(grandParent.getRankId() == R_SUBGENUS) {\r
+\r
+ String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(greatGrandParent.getLocalName()), \r
+ infraGenericEpithet.append(grandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+ } else if (grandParent.getRankId() == R_GENUS) {\r
+\r
+ String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(grandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusPart);\r
+\r
+ }\r
+ nameCacheStringBuilder.append(parent.getLocalName());\r
+ nameCacheStringBuilder.append(" ");\r
+ nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+ specificEpithet.append(parent.getLocalName());\r
+ infraSpecificEpithet.append(fauEuTaxon.getLocalName());\r
+ }\r
+ } else { // Synonym\r
+ \r
+ if (rank == R_SPECIES) {\r
+\r
+ if(grandParent.getRankId() == R_SUBGENUS) {\r
+ \r
+ String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(greatGrandParent.getLocalName()), \r
+ infraGenericEpithet.append(grandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+ } else if (grandParent.getRankId() == R_GENUS) {\r
+ \r
+ String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(grandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusPart);\r
+\r
+ }\r
+\r
+ } else if (rank == R_SUBSPECIES) {\r
+ \r
+ int greatGreatGrandParentId = grandParent.getParentId();\r
+ FaunaEuropaeaTaxon greatGreatGrandParent = fauEuTaxonMap.get(greatGreatGrandParentId);\r
+ \r
+ if(greatGrandParent.getRankId() == R_SUBGENUS) {\r
+ \r
+ String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(greatGreatGrandParent.getLocalName()), \r
+ infraGenericEpithet.append(greatGrandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusSubGenusPart);\r
+ \r
+ } else if (greatGrandParent.getRankId() == R_GENUS) {\r
+ \r
+ String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+ genusOrUninomial.append(greatGreatGrandParent.getLocalName()));\r
+ nameCacheStringBuilder.append(genusPart);\r
+ }\r
+ \r
+ nameCacheStringBuilder.append(grandParent.getLocalName());\r
+ nameCacheStringBuilder.append(" ");\r
+ specificEpithet.append(grandParent.getLocalName());\r
+ }\r
+ \r
+ nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+ infraSpecificEpithet.append(fauEuTaxon.getLocalName());\r
+ \r
+ }\r
+ \r
+ return nameCacheStringBuilder.toString();\r
+ }\r
+ \r
+ \r
+ /** Build species and subspecies names */\r
+ private String buildLowerTaxonName_(StringBuilder originalGenus, boolean useOriginalGenus,\r
+ StringBuilder genusOrUninomial, StringBuilder infraGenericEpithet, \r
+ StringBuilder specificEpithet, StringBuilder infraSpecificEpithet,\r
+ FaunaEuropaeaTaxon fauEuTaxon, Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap) {\r
+ \r
+ StringBuilder nameCacheStringBuilder = new StringBuilder();\r
+\r
int rank = fauEuTaxon.getRankId();\r
int parentId = fauEuTaxon.getParentId();\r
FaunaEuropaeaTaxon parent = fauEuTaxonMap.get(parentId);\r
\r
\r
/** Build taxon's name parts and caches */\r
- private String buildTaxonName(FaunaEuropaeaTaxon fauEuTaxon,\r
- TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName, MapWrapper<TaxonBase> taxonStore,\r
+ private String buildTaxonName(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName,\r
Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
\r
/* Local taxon name string */\r
taxonBase = taxonBase.deproxy(taxonBase, TaxonBase.class);\r
\r
// for the homotypic synonyms / basionyms build the name with the original genus\r
- if (taxonBase.isInstanceOf(Synonym.class)) {\r
-\r
- Synonym synonym = (Synonym)taxonBase;\r
- Set<SynonymRelationship> relships = synonym.getSynonymRelations();\r
- if (relships != null && relships.size() > 0) {\r
- SynonymRelationship relship = (SynonymRelationship)relships.toArray()[0];\r
- if (relship.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {\r
- completeString = \r
- buildLowerTaxonName(originalGenus, true,\r
- genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
- fauEuTaxon, fauEuTaxonMap);\r
- }\r
- }\r
- }\r
-\r
- if (completeString.equals("")) {\r
- completeString = \r
- buildLowerTaxonName(originalGenus, false,\r
- genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
- fauEuTaxon, fauEuTaxonMap);\r
- }\r
+// if (taxonBase.isInstanceOf(Synonym.class)) {\r
+//\r
+// Synonym synonym = (Synonym)taxonBase;\r
+// Set<SynonymRelationship> relships = synonym.getSynonymRelations();\r
+// if (relships != null && relships.size() > 0) {\r
+// SynonymRelationship relship = (SynonymRelationship)relships.toArray()[0];\r
+// if (relship.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {\r
+// completeString = \r
+// buildLowerTaxonName(originalGenus, true,\r
+// genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
+// fauEuTaxon, fauEuTaxonMap);\r
+// }\r
+// }\r
+// }\r
+\r
+// if (completeString.equals("")) {\r
+ \r
+ completeString = \r
+ buildLowerTaxonName(originalGenus, false,\r
+ genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
+ fauEuTaxon, fauEuTaxonMap);\r
+ \r
+// }\r
\r
completeString = (String) CdmUtils.removeDuplicateWhitespace(completeString.trim());\r
\r