cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/reference/CdDvdDefaultCacheStrategyTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/match/DefaultMatchStrategyTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/merge/DefaultMergeStrategyTest.java -text
-cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/NameParserWarningTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/NonViralNameParserImplTest.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/ParserProblemTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestFullReferenceParser.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestModel.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestSpecimen.java -text
public void setParsingProblem(int hasProblem);\r
\r
/**\r
- * Returns exactly the same int value as the {@link #getHasProblem() getHasProblem} method. \r
+ * Returns true if any parsing problem (warning or error) exists. \r
* \r
* @see #getHasProblem()\r
*/\r
public boolean hasProblem();\r
\r
+ /**\r
+ * Returns true, if the specified problem exists. False otherwise.\r
+ * @param problem\r
+ * @return\r
+ */\r
+ public boolean hasProblem(ParserProblem problem);\r
+ \r
\r
/**\r
* Returns a list of all warnings and errors that have been recognized during the parsing\r
\r
/**\r
* Adds a parsing problem to the list of parsing problems\r
- * @param warning\r
+ * @param problem\r
*/\r
- public void addParsingProblem(ParserProblem warning);\r
+ public void addParsingProblem(ParserProblem problem);\r
+ \r
+ /**\r
+ * Removes a parsing problem from the list of parsing problems.\r
+ * If the problem is not in the list or is <code>null</code>, nothing happens.\r
+ * @param warning\r
+ */public void removeParsingProblem(ParserProblem problem);\r
+ \r
\r
/**\r
* Returns the integer value of the position where a parsing problem starts.\r
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.model.common.IParsable#addProblem(eu.etaxonomy.cdm.strategy.parser.NameParserWarning)
*/
- public void addParsingProblem(ParserProblem warning){
- parsingProblem = ParserProblem.addWarning(parsingProblem, warning);
+ public void addParsingProblem(ParserProblem problem){
+ parsingProblem = ParserProblem.addProblem(parsingProblem, problem);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.model.common.IParsable#removeParsingProblem(eu.etaxonomy.cdm.strategy.parser.ParserProblem)
+ */
+ public void removeParsingProblem(ParserProblem problem) {
+ parsingProblem = ParserProblem.removeProblem(parsingProblem, problem);
}
/**
* @param warnings
*/
- public void addParsingProblems(int warnings){
- parsingProblem = ParserProblem.addWarnings(parsingProblem, warnings);
+ public void addParsingProblems(int problems){
+ parsingProblem = ParserProblem.addProblems(parsingProblem, problems);
}
/* (non-Javadoc)
return parsingProblem != 0;
}
+
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.model.common.IParsable#hasProblem(eu.etaxonomy.cdm.strategy.parser.ParserProblem)
+ */
+ public boolean hasProblem(ParserProblem problem) {
+ return getParsingProblems().contains(problem);
+ }
+
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.model.common.IParsable#problemStarts()
*/
return parsingProblem != 0;
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.model.common.IParsable#hasProblem(eu.etaxonomy.cdm.strategy.parser.ParserProblem)
+ */
+ public boolean hasProblem(ParserProblem problem) {
+ return getParsingProblems().contains(problem);
+ }
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.model.common.IParsable#problemStarts()
* @see eu.etaxonomy.cdm.model.common.IParsable#addProblem(eu.etaxonomy.cdm.strategy.parser.NameParserWarning)
*/
public void addParsingProblem(ParserProblem warning){
- parsingProblem = ParserProblem.addWarning(parsingProblem, warning);
+ parsingProblem = ParserProblem.addProblem(parsingProblem, warning);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.model.common.IParsable#removeParsingProblem(eu.etaxonomy.cdm.strategy.parser.ParserProblem)
+ */
+ public void removeParsingProblem(ParserProblem problem) {
+ parsingProblem = ParserProblem.removeProblem(parsingProblem, problem);
}
/* (non-Javadoc)
* @param rank\r
* @return TaxonNameBase, with rank = Rank.GENUS for all Uninomials \r
*/\r
- public T parseSimpleName(String simpleName, Rank rank);\r
+ public T parseSimpleName(String simpleName, NomenclaturalCode code, Rank rank);\r
\r
/**\r
* Parses the taxon name String and returns a TaxonNameBase. \r
public static NonViralNameParserImpl NewInstance(){\r
return new NonViralNameParserImpl();\r
}\r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.strategy.ITaxonNameParser#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)\r
- */\r
- public NonViralName parseSimpleName(String simpleName, Rank rank){\r
- //TODO\r
- logger.warn("parseSimpleName() not yet implemented. Uses parseFullName() instead");\r
- return parseFullName(simpleName, null, rank);\r
- }\r
-\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.strategy.ITaxonNameParser#parseSubGenericSimpleName(java.lang.String)\r
*/\r
public NonViralName parseSimpleName(String simpleName){\r
- return parseSimpleName(simpleName, null);\r
+ return parseSimpleName(simpleName, null, null);\r
+ }\r
+ \r
+ \r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.strategy.parser.INonViralNameParser#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.NomenclaturalCode, eu.etaxonomy.cdm.model.name.Rank)\r
+ */\r
+ public NonViralName parseSimpleName(String simpleName, NomenclaturalCode code, Rank rank){\r
+ //"parseSimpleName() not yet implemented. Uses parseFullName() instead");\r
+ return parseFullName(simpleName, code, rank);\r
+ }\r
+\r
+ public void parseSimpleName(NonViralName nameToBeFilled, String simpleNameString, Rank rank, boolean makeEmpty){\r
+ //"parseSimpleName() not yet implemented. Uses parseFullName() instead");\r
+ parseFullName(nameToBeFilled, simpleNameString, rank, makeEmpty);\r
}\r
+\r
\r
public NonViralName getNonViralNameInstance(String fullString, NomenclaturalCode code){\r
return getNonViralNameInstance(fullString, code, null);\r
\r
public void parseFullName(NonViralName nameToBeFilled, String fullNameString, Rank rank, boolean makeEmpty) {\r
//TODO prol. etc.\r
- \r
+ boolean hasCheckRankProblem = false; //was rank guessed in a previous parsing process?\r
if (nameToBeFilled == null){\r
logger.warn("name is null!");\r
+ }else{\r
+ hasCheckRankProblem = nameToBeFilled.hasProblem(ParserProblem.CheckRank);\r
}\r
String authorString = null;\r
\r
if (fullNameString == null){\r
return;\r
}\r
+ \r
if (makeEmpty){\r
makeEmpty(nameToBeFilled);\r
}\r
}\r
else if (genusOrSupraGenusPattern.matcher(fullNameString).matches()){\r
//supraGeneric\r
- if (rank != null && (rank.isSupraGeneric()|| rank.isGenus())){\r
+ if (rank != null && ! hasCheckRankProblem && (rank.isSupraGeneric()|| rank.isGenus())){\r
nameToBeFilled.setRank(rank);\r
nameToBeFilled.setGenusOrUninomial(epi[0]);\r
} \r
- //genus\r
+ //genus or guess rank\r
else {\r
rank = guessUninomialRank(nameToBeFilled, epi[0]); \r
nameToBeFilled.setRank(rank);\r
* @param warning\r
* @return\r
*/\r
- public static int addWarning(int originalWarnings, ParserProblem newWarning) {\r
- return originalWarnings | 1 << newWarning.ordinal();\r
+ public static int addProblem(int originalProblems, ParserProblem newProblem) {\r
+ if (newProblem == null){\r
+ return originalProblems;\r
+ }else{\r
+ return originalProblems | 1 << newProblem.ordinal();\r
+ }\r
}\r
\r
- public static int addWarnings(int hasProblem, int newWarnings) {\r
- return hasProblem | newWarnings;\r
+ public static int addProblems(int hasProblem, int newProblems) {\r
+ return hasProblem | newProblems;\r
}\r
- \r
+\r
+ /**\r
+ * @param parsingProblem\r
+ * @param problemToRemove\r
+ * @return\r
+ */\r
+ public static int removeProblem(int originalProblems, ParserProblem problemToRemove) {\r
+ if (problemToRemove == null){\r
+ return originalProblems;\r
+ }else{\r
+ return originalProblems & ~(1 << problemToRemove.ordinal());\r
+ }\r
+ } \r
\r
\r
\r
logger.warn("not yet implemented");\r
}\r
\r
- /**\r
- * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getParsingProblems()}.\r
- */\r
- @Test\r
- public void testGetProblems() {\r
- logger.warn("not yet implemented");\r
- }\r
-\r
/**\r
* Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getReferenceYear()}.\r
*/\r
*/\r
@Test\r
public final void testParseSimpleName() {\r
- logger.warn("Not yet implemented"); // TODO\r
+ \r
+ //Uninomials\r
+ ZoologicalName milichiidae = (ZoologicalName)parser.parseSimpleName("Milichiidae", NomenclaturalCode.ICZN, null);\r
+ assertEquals("Family rank expected", Rank.FAMILY(), milichiidae.getRank());\r
+ BotanicalName crepidinae = (BotanicalName)parser.parseSimpleName("Crepidinae", NomenclaturalCode.ICBN, null);\r
+ assertEquals("Family rank expected", Rank.SUBTRIBE(), crepidinae.getRank());\r
+ BotanicalName abies = (BotanicalName)parser.parseSimpleName("Abies", NomenclaturalCode.ICBN, null);\r
+ assertEquals("Family rank expected", Rank.GENUS(), abies.getRank());\r
+ \r
+ abies.addParsingProblem(ParserProblem.CheckRank);\r
+ parser.parseSimpleName(abies, "Abies", abies.getRank(), true);\r
+ assertTrue(abies.getParsingProblems().contains(ParserProblem.CheckRank));\r
+ \r
+ BotanicalName rosa = (BotanicalName)parser.parseSimpleName("Rosaceae", NomenclaturalCode.ICBN, null);\r
+ assertTrue("Rosaceae have rank family", rosa.getRank().equals(Rank.FAMILY()));\r
+ assertTrue("Rosaceae must have a rank warning", rosa.hasProblem(ParserProblem.CheckRank));\r
+ parser.parseSimpleName(rosa, "Rosaceaex", abies.getRank(), true);\r
+ assertEquals("Rosaceaex have rank genus", Rank.GENUS(), rosa.getRank());\r
+ assertTrue("Rosaceaex must have a rank warning", rosa.hasProblem(ParserProblem.CheckRank));\r
+ \r
+ //repeat but remove warning after first parse\r
+ rosa = (BotanicalName)parser.parseSimpleName("Rosaceae", NomenclaturalCode.ICBN, null);\r
+ assertTrue("Rosaceae have rank family", rosa.getRank().equals(Rank.FAMILY()));\r
+ assertTrue("Rosaceae must have a rank warning", rosa.hasProblem(ParserProblem.CheckRank));\r
+ rosa.removeParsingProblem(ParserProblem.CheckRank);\r
+ parser.parseSimpleName(rosa, "Rosaceaex", rosa.getRank(), true);\r
+ assertEquals("Rosaceaex have rank family", Rank.FAMILY(), rosa.getRank());\r
+ assertFalse("Rosaceaex must have no rank warning", rosa.hasProblem(ParserProblem.CheckRank));\r
+\r
+ \r
}\r
\r
/**\r
NonViralName nameNull = parser.parseFullName(strNameNull);\r
assertNull(nameNull);\r
\r
- //Uninomials\r
- ZoologicalName milichiidae = (ZoologicalName)parser.parseFullName("Milichiidae", NomenclaturalCode.ICZN, null);\r
- assertEquals("Family rank expected", Rank.FAMILY(), milichiidae.getRank());\r
- BotanicalName crepidinae = (BotanicalName)parser.parseFullName("Crepidinae", NomenclaturalCode.ICBN, null);\r
- assertEquals("Family rank expected", Rank.SUBTRIBE(), crepidinae.getRank());\r
- BotanicalName abies = (BotanicalName)parser.parseFullName("Abies", NomenclaturalCode.ICBN, null);\r
- assertEquals("Family rank expected", Rank.GENUS(), abies.getRank());\r
- \r
- \r
+ //some authors\r
+ String fullNameString = "Abies alba (Greuther & L'Hiver & al. ex Müller & Schmidt)Clark ex Ciardelli"; \r
+ BotanicalName authorname = (BotanicalName)parser.parseFullName(fullNameString);\r
+ assertFalse(authorname.hasProblem());\r
+ assertEquals("Basionym author should have 3 authors", 3, ((Team)authorname.getBasionymAuthorTeam()).getTeamMembers().size());\r
}\r
\r
private void testName_StringNomcodeRank(Method parseMethod) \r
\r
import static org.junit.Assert.*;\r
\r
+import java.util.BitSet;\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
* @created 04.09.2009\r
* @version 1.0\r
*/\r
-public class NameParserWarningTest {\r
+public class ParserProblemTest {\r
@SuppressWarnings("unused")\r
- private static final Logger logger = Logger.getLogger(NameParserWarningTest.class);\r
+ private static final Logger logger = Logger.getLogger(ParserProblemTest.class);\r
\r
/**\r
* @throws java.lang.Exception\r
}\r
\r
@Test\r
- public void testAddWarning(){\r
- int warning = ParserProblem.addWarning(0, ParserProblem.NameReferenceSeparation);\r
+ public void testAddProblem(){\r
+ int warning = ParserProblem.addProblem(0, ParserProblem.NameReferenceSeparation);\r
int expected = (int)Math.pow(2, ParserProblem.NameReferenceSeparation.ordinal()) ;\r
assertEquals("Unexpected value for addWarning", expected,warning);\r
- warning = ParserProblem.addWarning(warning, ParserProblem.CheckDetailOrYear);\r
+ warning = ParserProblem.addProblem(warning, ParserProblem.CheckDetailOrYear);\r
expected = expected + (int)Math.pow(2, ParserProblem.CheckDetailOrYear.ordinal()) ;\r
assertEquals("Unexpected value for addWarning", expected,warning);\r
}\r
\r
@Test\r
- public void testAddWarnings(){\r
- assertEquals("Unexpected value for addWarning", 23, ParserProblem.addWarnings(21, 6));\r
+ public void testRemoveProblem(){\r
+ int warning = ParserProblem.addProblem(0, ParserProblem.NameReferenceSeparation);\r
+ warning = ParserProblem.addProblem(warning, ParserProblem.CheckRank);\r
+ warning = ParserProblem.addProblem(warning, ParserProblem.CheckDetailOrYear);\r
+ assertEquals("Number of problems must be 3", 3, ParserProblem.warningList(warning).size());\r
+ assertTrue("Check Rank must be a problem", ParserProblem.warningList(warning).contains(ParserProblem.CheckRank));\r
+ \r
+ warning = ParserProblem.removeProblem(warning, ParserProblem.CheckRank);\r
+ assertEquals("Number of problems must be 2", 2, ParserProblem.warningList(warning).size());\r
+ assertFalse("Check Rank must not be a problem anymore", ParserProblem.warningList(warning).contains(ParserProblem.CheckRank));\r
+ \r
+ warning = ParserProblem.removeProblem(warning, ParserProblem.CheckRank);\r
+ assertEquals("Number of problems must be 2", 2, ParserProblem.warningList(warning).size());\r
+ assertFalse("Check Rank must not be a problem anymore", ParserProblem.warningList(warning).contains(ParserProblem.CheckRank));\r
+\r
+ warning = ParserProblem.removeProblem(warning, null);\r
+ assertEquals("Number of problems must be 2", 2, ParserProblem.warningList(warning).size());\r
+ assertFalse("Check Rank must not be a problem anymore", ParserProblem.warningList(warning).contains(ParserProblem.CheckRank));\r
+ }\r
+ \r
+ @Test\r
+ public void testAddProblems(){\r
+ assertEquals("Unexpected value for addWarning", 23, ParserProblem.addProblems(21, 6));\r
}\r
\r
@Test\r
\r
@Test\r
public void testHasError() {\r
- int warning = ParserProblem.addWarning(0, ParserProblem.NameReferenceSeparation);\r
- warning = ParserProblem.addWarning(warning, ParserProblem.CheckDetailOrYear);\r
+ int warning = ParserProblem.addProblem(0, ParserProblem.NameReferenceSeparation);\r
+ warning = ParserProblem.addProblem(warning, ParserProblem.CheckDetailOrYear);\r
assertTrue("warning list with NameReferenceSeparation must have error", ParserProblem.hasError(warning));\r
}\r
\r