TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
FaunaEuropaeaTaxon fauEuTaxon = fauEuTaxonMap.get(id);\r
boolean useOriginalGenus = false;\r
-// if (taxonBase instanceof Synonym){\r
-// useOriginalGenus = true;\r
-// }\r
+ if (taxonBase instanceof Synonym){\r
+ useOriginalGenus = true;\r
+ }\r
\r
String nameString = \r
buildTaxonName(fauEuTaxon, taxonBase, taxonName, useOriginalGenus, fauEuConfig);\r
logger.info("Name of Synonym: " + nameString);\r
}\r
\r
- // TEST\r
- if (nameString.startsWith("Anoecia vagans")) {\r
- logger.error("Anoecia vagans (Koch, 1856)");\r
- }\r
- // TEST\r
-\r
if (fauEuConfig.isDoBasionyms() \r
&& fauEuTaxon.getRankId() > R_SUBGENUS\r
&& (fauEuTaxon.getOriginalGenusId() != 0)) {\r
logger.debug("actual genus id = " + actualGenusId + ", original genus id = " + originalGenusId);\r
}\r
\r
- if (fauEuTaxon.isParenthesis() && actualGenusId != originalGenusId && taxonBase.isInstanceOf(Taxon.class)) { \r
+ if (actualGenusId != originalGenusId && taxonBase.isInstanceOf(Taxon.class)) {\r
success = createBasionym(fauEuTaxon, taxonBase, taxonName, fauEuConfig, synonymSet);\r
- } else if (fauEuTaxon.isParenthesis()){\r
+ } else if (fauEuTaxon.isParenthesis()) {\r
//the authorteam should be set in parenthesis because there should be a basionym, but we do not know it?\r
ZoologicalName zooName = taxonName.deproxy(taxonName, ZoologicalName.class);\r
zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
\r
\r
private boolean createBasionym(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, \r
- TaxonNameBase<?,?>taxonName, FaunaEuropaeaImportConfigurator fauEuConfig, Set<Synonym> synonymSet) {\r
+ TaxonNameBase<?,?>taxonName, FaunaEuropaeaImportConfigurator fauEuConfig,\r
+ Set<Synonym> synonymSet) {\r
\r
boolean success = true;\r
\r
basionym.setPublicationYear(zooName.getPublicationYear());\r
\r
// add originalGenusId as source\r
- String originalGenusIdString = "" + fauEuTaxon.getOriginalGenusId();\r
+ String originalGenusIdString = "" + fauEuTaxon.getId();\r
IdentifiableSource basionymSource = IdentifiableSource.NewInstance(originalGenusIdString, "originalGenusId");\r
basionym.addSource(basionymSource);\r
\r
+ // add original database reference\r
+ ImportHelper.setOriginalSource(basionym, fauEuConfig.getSourceReference(), fauEuTaxon.getId(), "TaxonName");\r
+ \r
zooName.addBasionym(basionym, fauEuConfig.getSourceReference(), null, null);\r
zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
zooName.setCombinationAuthorTeam(null);\r
\r
StringBuilder stringBuilder = new StringBuilder();\r
\r
- if(useOriginalGenus == true) {\r
+ if(useOriginalGenus) {\r
stringBuilder.append(originalGenusName);\r
genusOrUninomial.delete(0, genusOrUninomial.length());\r
genusOrUninomial.append(originalGenusName);\r
}\r
\r
\r
- private String genusSubGenusPart(StringBuilder originalGenusName, boolean useOriginalGenus,\r
+ private String genusSubGenusPart(StringBuilder originalGenusName, boolean useOriginalGenus, \r
StringBuilder genusOrUninomial,\r
- StringBuilder infraGenericEpithet) {\r
+ StringBuilder infraGenericEpithet,\r
+ FaunaEuropaeaTaxon fauEuTaxon) {\r
\r
StringBuilder stringBuilder = new StringBuilder();\r
\r
stringBuilder.append(genusPart(originalGenusName, useOriginalGenus, genusOrUninomial));\r
\r
- if (useOriginalGenus == true) {\r
+ // The infraGenericEpithet is set to empty only if the original genus should be used and\r
+ // the actualGenusId is not the originalGenusId.\r
+ // This differentiation is relevant for synonyms and for basionyms.\r
+ // InfraGenericEpithets of accepted taxa are not touched at all.\r
+ Integer originalGenusId = fauEuTaxon.getOriginalGenusId();\r
+ Integer actualGenusId = getActualGenusId(fauEuTaxon);\r
+ if (useOriginalGenus && originalGenusId != actualGenusId && \r
+ originalGenusId.intValue() > 0 &&\r
+ actualGenusId.intValue() > 0) {\r
infraGenericEpithet.delete(0, infraGenericEpithet.length());\r
stringBuilder.append(" ");\r
return stringBuilder.toString();\r
actualGenusId = ranks.get(R_GENUS);\r
\r
return actualGenusId;\r
-\r
-/* int actualGenusId = -1;\r
- int rank = fauEuTaxon.getRankId();\r
- int parentRankId = fauEuTaxon.getParentRankId();\r
- int grandParentRankId = fauEuTaxon.getGrandParentRankId();\r
- int greatGrandParentRankId = fauEuTaxon.getGreatGrandParentRankId();\r
- \r
- if (fauEuTaxon.isValid()) { // Taxon\r
- \r
- if (rank == R_SPECIES) {\r
-\r
- if(parentRankId == R_SUBGENUS) {\r
-\r
- actualGenusId = fauEuTaxon.getGrandParentId();\r
- \r
- } else if(parentRankId == R_GENUS) {\r
-\r
- actualGenusId = fauEuTaxon.getParentId();\r
- }\r
-\r
- } else if (rank == R_SUBSPECIES) {\r
-\r
- if(grandParentRankId == R_SUBGENUS) {\r
-\r
- actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
- \r
- } else if (grandParentRankId == R_GENUS) {\r
-\r
- actualGenusId = fauEuTaxon.getGrandParentId();\r
-\r
- }\r
- }\r
- } else { // Synonym\r
- \r
- if (rank == R_SPECIES) {\r
-\r
- if(grandParentRankId == R_SUBGENUS) {\r
- \r
- actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
- \r
- } else if (grandParentRankId == R_GENUS) {\r
- \r
- actualGenusId = fauEuTaxon.getGrandParentId();\r
-\r
- }\r
-\r
- } else if (rank == R_SUBSPECIES) {\r
- \r
- if(greatGrandParentRankId == R_SUBGENUS) {\r
- \r
- actualGenusId = fauEuTaxon.getGreatGreatGrandParentId();\r
- \r
- } else if (greatGrandParentRankId == R_GENUS) {\r
- \r
- actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
- }\r
- }\r
- }\r
- return actualGenusId;*/\r
}\r
\r
\r
/** Build species and subspecies names */\r
- private String buildLowerTaxonName(StringBuilder originalGenus, boolean useOriginalGenus,\r
+ private String buildLowerTaxonName(StringBuilder originalGenus, boolean useOriginalGenus, \r
StringBuilder genusOrUninomial, StringBuilder infraGenericEpithet, \r
StringBuilder specificEpithet, StringBuilder infraSpecificEpithet,\r
FaunaEuropaeaTaxon fauEuTaxon) {\r
//differ between isParanthesis= true and false\r
String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
genusOrUninomial.append(grandParentName), \r
- infraGenericEpithet.append(parentName));\r
+ infraGenericEpithet.append(parentName),\r
+ fauEuTaxon);\r
nameCacheStringBuilder.append(genusSubGenusPart);\r
\r
\r
\r
String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
genusOrUninomial.append(greatGrandParentName), \r
- infraGenericEpithet.append(grandParentName));\r
+ infraGenericEpithet.append(grandParentName),\r
+ fauEuTaxon);\r
nameCacheStringBuilder.append(genusSubGenusPart);\r
\r
} else if (grandParentRankId == R_GENUS) {\r
\r
String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
genusOrUninomial.append(greatGrandParentName), \r
- infraGenericEpithet.append(grandParentName));\r
+ infraGenericEpithet.append(grandParentName),\r
+ fauEuTaxon);\r
nameCacheStringBuilder.append(genusSubGenusPart);\r
\r
} else if (grandParentRankId == R_GENUS) {\r
\r
String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
genusOrUninomial.append(greatGreatGrandParentName), \r
- infraGenericEpithet.append(greatGrandParentName));\r
+ infraGenericEpithet.append(greatGrandParentName),\r
+ fauEuTaxon);\r
nameCacheStringBuilder.append(genusSubGenusPart);\r
\r
} else if (greatGrandParentRankId == R_GENUS) {\r
/* Concatenated taxon name string */\r
String completeString = "";\r
\r
- StringBuilder originalGenus = null;\r
- \r
+ StringBuilder originalGenus = new StringBuilder("");\r
\r
StringBuilder genusOrUninomial = new StringBuilder();\r
StringBuilder infraGenericEpithet = new StringBuilder(); \r
\r
// determine genus: this also works for cases of synonyms since the accepted taxon is its parent\r
String originalGenusString = null;\r
- if (useOriginalGenus) {\r
+ if (useOriginalGenus && ! "".equals(fauEuTaxon.getOriginalGenusName())) {\r
originalGenusString = fauEuTaxon.getOriginalGenusName();\r
} else {\r
originalGenusString = determineOriginalGenus(fauEuTaxon);\r
if (originalGenusString != null) {\r
originalGenus = new StringBuilder(originalGenusString);\r
}\r
- \r
+\r
if(logger.isDebugEnabled()) { \r
logger.debug("Local taxon name (rank = " + rank + "): " + localString); \r
}\r
taxonBase = taxonBase.deproxy(taxonBase, TaxonBase.class);\r
\r
completeString = \r
- buildLowerTaxonName(originalGenus, useOriginalGenus,\r
+ buildLowerTaxonName(originalGenus, useOriginalGenus, \r
genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
fauEuTaxon);\r
\r
\r
\r
/**\r
- * Determines the original genus name by searching the taxon with rank R_GENUS.\r
+ * Determines the original genus name by searching the taxon with rank Genus.\r
* @param fauEuTaxon\r
* @return\r
*/\r
}\r
\r
//if ((!infraGenericEpithet.equals("") && fauEuTaxon.isParenthesis()) || (!infraGenericEpithet.equals("") && fauEuTaxon.)) {\r
- if (fauEuTaxon.getParentRankId() == R_SUBGENUS || (fauEuTaxon.getRankId() == R_SUBGENUS) ||\r
- fauEuTaxon.getGrandParentRankId() == R_SUBGENUS){\r
+ if (fauEuTaxon.getParentRankId() == R_SUBGENUS || fauEuTaxon.getRankId() == R_SUBGENUS ||\r
+ fauEuTaxon.getGrandParentRankId() == R_SUBGENUS || fauEuTaxon.getGreatGrandParentRankId() == R_SUBGENUS) {\r
zooName.setInfraGenericEpithet(emptyToNull(infraGenericEpithet));\r
if (logger.isDebugEnabled()) { \r
logger.debug("infraGenericEpithet: " + infraGenericEpithet); \r