From: <jde...@us...> - 2013-10-15 20:52:14
|
Revision: 21728 http://sourceforge.net/p/pcgen/code/21728 Author: jdempsey Date: 2013-10-15 20:52:10 +0000 (Tue, 15 Oct 2013) Log Message: ----------- Allow PRERULE to work in PCC files Issue#: CODE-2304 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/AbstractPrerequisiteListParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreCampaignParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreRuleParser.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreRuleParserTest.java Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/AbstractPrerequisiteListParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/AbstractPrerequisiteListParser.java 2013-10-15 20:29:32 UTC (rev 21727) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/AbstractPrerequisiteListParser.java 2013-10-15 20:52:10 UTC (rev 21728) @@ -378,4 +378,26 @@ { return false; } + + /** + * Flag each Prerequisite created to indicate that no character is + * required to successfully test the Prerequisite. The function is + * recursive to handle a single Prerequisite that gets split out + * into a premult. + * + * @param prereq the new no need for char + */ + protected void setNoNeedForChar(Prerequisite prereq) + { + if (prereq == null) + { + return; + } + prereq.setCharacterRequired(false); + + for (Prerequisite element : prereq.getPrerequisites()) + { + setNoNeedForChar(element); + } + } } Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreCampaignParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreCampaignParser.java 2013-10-15 20:29:32 UTC (rev 21727) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreCampaignParser.java 2013-10-15 20:52:10 UTC (rev 21728) @@ -79,28 +79,6 @@ /** - * Flag each Prerequisite created to indicate that no character is - * required to successfully test the Prerequisite. The function is - * recursive to handle a single Prerequisite that gets split out - * into a premult. - * - * @param prereq the new no need for char - */ - private void setNoNeedForChar(Prerequisite prereq) - { - if (prereq == null) - { - return; - } - prereq.setCharacterRequired(false); - - for (Prerequisite element : prereq.getPrerequisites()) - { - setNoNeedForChar(element); - } - } - - /** * Process prereq keys wrapped in []. If the key is wrapped in [], the * prereq will be negated to check that the prereq is not passed, and * the number of required matches is increased by the number of negated Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreRuleParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreRuleParser.java 2013-10-15 20:29:32 UTC (rev 21727) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreRuleParser.java 2013-10-15 20:52:10 UTC (rev 21728) @@ -26,6 +26,8 @@ */ package plugin.pretokens.parser; +import pcgen.core.prereq.Prerequisite; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.prereq.AbstractPrerequisiteListParser; import pcgen.persistence.lst.prereq.PrerequisiteParserInterface; @@ -45,4 +47,29 @@ { return new String[]{"RULE"}; } + + /** + * Parse the pre req list + * + * @param kind The kind of the prerequisite (less the "PRE" prefix) + * @param formula The body of the prerequisite. + * @param invertResult Whether the prerequisite should invert the result. + * @param overrideQualify + * if set true, this prerequisite will be enforced in spite + * of any "QUALIFY" tag that may be present. + * @return PreReq + * @throws PersistenceLayerException + */ + @Override + public Prerequisite parse(String kind, + String formula, + boolean invertResult, + boolean overrideQualify) throws PersistenceLayerException + { + + Prerequisite prereq = super.parse(kind, formula, invertResult, overrideQualify); + setNoNeedForChar(prereq); + return prereq; + } + } Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreRuleParserTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreRuleParserTest.java 2013-10-15 20:29:32 UTC (rev 21727) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreRuleParserTest.java 2013-10-15 20:52:10 UTC (rev 21728) @@ -26,7 +26,10 @@ package pcgen.persistence.lst.prereq; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import org.junit.Test; + import pcgen.EnUsLocaleDependentTestCase; import pcgen.core.prereq.Prerequisite; import plugin.pretokens.parser.PreRuleParser; @@ -56,6 +59,7 @@ assertEquals( "<prereq kind=\"rule\" key=\"DISPLAYTYPETRAITS\" operator=\"GTEQ\" operand=\"1\" >\n</prereq>\n", prereq.toString()); + assertFalse("Prerule should nto need a character", prereq.isCharacterRequired()); } /** @@ -70,6 +74,7 @@ assertEquals( "<prereq kind=\"rule\" key=\"DISPLAYTYPETRAITS\" operator=\"LT\" operand=\"1\" >\n</prereq>\n", prereq.toString()); + assertFalse("Prerule should nto need a character", prereq.isCharacterRequired()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |