/**
* pcgen.core.term.EvaluatorFactoryEQVar.java
* Copyright 2008 Andrew Wilson
* <nuance@users.sourceforge.net>.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Created 03 Oct 2008
*
* Current Ver: $Revision:$
*/
package pcgen.core.term;
/**
* {@code EvaluatorFactoryEQVar}
*
* This individual enumerations in this class are each responsible for making
* and returning an object that implements the TermEvaluator interface. Each
* enumeration has a regular expression that matches one of the "hardcoded"
* internal variables that every piece of equipment has a value for. They also
* have an array of string keys that enumerate every string that the regular
* expression can match (this is not as bad as it sounds since each can only
* match at most eight strings). The array of string is used to populate a
* {@code Map<String, Enum>}
*/
public enum TermEvaluatorBuilderEQVar implements TermEvaluatorBuilder
{
COMPLETE_EQ_ALTPLUSTOTAL
("ALTPLUSTOTAL",
new String[] { "ALTPLUSTOTAL" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQAltPlusTotalTermEvaluator(expressionString);
}
},
COMPLETE_EQ_BASECOST
("BASECOST",
new String[] { "BASECOST" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQBaseCostTermEvaluator(expressionString);
}
},
COMPLETE_EQ_CRITMULT
("CRITMULT",
new String[] { "CRITMULT" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQCritMultTermEvaluator(expressionString);
}
},
COMPLETE_EQ_DMGDICE
("DMGDICE",
new String[] { "DMGDICE" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQDamageDiceTermEvaluator(expressionString);
}
},
COMPLETE_EQ_DMGDIE
("DMGDIE",
new String[] { "DMGDIE" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQDamageDieTermEvaluator(expressionString);
}
},
COMPLETE_EQ_EQACCHECK
("EQACCHECK",
new String[] { "EQACCHECK" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQACCheckTermEvaluator(expressionString);
}
},
COMPLETE_EQ_EQHANDS
("EQHANDS",
new String[] { "EQHANDS" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQHandsTermEvaluator(expressionString);
}
},
COMPLETE_EQ_EQSPELLFAIL
("EQSPELLFAIL",
new String[] { "EQSPELLFAIL" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQSpellFailureTermEvaluator(expressionString);
}
},
COMPLETE_EQ_EQUIP_SIZE_INT
("EQUIP\\.SIZE(?:\\.INT)?",
new String[] { "EQUIP.SIZE.INT", "EQUIP.SIZE" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
if (matchedSection.length() == 14)
{
return new EQSizeTermEvaluator(expressionString);
}
else
{
return new EQEquipSizeTermEvaluator(expressionString);
}
}
},
COMPLETE_EQ_HEADPLUSTOTAL
("HEADPLUSTOTAL",
new String[] { "HEADPLUSTOTAL" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQHeadPlusTotalTermEvaluator(expressionString);
}
},
COMPLETE_EQ_PLUSTOTAL
("PLUSTOTAL",
new String[] { "PLUSTOTAL" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQPlusTotalTermEvaluator(expressionString);
}
},
COMPLETE_EQ_RANGE
("RANGE",
new String[] { "RANGE" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQRangeTermEvaluator(expressionString);
}
},
COMPLETE_EQ_REACHMULT
("(?:RACEREACH|REACHMULT|REACH)",
new String[] { "RACEREACH" ,"REACHMULT", "REACH" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
if ("RACEREACH".equals(expressionString))
{
return new EQRaceReachTermEvaluator(expressionString, src);
}
else if ("REACHMULT".equals(expressionString))
{
return new EQReachMultTermEvaluator(expressionString);
}
else if ("REACH".equals(expressionString))
{
return new EQReachTermEvaluator(expressionString);
}
return null;
}
},
COMPLETE_EQ_SIZE
("SIZE",
new String[] { "SIZE" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQSizeTermEvaluator(expressionString);
}
},
COMPLETE_EQ_WT
("WT",
new String[] { "WT" },
true ) {
@Override
public TermEvaluator getTermEvaluator(
final String expressionString,
final String src,
final String matchedSection) {
return new EQWeightTermEvaluator(expressionString);
}
};
private final String termConstructorPattern;
private final String[] termConstructorKeys;
private final boolean patternMatchesEntireTerm;
TermEvaluatorBuilderEQVar(
String pattern,
String[] keys,
boolean matchEntireTerm)
{
termConstructorPattern = pattern;
termConstructorKeys = keys;
patternMatchesEntireTerm = matchEntireTerm;
}
@Override
public String getTermConstructorPattern()
{
return termConstructorPattern;
}
@Override
public String[] getTermConstructorKeys()
{
return termConstructorKeys;
}
@Override
public boolean isEntireTerm()
{
return patternMatchesEntireTerm;
}
}