/* * Created on 02-Dec-2003 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package plugin.pretokens.test; import java.util.Set; import pcgen.base.util.CaseInsensitiveMap; import pcgen.base.util.Indirect; import pcgen.base.util.WrappedMapSet; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.enumeration.FactSetKey; import pcgen.core.Deity; import pcgen.core.display.CharacterDisplay; import pcgen.core.prereq.AbstractDisplayPrereqTest; import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteException; import pcgen.core.prereq.PrerequisiteOperator; import pcgen.core.prereq.PrerequisiteTest; import pcgen.system.LanguageBundle; /** * @author wardc * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class PreDeityTester extends AbstractDisplayPrereqTest implements PrerequisiteTest { /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ @Override public int passes(final Prerequisite prereq, final CharacterDisplay display, CDOMObject source) throws PrerequisiteException { int runningTotal; if (prereq.getKey().startsWith("PANTHEON."))//$NON-NLS-1$ { try { String pantheon = prereq.getKey().substring(9); Deity deity = display.getDeity(); Set<String> charDeityPantheon = new WrappedMapSet<>(CaseInsensitiveMap.class); if (deity != null) { FactSetKey<String> fk = FactSetKey.valueOf("Pantheon"); for (Indirect<String> indirect : deity.getSafeSetFor(fk)) { charDeityPantheon.add(indirect.get()); } } if (prereq.getOperator().equals(PrerequisiteOperator.EQ) || prereq.getOperator().equals( PrerequisiteOperator.GTEQ)) { runningTotal = (charDeityPantheon.contains(pantheon)) ? 1 : 0; } else if (prereq.getOperator().equals(PrerequisiteOperator.NEQ) || prereq.getOperator().equals(PrerequisiteOperator.LT)) { runningTotal = (charDeityPantheon.contains(pantheon)) ? 0 : 1; } else { throw new PrerequisiteException( LanguageBundle .getFormattedString( "PreDeity.error.bad_coparator", prereq.toString())); //$NON-NLS-1$ } } catch (IllegalArgumentException e) { //This is okay, just indicates the Pantheon asked for can't exist in any PC if (prereq.getOperator().equals(PrerequisiteOperator.EQ) || prereq.getOperator().equals( PrerequisiteOperator.GTEQ)) { runningTotal = 0; } else if (prereq.getOperator().equals(PrerequisiteOperator.NEQ) || prereq.getOperator().equals(PrerequisiteOperator.LT)) { runningTotal = 1; } else { throw new PrerequisiteException( LanguageBundle .getFormattedString( "PreDeity.error.bad_coparator", prereq.toString())); //$NON-NLS-1$ } } } else { final String charDeity = display.getDeity() != null ? display.getDeity() .getKeyName() : ""; //$NON-NLS-1$ if (prereq.getOperator().equals(PrerequisiteOperator.EQ) || prereq.getOperator().equals(PrerequisiteOperator.GTEQ)) { runningTotal = (charDeity.equalsIgnoreCase(prereq.getKey())) ? 1 : 0; } else if (prereq.getOperator().equals(PrerequisiteOperator.NEQ) || prereq.getOperator().equals(PrerequisiteOperator.LT)) { runningTotal = (charDeity.equalsIgnoreCase(prereq.getKey())) ? 0 : 1; } else { throw new PrerequisiteException(LanguageBundle .getFormattedString( "PreDeity.error.bad_coparator", prereq.toString())); //$NON-NLS-1$ } } return countedTotal(prereq, runningTotal); } /** * Get the type of prerequisite handled by this token. * @return the type of prerequisite handled by this token. */ @Override public String kindHandled() { return "DEITY"; //$NON-NLS-1$ } }