int nameAndSeparatorLength = nameAndSeparator.length();\r
int fullRefLength = nameToBeFilled.getFullTitleCache().length();\r
\r
- if (nameToBeFilled.isProtectedTitleCache() || nameToBeFilled.getRank() == null ){\r
+ if (nameToBeFilled.isProtectedTitleCache() || nameToBeFilled.getParsingProblems().contains(ParserProblem.CheckRank)){\r
start = Math.max(0, start);\r
}else{\r
if (ref != null && ref.getParsingProblem()!=0){\r
} \r
//genus\r
else {\r
- rank = null;\r
+ rank = guessUninomialRank(nameToBeFilled, epi[0]); \r
nameToBeFilled.setRank(rank);\r
nameToBeFilled.setGenusOrUninomial(epi[0]);\r
- nameToBeFilled.addParsingProblem(ParserProblem.CheckUninomial);\r
+ nameToBeFilled.addParsingProblem(ParserProblem.CheckRank);\r
nameToBeFilled.setProblemStarts(0);\r
nameToBeFilled.setProblemEnds(epi[0].length());\r
}\r
\r
\r
\r
+ /**\r
+ * Guesses the rank of uninomial depending on the typical endings for ranks\r
+ * @param nameToBeFilled\r
+ * @param string\r
+ */\r
+ private Rank guessUninomialRank(NonViralName nameToBeFilled, String uninomial) {\r
+ Rank result = Rank.GENUS();\r
+ if (nameToBeFilled.isInstanceOf(BotanicalName.class)){\r
+ if (false){\r
+ \r
+ }else if (uninomial.endsWith("phyta") || uninomial.endsWith("mycota") ){ //plants, fungi\r
+ result = Rank.SECTION_BOTANY();\r
+ }else if (uninomial.endsWith("bionta")){\r
+ result = Rank.SUBKINGDOM(); //TODO\r
+ }else if (uninomial.endsWith("phytina")|| uninomial.endsWith("mycotina") ){ //plants, fungi\r
+ result = Rank.SUBSECTION_BOTANY();\r
+ }else if (uninomial.endsWith("opsida") || uninomial.endsWith("phyceae") || uninomial.endsWith("mycetes")){ //plants, algae, fungi\r
+ result = Rank.CLASS();\r
+ }else if (uninomial.endsWith("idae") || uninomial.endsWith("phycidae") || uninomial.endsWith("mycetidae")){ //plants, algae, fungi\r
+ result = Rank.SUBCLASS();\r
+ }else if (uninomial.endsWith("ales")){\r
+ result = Rank.ORDER();\r
+ }else if (uninomial.endsWith("ineae")){\r
+ result = Rank.SUBORDER();\r
+ }else if (uninomial.endsWith("aceae")){\r
+ result = Rank.FAMILY();\r
+ }else if (uninomial.endsWith("oideae")){\r
+ result = Rank.SUBFAMILY();\r
+ }else if (uninomial.endsWith("eae")){\r
+ result = Rank.TRIBE();\r
+ }else if (uninomial.endsWith("inae")){\r
+ result = Rank.SUBTRIBE();\r
+ }else if (uninomial.endsWith("ota")){\r
+ result = Rank.KINGDOM(); //TODO\r
+ }\r
+ }else{\r
+ //\r
+ }\r
+ return result;\r
+ }\r
+\r
/**\r
* Parses the fullAuthorString\r
* @param fullAuthorString\r
* @version 1.0\r
*/\r
public class NameParserWarningTest {\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(NameParserWarningTest.class);\r
\r
/**\r
public void testWarningList() {\r
List<ParserProblem> list = ParserProblem.warningList(5);\r
assertEquals("list must include 2 warnings", 2, list.size());\r
- assertTrue("Warning list should include warning 0", list.contains(ParserProblem.CheckUninomial));\r
+ assertTrue("Warning list should include warning 0", list.contains(ParserProblem.CheckRank));\r
assertTrue("Warning list should include warning 2", list.contains(ParserProblem.NameReferenceSeparation));\r
}\r
\r
\r
import java.lang.reflect.InvocationTargetException;\r
import java.lang.reflect.Method;\r
-import java.util.ArrayList;\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
assertTrue(nameGenusUnparse.hasProblem());\r
list = nameGenusUnparse.getParsingProblems();\r
assertTrue("Problem detail", list.contains(ParserProblem.CheckDetailOrYear));\r
- assertTrue("Problem uninomial", list.contains(ParserProblem.CheckUninomial));\r
+ assertTrue("Problem uninomial", list.contains(ParserProblem.CheckRank));\r
assertEquals(strGenusUnparse, nameGenusUnparse.getFullTitleCache());\r
assertEquals(0, nameGenusUnparse.getProblemStarts()); \r
assertEquals(19, nameGenusUnparse.getProblemEnds()); \r