import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.P_PARENTHESIS;\r
import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_GENUS;\r
import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SUBGENUS;\r
+import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SPECIES;\r
+import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SUBSPECIES;\r
import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.T_STATUS_ACCEPTED;\r
import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.T_STATUS_NOT_ACCEPTED;\r
\r
public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase {\r
private static final Logger logger = Logger.getLogger(FaunaEuropaeaTaxonImport.class);\r
\r
- /* Interval for progress info message when retrieving taxa */\r
- private int modCount = 10000;\r
+ /* Max number of taxa to retrieve (for test purposes) */\r
+ private int maxTaxa = 5000;\r
/* Max number of taxa to be saved with one service call */\r
private int limit = 10000; // TODO: Make configurable\r
+ /* Interval for progress info message when retrieving taxa */\r
+ private int modCount = 10000;\r
/* The highest taxon index in the FauEu database */\r
private int highestTaxonIndex = 0;\r
private Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap = new HashMap();\r
// " FROM dbo.Taxon INNER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
// " WHERE (1=1)";\r
\r
+ String top = "";\r
+ if (maxTaxa > 0) {\r
+ top = "TOP " + maxTaxa;\r
+ }\r
+ \r
strQuery = \r
- " SELECT Taxon.*, rank.*, author.* " + \r
- " FROM dbo.Taxon INNER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
- " INNER JOIN dbo.author ON dbo.Taxon.TAX_AUT_ID = dbo.author.aut_id " +\r
+ " SELECT " + top + " Taxon.*, rank.*, author.* " + \r
+ " FROM dbo.Taxon LEFT OUTER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
+ " LEFT OUTER JOIN dbo.author ON dbo.Taxon.TAX_AUT_ID = dbo.author.aut_id " +\r
" WHERE (1=1)";\r
\r
+ if (logger.isInfoEnabled()) {\r
+ logger.info("Query: " + strQuery);\r
+ }\r
rs = source.getResultSet(strQuery);\r
\r
\r
rank = FaunaEuropaeaTransformer.rankId2Rank(rs, false);\r
} catch (UnknownCdmTypeException e) {\r
logger.warn("Taxon (" + taxonId + ") has unknown rank (" + rankId + ") and could not be saved.");\r
- success = false; \r
+// success = false; \r
+ continue;\r
+ } catch (NullPointerException e) {\r
+ logger.warn("Taxon (" + taxonId + ") has rank null and could not be saved.");\r
+// success = false;\r
+ continue;\r
}\r
\r
ReferenceBase<?> reference = null;\r
} else {\r
fauEuTaxon.setParenthesis(false);\r
}\r
+ if (status == T_STATUS_ACCEPTED) {\r
+ fauEuTaxon.setValid(true);\r
+ } else {\r
+ fauEuTaxon.setValid(false);\r
+ }\r
\r
ImportHelper.setOriginalSource(taxonBase, fauEuConfig.getSourceReference(), taxonId, namespace);\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
+ }\r
+ return subString;\r
+ \r
+// String[] tokens = nameString.split("[\\s]+");\r
+// StringBuilder stringBuilder = \r
+// int len = tokens.length - 1;\r
+// for (int i = 0; i < len - 1; i++) {\r
+// String lastToken = tokens[len];\r
+// }\r
+// return lastToken;\r
+ }\r
+ \r
+ \r
/* Build name title cache */\r
private String buildNameTitleCache(String nameString, FaunaEuropaeaTaxon fauEuTaxon) {\r
\r
\r
String localString = "";\r
String parentString = "";\r
+ String parentNameCache = null;\r
\r
FaunaEuropaeaTaxon parent = null;\r
- TaxonNameBase<?,?> parentName = null;\r
+ \r
+ TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
TaxonBase<?> parentTaxonBase = null;\r
- String parentNameCache = null;\r
- boolean parentComplete = false;\r
\r
- TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
ZoologicalName zooName = (ZoologicalName)taxonName;\r
+ TaxonNameBase<?,?> parentName = null;\r
\r
+ boolean parentComplete = false;\r
+\r
if (zooName != null) {\r
localString = zooName.getNameCache();\r
}\r
\r
int rank = fauEuTaxon.getRankId();\r
- if (rank > R_GENUS) { \r
+ if (rank == R_SPECIES || rank == R_SUBSPECIES) { // For Species, Subspecies\r
+ //if (rank > R_GENUS) {\r
StringBuilder parentStringBuilder = new StringBuilder();\r
- if(logger.isDebugEnabled()) { \r
- logger.debug("Local taxon name: (rank = " + rank + ") " + localString); \r
+ if(logger.isInfoEnabled()) { \r
+ logger.info("Local taxon name (rank = " + rank + "): " + localString); \r
}\r
\r
// The scientific name in FaunaEuropaeaTaxon is set only once it has been built completely,\r
// parentStringBuilder.append(" ");\r
// parentStringBuilder.append(((ZoologicalName)taxonName).getNameCache());\r
parentString = parentStringBuilder.toString();\r
- logger.info("Parent name part built: " + parentString);\r
- } else {\r
+ if (logger.isInfoEnabled()) { logger.info("Parent name part built: " + parentString); }\r
+ } else { // parent name is already complete\r
parentComplete = true;\r
parentString = parent.getScientificName();\r
- logger.info("Parent name is complete: " + parentString);\r
+ if (logger.isInfoEnabled()) { logger.info("Parent name is complete: " + parentString); }\r
}\r
} else {\r
logger.warn("Parent uuid of " + localString + " is null");\r
} else {\r
logger.warn("Parent of " + localString + " is null");\r
}\r
- if (parent != null && parent.getRankId() > R_GENUS && parentComplete == false) { \r
+ if (parent != null && parent.getRankId() >= R_GENUS && parentComplete == false) { \r
parentString = buildTaxonName(parent, parentTaxonBase, taxonStore);\r
}\r
}\r
+ \r
StringBuilder concatStringBuilder = new StringBuilder(parentString);\r
-// if (!concatStringBuilder.equals("")) { concatStringBuilder.append(" "); }\r
- concatStringBuilder.append(" ");\r
+ if (!parentString.equals("")) {\r
+ \r
+ if (!fauEuTaxon.isValid()) { // for synonyms remove the local name of the parent (accepted taxon)\r
+ parentString = removeEpithet(parentString);\r
+ }\r
+ concatStringBuilder.append(" ");\r
+ }\r
+ \r
concatStringBuilder.append(localString);\r
String concatString = concatStringBuilder.toString();\r
concatString = (String) CdmUtils.removeDuplicateWhitespace(concatString.trim());\r