|
From: <boo...@us...> - 2006-08-31 04:02:40
|
Revision: 1363
http://svn.sourceforge.net/pcgen/?rev=1363&view=rev
Author: boomer70
Date: 2006-08-30 21:01:58 -0700 (Wed, 30 Aug 2006)
Log Message:
-----------
Initial changes to enable ability object GUI. This is still a WIP.
Modified Paths:
--------------
Trunk/pcgen/code/src/java/pcgen/core/Globals.java
Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java
Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java
Trunk/pcgen/code/src/java/pcgen/gui/CharacterInfo.java
Trunk/pcgen/code/src/java/pcgen/gui/HTMLUtils.java
Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java
Trunk/pcgen/code/src/java/pcgen/gui/filter/AbstractPObjectFilter.java
Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterAdapterPanel.java
Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java
Trunk/pcgen/code/src/java/pcgen/gui/filter/Filterable.java
Trunk/pcgen/code/src/java/pcgen/gui/panes/FlippingSplitPane.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoFeats.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoInventory.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoNaturalWeapons.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRace.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpells.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTabUtils.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java
Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java
Trunk/pcgen/code/src/java/pcgen/util/PropertyFactory.java
Trunk/pcgen/code/src/java/pcgen/util/enumeration/Tab.java
Added Paths:
-----------
Trunk/pcgen/code/src/java/pcgen/core/AbilityCategory.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/BaseCharacterInfoTab.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoAbilities.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/TabContainer.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/
Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java
Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityPoolPanel.java
Added: Trunk/pcgen/code/src/java/pcgen/core/AbilityCategory.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/AbilityCategory.java (rev 0)
+++ Trunk/pcgen/code/src/java/pcgen/core/AbilityCategory.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -0,0 +1,93 @@
+/*
+ * AbilityCategory.java
+ * Copyright 2006 (C) Aaron Divinsky <boo...@ya...>
+ *
+ * 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
+ *
+ * Current Ver: $Revision$
+ * Last Editor: $Author: $
+ * Last Edited: $Date$
+ */
+package pcgen.core;
+
+/**
+ * This class stores and manages information about Ability categories.
+ *
+ * @author boomer70 <boo...@ya...>
+ *
+ * @since 5.11.1
+ */
+public class AbilityCategory implements KeyedObject
+{
+ private String theDisplayName;
+ private String theKeyName;
+
+ private String thePoolFormula;
+ private boolean theVisibleFlag;
+
+ public static final AbilityCategory FEAT = new AbilityCategory("FEAT", "in_feats");
+
+ public AbilityCategory( final String aKeyName, final String aDisplayName )
+ {
+ theKeyName = aKeyName;
+ theDisplayName = aDisplayName;
+ }
+
+ /**
+ * Gets the formula to use for calculating the base pool size for this
+ * category of ability.
+ *
+ * @return
+ */
+ public String getPoolFormula()
+ {
+ return thePoolFormula;
+ }
+
+ // -------------------------------------------
+ // KeyedObject Support
+ // -------------------------------------------
+ /**
+ * @see pcgen.core.KeyedObject#getDisplayName()
+ */
+ public String getDisplayName()
+ {
+ return theDisplayName;
+ }
+
+ /**
+ * @see pcgen.core.KeyedObject#getKeyName()
+ */
+ public String getKeyName()
+ {
+ return theKeyName;
+ }
+
+ /**
+ * @see pcgen.core.KeyedObject#setKeyName(java.lang.String)
+ */
+ public void setKeyName(final String aKey)
+ {
+ theKeyName = aKey;
+ }
+
+ /**
+ * @see pcgen.core.KeyedObject#setName(java.lang.String)
+ */
+ public void setName(final String aName)
+ {
+ theDisplayName = aName;
+ }
+}
Property changes on: Trunk/pcgen/code/src/java/pcgen/core/AbilityCategory.java
___________________________________________________________________
Name: svn:keywords
+ "Author Revision Date Id"
Name: svn:eol-style
+ native
Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -918,26 +918,40 @@
/**
* Remove the Ability object whose Key matches the String passed in.
- * @param category
+ *
+ * @param aCategory
* @param aKey The key of the Ability to remove
* @return true or false
*/
- public static boolean removeAbilityKeyed (final String category, final String aKey)
+ public static boolean removeAbilityKeyed( final AbilityCategory aCategory, final String aKey )
{
- return abilityStore.removeKeyed(category, aKey);
+ return abilityStore.removeKeyed(aCategory.getKeyName(), aKey);
}
+ // TODO - Remove this version
+ public static boolean removeAbilityKeyed( final String aCategory, final String aKey )
+ {
+ return abilityStore.removeKeyed(aCategory, aKey);
+ }
+
/**
- * Get the Ability whose Key matches the String passed in
- * @param category
- * @param aKey the KEY of the Ability to return
+ * Get the Ability whose Key matches the String passed in.
+ *
+ * @param aCategory The category of the Ability to return.
+ * @param aKey The KEY of the Ability to return
* @return Ability
*/
- public static Ability getAbilityKeyed (final String category, final String aKey)
+ public static Ability getAbilityKeyed( final AbilityCategory aCategory, final String aKey )
{
- return (Ability) abilityStore.getKeyed(category, aKey);
+ return (Ability)abilityStore.getKeyed(aCategory.getKeyName(), aKey);
}
+ // TODO - Remove this version
+ public static Ability getAbilityKeyed( final String aCategory, final String aKey )
+ {
+ return (Ability)abilityStore.getKeyed(aCategory, aKey);
+ }
+
/**
* Get an iterator for the Abilities in the chosen category. If
* passed the string "ALL", will construct an iterator for all abilites
@@ -963,6 +977,28 @@
}
/**
+ * Returns a list of abilities of the specified category.
+ *
+ * @param aCategory The category of Ability to return
+ *
+ * @return An <b>unmodifiable</b> list of the Ability objects currently
+ * loaded
+ */
+ public static List<Ability> getAbilityList( final AbilityCategory aCategory )
+ {
+ final List<? extends Categorisable> abilities = abilityStore.getUnmodifiableList( aCategory.getKeyName() );
+ final List<Ability> ret = new ArrayList<Ability>(abilities.size());
+ for ( final Categorisable ab : abilities )
+ {
+ if ( ab instanceof Ability )
+ {
+ ret.add( (Ability)ab );
+ }
+ }
+ return Collections.unmodifiableList(ret);
+ }
+
+ /**
* For the rare method that does actually need a list of Ability
* objects rather than an iterator.
* @param aCategory the category of object to return
Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -1607,6 +1607,52 @@
setDirty(true);
}
+ public BigDecimal getTotalAbilityPool( final AbilityCategory aCategory )
+ {
+ if ( aCategory == AbilityCategory.FEAT )
+ {
+ return BigDecimal.valueOf(getFeats());
+ }
+ Float basePool = this.getVariableValue(aCategory.getPoolFormula(), getClass().toString());
+ double bonus = getTotalBonusTo("ABILITYPOOL", aCategory.getKeyName());
+ return BigDecimal.valueOf(basePool + bonus);
+ }
+
+ public BigDecimal getAbilityPoolSpent( final AbilityCategory aCategory )
+ {
+ double spent = 0.0d;
+
+ final List<Ability> abilities = getSelectedAbilities( aCategory );
+ for ( final Ability ability : abilities )
+ {
+ final int subfeatCount = ability.getAssociatedCount();
+
+ if (subfeatCount > 1)
+ {
+ spent += subfeatCount;
+ }
+ else
+ {
+ spent += ability.getCost(this);
+ }
+ }
+ return BigDecimal.valueOf(spent);
+ }
+
+ public BigDecimal getAvailableAbilityPool( final AbilityCategory aCategory )
+ {
+ return getTotalAbilityPool(aCategory).subtract(getAbilityPoolSpent(aCategory));
+ }
+
+ public List<Ability> getSelectedAbilities( final AbilityCategory aCategory )
+ {
+ if ( aCategory == AbilityCategory.FEAT )
+ {
+ return getRealFeatList();
+ }
+ return Collections.emptyList();
+ }
+
public double getFeats()
{
if (Globals.getGameModeHasPointPool())
@@ -1678,7 +1724,6 @@
{
final boolean qualify = this.qualifiesForFeat(anAbility);
final boolean canTakeMult = anAbility.isMultiples();
-// final boolean hasOrdinary = this.hasRealFeatNamed(anAbility.getName());
final boolean hasOrdinary = this.hasRealFeat(anAbility);
final boolean hasAuto = this.hasFeatAutomatic(anAbility.getKeyName());
@@ -4938,6 +4983,11 @@
return favored;
}
+ public Ability getAbilityAutomaticKeyed(final AbilityCategory aCategory, final String anAbilityKey)
+ {
+ return AbilityUtilities.getAbilityFromList(abilityAutoList(aCategory), aCategory.getKeyName(), anAbilityKey, -1);
+ }
+
public Ability getFeatAutomaticKeyed(final String aFeatKey)
{
return AbilityUtilities.getAbilityFromList(featAutoList(), "FEAT", aFeatKey, -1);
@@ -8596,6 +8646,20 @@
return calcACOfType("Equipment") + calcACOfType("Armor");
}
+ public List<Ability> abilityAutoList(final AbilityCategory aCategory)
+ {
+ if ( aCategory.equals(AbilityCategory.FEAT) )
+ {
+ return featAutoList();
+ }
+ return Collections.emptyList();
+// final List<Ability> autoAbilityList = getStableAutomaticAbilityList(aCategory);
+//
+// if ( autoAbilityList != null )
+// {
+// return autoAbilityList;
+// }
+ }
public List<Ability> featAutoList()
{
final List<Ability> autoFeatList = getStableAutomaticFeatList();
Modified: Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -79,15 +79,82 @@
//private int minLVL = 0;
//private int maxLVL = 9;
- private String creatableItem = "";
- private String spellStat = "";
- private String target = "";
+ private String creatableItem = Constants.EMPTY_STRING;
+ private String spellStat = Constants.EMPTY_STRING;
+ private String target = Constants.EMPTY_STRING;
private int castingThreshold = 0;
private int xpCost = 0;
private int ppCost = 0;
static boolean hasPPCost = false;
+ /** An enumeration of "Standard" spell components */
+ public enum Component {
+ /** Verbal Component "V" */
+ VERBAL("V", "Spell.Components.Verbal"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Somatic (movement) Component "S" */
+ SOMATIC("S", "Spell.Components.Somatic"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Material Component "M" */
+ MATERIAL("M", "Spell.Components.Material"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Divine Focus Component (usually holy symbol) "DF" */
+ DIVINEFOCUS("DF", "Spell.Components.DivineFocus"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Non-divine Focus Component "F" */
+ FOCUS("F", "Spell.Components.Focus"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Experience Point cost "XP" */
+ EXPERIENCE("XP", "Spell.Components.Experience"), //$NON-NLS-1$ //$NON-NLS-2$
+ /** Anything other than the standard components */
+ OTHER("See text", "Spell.Components.SeeText"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ private String theKey;
+ private String theName;
+
+ Component(final String aKey, final String aName)
+ {
+ theKey = aKey;
+ theName = aName;
+ }
+
+ /**
+ * Returns the String key of the component.
+ *
+ * @return The key.
+ */
+ public String getKey()
+ {
+ return theKey;
+ }
+
+ /**
+ * Factory method to get a Component from a string key.
+ *
+ * @param aKey The component key to get a Component for (e.g. V or S)
+ *
+ * @return A Component object. If no object matches <tt>OTHER</tt> is
+ * returned.
+ */
+ public static Component getComponentFromKey( final String aKey )
+ {
+ for ( Component c : Component.values() )
+ {
+ if ( c.getKey().equalsIgnoreCase(aKey) )
+ {
+ return c;
+ }
+ }
+ return OTHER;
+ }
+ /**
+ * Returns the string abbreviation of this component.
+ *
+ * @return The abbreviation
+ */
+ @Override
+ public String toString()
+ {
+ return theName;
+ }
+ }
+
public static boolean hasPPCost()
{
return hasPPCost;
Modified: Trunk/pcgen/code/src/java/pcgen/gui/CharacterInfo.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/CharacterInfo.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/CharacterInfo.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -65,7 +65,8 @@
private InfoSpecialAbilities infoSpecialAbilities;
private InfoClasses infoClasses;
private InfoSkills infoSkills;
- private InfoFeats infoFeats;
+ private InfoAbilities infoAbilities;
+// private InfoFeats infoFeats;
private InfoDomain infoDomain;
private InfoSpells infoSpells;
private JTabbedPane characterInfoTabbedPane = new JTabbedPane();
@@ -88,7 +89,8 @@
infoSpecialAbilities = new InfoSpecialAbilities(pc);
infoClasses = new InfoClasses(pc);
infoSkills = new InfoSkills(pc);
- infoFeats = new InfoFeats(pc);
+ infoAbilities = new InfoAbilities(pc);
+// infoFeats = new InfoFeats(pc);
infoDomain = new InfoDomain(pc);
infoSpells = new InfoSpells(pc);
setName(""); //$NON-NLS-1$
@@ -135,22 +137,6 @@
}
/**
- * Get the kit filter
- * @return filter
- */
- public String getKitFilter() {
- Component c = characterInfoTabbedPane.getSelectedComponent();
-
- if (c instanceof FilterAdapterPanel) {
- return ((FilterAdapterPanel) c).getKitFilter();
- } else if (c instanceof InfoInventory) {
- return ((InfoInventory) c).getInfoGear().getKitFilter();
- }
-
- return "";
- }
-
- /**
* this method provides access to the tabs for the Filter
*
* <br>
@@ -255,10 +241,14 @@
* Get the info feats
* @return info feats
*/
- public InfoFeats infoFeats() {
- return infoFeats;
- }
+// public InfoFeats infoFeats() {
+// return infoFeats;
+// }
+ public InfoAbilities infoAbilities()
+ {
+ return infoAbilities;
+ }
/**
* Get the info domain
* @return info domain
@@ -363,7 +353,8 @@
addTab(infoSpecialAbilities());
addTab(infoClasses());
addTab(infoSkills());
- addTab(infoFeats());
+// addTab(infoFeats());
+ addTab(infoAbilities());
addTab(infoDomain());
addTab(infoSpells());
addTab(infoInventory());
Modified: Trunk/pcgen/code/src/java/pcgen/gui/HTMLUtils.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/HTMLUtils.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/HTMLUtils.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -58,4 +58,6 @@
/** Constant for HTML list item end tag */
public static final String END_LI = "</li>"; //$NON-NLS-1$
+ /** Constant for 2 spaces in HTML */
+ public static final String TWO_SPACES = " "; //$NON-NLS-1$
}
Modified: Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -787,7 +787,8 @@
{
if (characterPane != null)
{
- characterPane.setPaneForUpdate(characterPane.infoFeats());
+// characterPane.setPaneForUpdate(characterPane.infoFeats());
+ characterPane.setPaneForUpdate(characterPane.infoAbilities());
characterPane.refresh();
}
}
@@ -2095,7 +2096,8 @@
characterPane.setPaneForUpdate(characterPane.infoRace());
characterPane.setPaneForUpdate(characterPane.infoClasses());
characterPane.setPaneForUpdate(characterPane.infoDomain());
- characterPane.setPaneForUpdate(characterPane.infoFeats());
+// characterPane.setPaneForUpdate(characterPane.infoFeats());
+ characterPane.setPaneForUpdate(characterPane.infoAbilities());
characterPane.setPaneForUpdate(characterPane.infoSkills());
characterPane.setPaneForUpdate(characterPane.infoSpells());
characterPane.setPaneForUpdate(characterPane.infoInventory());
Modified: Trunk/pcgen/code/src/java/pcgen/gui/filter/AbstractPObjectFilter.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/filter/AbstractPObjectFilter.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/filter/AbstractPObjectFilter.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -20,6 +20,7 @@
*/
package pcgen.gui.filter;
+import pcgen.core.Constants;
import pcgen.core.PObject;
import pcgen.core.PlayerCharacter;
@@ -36,19 +37,35 @@
private String description;
private String name;
+ /**
+ * Default Constructor.
+ *
+ * <p>Creates an empty Filter that is not usable.
+ */
protected AbstractPObjectFilter()
{
- this("", "", "");
+ this(Constants.EMPTY_STRING, Constants.EMPTY_STRING, Constants.EMPTY_STRING);
}
+ /**
+ * Create a filter with just a name.
+ *
+ * @param argName The name for the filter.
+ */
protected AbstractPObjectFilter(String argName)
{
- this("", argName, "");
+ this(Constants.EMPTY_STRING, argName, Constants.EMPTY_STRING);
}
+ /**
+ * Create a filter with a name and category.
+ *
+ * @param argCategory The category for the filter.
+ * @param argName The name of the filter.
+ */
protected AbstractPObjectFilter(String argCategory, String argName)
{
- this(argCategory, argName, "");
+ this(argCategory, argName, Constants.EMPTY_STRING);
}
private AbstractPObjectFilter(String argCategory, String argName, String argDescription)
@@ -91,7 +108,7 @@
* @param aPC
* @return description
*/
- public String getDescription(PlayerCharacter aPC)
+ public String getDescription(@SuppressWarnings("unused")PlayerCharacter aPC)
{
return description;
}
@@ -111,7 +128,7 @@
* @param aPC
* @return name
*/
- public String getName(PlayerCharacter aPC)
+ public String getName(@SuppressWarnings("unused")PlayerCharacter aPC)
{
return name;
}
@@ -122,6 +139,7 @@
* @param object
* @return true if equal
*/
+ @Override
public final boolean equals(Object object)
{
if (object instanceof PObjectFilter)
@@ -137,6 +155,7 @@
*
* @return hashcode of this filter
*/
+ @Override
public final int hashCode()
{
return toString().hashCode();
@@ -155,7 +174,8 @@
* toString - category + name or name
* @return category + name or name
*/
- public String toString()
+ @Override
+ public String toString()
{
return (category.length() > 0) ? (getCategory() + SEPARATOR + name) : name;
}
Modified: Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterAdapterPanel.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterAdapterPanel.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterAdapterPanel.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -20,14 +20,14 @@
*/
package pcgen.gui.filter;
-import pcgen.core.PObject;
-import pcgen.core.PlayerCharacter;
-
-import javax.swing.JPanel;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
+import javax.swing.JPanel;
+
+import pcgen.core.PObject;
+import pcgen.core.PlayerCharacter;
+
/**
* <code>FilterAdapterPanel</code>
*
@@ -36,10 +36,9 @@
*/
public abstract class FilterAdapterPanel extends JPanel implements Filterable
{
- private List availableFilters = new ArrayList(0);
- private List removedFilters = new ArrayList(0);
- private List selectedFilters = new ArrayList(0);
- private String kitFilter = "";
+ private List<PObjectFilter> availableFilters = new ArrayList<PObjectFilter>(0);
+ private List<PObjectFilter> removedFilters = new ArrayList<PObjectFilter>(0);
+ private List<PObjectFilter> selectedFilters = new ArrayList<PObjectFilter>(0);
private int filterMode = FilterConstants.MATCH_ALL;
/**
@@ -50,7 +49,7 @@
*
* @return a list with the available filters for this Filterable
*/
- public final List getAvailableFilters()
+ public final List<PObjectFilter> getAvailableFilters()
{
return availableFilters;
}
@@ -89,7 +88,7 @@
*
* @return a list with the removed filters for this Filterable
*/
- public final List getRemovedFilters()
+ public final List<PObjectFilter> getRemovedFilters()
{
return removedFilters;
}
@@ -102,7 +101,7 @@
*
* @return a list with the selected filters for this Filterable
*/
- public final List getSelectedFilters()
+ public final List<PObjectFilter> getSelectedFilters()
{
return selectedFilters;
}
@@ -182,24 +181,6 @@
public abstract void refreshFiltering();
/**
- * Set kit filter
- * @param argKitFilter
- */
- public final void setKitFilter(String argKitFilter)
- {
- kitFilter = argKitFilter;
- }
-
- /**
- * Get Kit Filter
- * @return kit filter
- */
- public final String getKitFilter()
- {
- return kitFilter;
- }
-
- /**
* apply all selected filters in the chosen mode for a specific PObject
*
* <br>author: Thomas Behr 10-02-02
@@ -207,7 +188,7 @@
* @param pObject - the PObject to test for filter acceptance
* @return TRUE or FALSE
*/
- protected final boolean accept(PlayerCharacter aPC, PObject pObject)
+ public final boolean accept(PlayerCharacter aPC, PObject pObject)
{
if (pObject == null)
{
@@ -215,12 +196,8 @@
}
final int mode = getFilterMode();
- PObjectFilter filter;
-
- for (Iterator it = getSelectedFilters().iterator(); it.hasNext();)
+ for ( PObjectFilter filter : getSelectedFilters() )
{
- filter = (PObjectFilter) it.next();
-
if ((mode == FilterConstants.MATCH_ALL) && !filter.accept(aPC, pObject))
{
return false;
Modified: Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java
===================================================================
--- Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java 2006-08-30 17:52:25 UTC (rev 1362)
+++ Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java 2006-08-31 04:01:58 UTC (rev 1363)
@@ -23,6 +23,7 @@
import pcgen.core.*;
import pcgen.core.prereq.Prerequisite;
import pcgen.core.spell.Spell;
+import pcgen.core.utils.CoreUtility;
import pcgen.persistence.PersistenceManager;
import pcgen.util.Logging;
import pcgen.util.PropertyFactory;
@@ -42,19 +43,24 @@
*/
public final class FilterFactory implements FilterConstants
{
- private static List campaignFilters = new ArrayList();
- private static List classFilters = new ArrayList();
- private static List deityFilters = new ArrayList();
- private static List equipmentFilters = new ArrayList();
- private static List featFilters = new ArrayList();
- private static List prereqAlignmentFilters = new ArrayList();
- private static List raceFilters = new ArrayList();
- private static List sizeFilters = new ArrayList();
- private static List skillFilters = new ArrayList();
- private static List sourceFilters = new ArrayList();
- private static List spellFilters = new ArrayList();
- private static Map filterSettings = new HashMap();
+ private static List<PObjectFilter> campaignFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> classFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> deityFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> equipmentFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> featFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> prereqAlignmentFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> raceFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> sizeFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> skillFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> sourceFilters = new ArrayList<PObjectFilter>();
+ private static List<PObjectFilter> spellFilters = new ArrayList<PObjectFilter>();
+ private static Map<String, String> filterSettings = new HashMap<String, String>();
+ private static final String MODE_SETTING = "mode"; //$NON-NLS-1$
+ private static final String AVAILABLE_SETTING = "available"; //$NON-NLS-1$
+ private static final String SELECTED_SETTING = "selected"; //$NON-NLS-1$
+ private static final String REMOVED_SETTING = "removed"; //$NON-NLS-1$
+
/**
* clears the filter cache for updates/re-initialization
* of filter settings
@@ -91,16 +97,14 @@
* @param filterList
* @return String
*/
- public static String filterListToString(List filterList)
+ public static String filterListToString(final List<?> filterList)
{
- Object filter;
StringBuffer buffer = new StringBuffer();
- for (Iterator it = filterList.iterator(); it.hasNext();)
+ for ( final Object filter : filterList )
{
- filter = it.next();
- buffer.append("[").append(filter.getClass().getName());
- buffer.append("|").append(filter.toString()).append("]");
+ buffer.append('[').append(filter.getClass().getName());
+ buffer.append(Constants.PIPE).append(filter.toString()).append(']');
}
return buffer.toString();
@@ -117,12 +121,9 @@
classFilters.add(FilterFactory.createQualifyFilter());
// e.g. "Base", "Monster", "NPC", "PC", "Prestige" + more
- Iterator iter = Globals.getPCClassTypeList().iterator();
-
- while (iter.hasNext())
+ for ( final String subType : Globals.getPCClassTypeList() )
{
//All TYPEs should already be tokenized into subtypes by the "."
- String subType = (String) iter.next();
classFilters.add(FilterFactory.createTypeFilter(subType, subType.length() > 3));
//If 2nd param of createTypeFilter is "false" then the filter created
@@ -130,14 +131,15 @@
//In this case, types of 3-letters or less will be preserved (typically, "PC" and "NPC")
}
- classFilters.add(FilterFactory.createSpellTypeFilter("Arcane"));
- classFilters.add(FilterFactory.createSpellTypeFilter("Divine"));
- classFilters.add(FilterFactory.createSpellTypeFilter("Psionic"));
+ // TODO - Create Globals.getAllSpellTypes()
+ classFilters.add(FilterFactory.createSpellTypeFilter("Arcane")); //$NON-NLS-1$
+ classFilters.add(FilterFactory.createSpellTypeFilter("Divine")); //$NON-NLS-1$
+ classFilters.add(FilterFactory.createSpellTypeFilter("Psionic")); //$NON-NLS-1$
}
- for (Iterator it = classFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : classFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -152,39 +154,33 @@
deityFilters.add(FilterFactory.createQualifyFilter());
deityFilters.add(FilterFactory.createPCAlignmentFilter());
- for (int i = 0; i < 9; i++)
+ // TODO - Check if Alignments should be used.
+ final int numAlign = SettingsHandler.getGame().getUnmodifiableAlignmentList().size();
+ for (int i = 0; i < numAlign; i++)
{
deityFilters.add(FilterFactory.createAlignmentFilter(i));
}
- for (Iterator it = Globals.getDomainList().iterator(); it.hasNext();)
+ for ( final Domain domain : Globals.getDomainList() )
{
- deityFilters.add(FilterFactory.createDomainFilter((Domain) it.next()));
+ deityFilters.add(FilterFactory.createDomainFilter(domain));
}
- deityFilters.add(FilterFactory.createPantheonFilter(PantheonFilter.ALL, PantheonFilter.HIGH));
+ deityFilters.add(FilterFactory.createPantheonFilter(PantheonFilter.ALL, PantheonFilter.Detail.HIGH));
- String tmp;
-
- for (Iterator it = Globals.getPantheons().iterator(); it.hasNext();)
+ for ( final String pantheon : Globals.getPantheons() )
{
- tmp = (String) it.next();
-
- if (!"DROW".equals(tmp.toUpperCase()))
- {
- deityFilters.add(FilterFactory.createPantheonFilter(tmp,
- (tmp.indexOf(" (") > -1) ? PantheonFilter.HIGH : PantheonFilter.LOW));
- }
- else
- {
- deityFilters.add(FilterFactory.createPantheonFilter("Drow", PantheonFilter.HIGH));
- }
+ // TODO - What are we doing with the indexOf " ("??
+ deityFilters.add(FilterFactory.createPantheonFilter(pantheon,
+ (pantheon.indexOf(" (") > -1) //$NON-NLS-1$
+ ? PantheonFilter.Detail.HIGH
+ : PantheonFilter.Detail.LOW));
}
}
- for (Iterator it = deityFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : deityFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -201,12 +197,12 @@
equipmentFilters.add(FilterFactory.createNonMagicFilter());
equipmentFilters.add(FilterFactory.createAffordableFilter());
- for (Iterator it = Equipment.getEquipmentTypes().iterator(); it.hasNext();)
+ for ( final String type : Equipment.getEquipmentTypes() )
{
- equipmentFilters.add(FilterFactory.createTypeFilter((String) it.next()));
+ equipmentFilters.add(FilterFactory.createTypeFilter(type));
}
- for (String s : Globals.getWeaponTypeList())
+ for (final String s : Globals.getWeaponTypeList())
{
// weapon types come in pairs:
// first UPPERCASE only, than Capitalized
@@ -217,9 +213,9 @@
equipmentFilters.add(FilterFactory.createPCSizeFilter());
}
- for (Iterator it = equipmentFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : equipmentFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -237,9 +233,9 @@
featFilters.add(FilterFactory.createVirtualFeatFilter());
}
- for (Iterator it = featFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : featFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -251,19 +247,21 @@
{
if (prereqAlignmentFilters.size() == 0)
{
- for (int i = 0; i < 9; i++)
+ // TODO - Check if Alignments should be used.
+ final int numAlign = SettingsHandler.getGame().getUnmodifiableAlignmentList().size();
+ for (int i = 0; i < numAlign; i++)
{
- prereqAlignmentFilters.add(FilterFactory.createAlignmentFilter(i, ALLOWED));
- prereqAlignmentFilters.add(FilterFactory.createAlignmentFilter(i, REQUIRED));
+ prereqAlignmentFilters.add(FilterFactory.createAlignmentFilter(i, AlignmentFilter.Mode.ALLOWED));
+ prereqAlignmentFilters.add(FilterFactory.createAlignmentFilter(i, AlignmentFilter.Mode.REQUIRED));
}
- prereqAlignmentFilters.add(FilterFactory.createPCAlignmentFilter(ALLOWED));
- prereqAlignmentFilters.add(FilterFactory.createPCAlignmentFilter(REQUIRED));
+ prereqAlignmentFilters.add(FilterFactory.createPCAlignmentFilter(AlignmentFilter.Mode.ALLOWED));
+ prereqAlignmentFilters.add(FilterFactory.createPCAlignmentFilter(AlignmentFilter.Mode.REQUIRED));
}
- for (Iterator it = prereqAlignmentFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : prereqAlignmentFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -283,26 +281,23 @@
* author: Thomas Behr 04-03-02
*/
- // ensure that the default race type filter is created!!
- Globals.getRaceTypes().add("Humanoid");
-
- for (Iterator it = Globals.getRaceTypes().iterator(); it.hasNext();)
+ // TODO - Change to RACETYPE/RACESUBTYPE?
+ for ( final String raceType : Globals.getRaceTypes() )
{
- raceFilters.add(FilterFactory.createTypeFilter((String) it.next()));
+ raceFilters.add(FilterFactory.createTypeFilter(raceType));
}
raceFilters.add(FilterFactory.createQualifyFilter());
- PObjectFilter filter = FilterFactory.createCompoundFilter(new TypeFilter("Base"), new TypeFilter("PC"), AND);
- PCClass aPCClass;
+ // Create a favored class filter for each visible Base.PC class.
+ // TODO - Fix this hardcoding
+ PObjectFilter filter = FilterFactory.createCompoundFilter(new TypeFilter("Base"), new TypeFilter("PC"), AND); //$NON-NLS-1$ //$NON-NLS-2$
- for (Iterator it = Globals.getClassList().iterator(); it.hasNext();)
+ for ( final PCClass pcClass : Globals.getClassList() )
{
- aPCClass = (PCClass) it.next();
-
- if (aPCClass.isVisible() && filter.accept(null, aPCClass))
+ if (pcClass.isVisible() && filter.accept(null, pcClass))
{
- raceFilters.add(FilterFactory.createFavoredClassFilter(aPCClass.getKeyName()));
+ raceFilters.add(FilterFactory.createFavoredClassFilter(pcClass.getKeyName()));
}
}
@@ -310,9 +305,9 @@
raceFilters.add(FilterFactory.createRaceFilter());
}
- for (Iterator it = raceFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : raceFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -330,9 +325,9 @@
}
}
- for (Iterator it = sizeFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : sizeFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -354,9 +349,9 @@
}
}
- for (Iterator it = skillFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : skillFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -368,37 +363,34 @@
{
if (sourceFilters.size() == 0)
{
- for (Iterator it = PersistenceManager.getInstance().getSources().iterator(); it.hasNext();)
+ for ( final String source : PersistenceManager.getInstance().getSources() )
{
- String source = (String) it.next();
sourceFilters.add(FilterFactory.createSourceFilter(source));
}
}
- List aList = new ArrayList();
- List bList = new ArrayList();
+ List<PObjectFilter> settingList = new ArrayList<PObjectFilter>();
+ List<PObjectFilter> genreList = new ArrayList<PObjectFilter>();
- for (Iterator it = Globals.getCampaignList().iterator(); it.hasNext();)
+ for ( final Campaign campaign : Globals.getCampaignList() )
{
- Campaign c = (Campaign) it.next();
-
- if (!c.getSetting().equals(""))
+ if (!campaign.getSetting().equals(Constants.EMPTY_STRING))
{
- aList.add(FilterFactory.createSettingFilter(c.getSetting()));
+ settingList.add(FilterFactory.createSettingFilter(campaign.getSetting()));
}
- if (!c.getGenre().equals(""))
+ if (!campaign.getGenre().equals(Constants.EMPTY_STRING))
{
- bList.add(FilterFactory.createGenreFilter(c.getGenre()));
+ genreList.add(FilterFactory.createGenreFilter(campaign.getGenre()));
}
}
- sourceFilters.addAll(aList);
- sourceFilters.addAll(bList);
+ sourceFilters.addAll(settingList);
+ sourceFilters.addAll(genreList);
- for (Iterator it = sourceFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : sourceFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -410,52 +402,52 @@
{
if (spellFilters.size() == 0)
{
- spellFilters.add(FilterFactory.createComponentFilter("V"));
- spellFilters.add(FilterFactory.createComponentFilter("S"));
- spellFilters.add(FilterFactory.createComponentFilter("M"));
- spellFilters.add(FilterFactory.createComponentFilter("DF"));
- spellFilters.add(FilterFactory.createComponentFilter("F"));
- spellFilters.add(FilterFactory.createComponentFilter("XP"));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.VERBAL.toString()));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.SOMATIC.toString()));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.MATERIAL.toString()));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.DIVINEFOCUS.toString()));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.FOCUS.toString()));
+ spellFilters.add(FilterFactory.createComponentFilter(Spell.Component.EXPERIENCE.toString()));
- for (Iterator it = Globals.getCastingTimesSet().iterator(); it.hasNext();)
+ for ( final String castTime : Globals.getCastingTimesSet() )
{
- spellFilters.add(FilterFactory.createCastingTimeFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createCastingTimeFilter(castTime));
}
- for (Iterator it = Globals.getDescriptorSet().iterator(); it.hasNext();)
+ for ( final String descriptor : Globals.getDescriptorSet() )
{
- spellFilters.add(FilterFactory.createDescriptorFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createDescriptorFilter(descriptor));
}
- for (Iterator it = Globals.getTargetSet().iterator(); it.hasNext();)
+ for ( final String target : Globals.getTargetSet() )
{
- spellFilters.add(FilterFactory.createEffectTypeFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createEffectTypeFilter(target));
}
- for (Iterator it = Globals.getRangesSet().iterator(); it.hasNext();)
+ for ( final String range : Globals.getRangesSet() )
{
- spellFilters.add(FilterFactory.createRangeFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createRangeFilter(range));
}
- for (Iterator it = SettingsHandler.getGame().getUnmodifiableSchoolsList().iterator(); it.hasNext();)
+ for ( final String school : SettingsHandler.getGame().getUnmodifiableSchoolsList() )
{
- spellFilters.add(FilterFactory.createSchoolFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createSchoolFilter(school));
}
- for (Iterator it = Globals.getSrSet().iterator(); it.hasNext();)
+ for ( final String sr : Globals.getSrSet() )
{
- spellFilters.add(FilterFactory.createSpellResistanceFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createSpellResistanceFilter(sr));
}
- for (Iterator it = Globals.getSubschools().iterator(); it.hasNext();)
+ for ( final String subschool : Globals.getSubschools() )
{
- spellFilters.add(FilterFactory.createSubschoolFilter((String) it.next()));
+ spellFilters.add(FilterFactory.createSubschoolFilter(subschool));
}
}
- for (Iterator it = spellFilters.iterator(); it.hasNext();)
+ for ( final PObjectFilter filter : spellFilters )
{
- fap.registerFilter((PObjectFilter) it.next());
+ fap.registerFilter(filter);
}
}
@@ -490,7 +482,7 @@
try
{
- filterable.setFilterMode(Integer.parseInt(SettingsHandler.retrieveFilterSettings(name + ".mode")));
+ filterable.setFilterMode(Integer.parseInt(SettingsHandler.retrieveFilterSettings(name + '.' + MODE_SETTING)));
}
catch (NumberFormatException ex)
{
@@ -499,34 +491,33 @@
filterSettings.clear();
- List customAvailable = preprocessFilterList("available",
- SettingsHandler.retrieveFilterSettings(name + ".available"));
- List customSelected = preprocessFilterList("selected",
- SettingsHandler.retrieveFilterSettings(name + ".selected"));
- List customRemoved = preprocessFilterList("removed", SettingsHandler.retrieveFilterSettings(name + ".removed"));
+ final List<String[]> customAvailable = preprocessFilterList(AVAILABLE_SETTING,
+ SettingsHandler.retrieveFilterSettings(name + '.' + AVAILABLE_SETTING));
+ final List<String[]> customSelected = preprocessFilterList(SELECTED_SETTING,
+ SettingsHandler.retrieveFilterSettings(name + '.' + SELECTED_SETTING));
+ final List<String[]> customRemoved = preprocessFilterList(REMOVED_SETTING,
+ SettingsHandler.retrieveFilterSettings(name + '.' + REMOVED_SETTING));
/*
* move the filters to the appropriate list
*/
- Object filter;
- String listType;
-
- for (Iterator it = filterable.getAvailableFilters().iterator(); it.hasNext();)
+ for (final Iterator<PObjectFilter> it = filterable.getAvailableFilters().iterator(); it.hasNext();)
{
- filter = it.next();
- listType = (String) filterSettings.get(filter.toString());
+ final PObjectFilter filter = it.next();
+ final String listType = filterSettings.get(filter.toString());
- if ((listType == null) || ("available".equals(listType)))
+ // TODO - Change filterable to not give out references to the lists
+ if ((listType == null) || (AVAILABLE_SETTING.equals(listType)))
{
// this is our default case
// do nothing - leave the filter in the available list
}
- else if ("selected".equals(listType))
+ else if (SELECTED_SETTING.equals(listType))
{
it.remove();
filterable.getSelectedFilters().add(filter);
}
- else if ("removed".equals(listType))
+ else if (REMOVED_SETTING.equals(listType))
{
it.remove();
filterable.getRemovedFilters().add(filter);
@@ -614,7 +605,7 @@
* stats tab factory methods
* #################################################################
*/
- private static PObjectFilter createAlignmentFilter(int alignment, String mode)
+ private static PObjectFilter createAlignmentFilter(int alignment, AlignmentFilter.Mode mode)
{
return new DeityAlignmentFilter(alignment, mode);
}
@@ -684,7 +675,7 @@
return new PCAlignmentFilter();
}
- private static PObjectFilter createPCAlignmentFilter(String mode)
+ private static PObjectFilter createPCAlignmentFilter(final AlignmentFilter.Mode mode)
{
return new PCAlignmentFilter(mode);
}
@@ -699,7 +690,7 @@
return new PCTemplateFilter();
}
- private static PObjectFilter createPantheonFilter(String race, int detailLevel)
+ private static PObjectFilter createPantheonFilter(String race, PantheonFilter.Detail detailLevel)
{
return new PantheonFilter(race, detailLevel);
}
@@ -813,24 +804,17 @@
* @param filterList the list in which to store the filter
* @param filterDefinitions a list with all the difining strings of the filters to recreate
*/
- private static void parseCustomFilterList(FilterParser parser, List filterList, List filterDefinitions)
+ private static void parseCustomFilterList(FilterParser parser, List<PObjectFilter> filterList, List<String[]> filterDefinitions)
{
- PObjectFilter filter;
-
- String token;
- String[] filterData;
- StringTokenizer tokens;
- StringBuffer filterDefinition;
-
- for (Iterator it = filterDefinitions.iterator(); it.hasNext();)
+ for ( final String[] filterData : filterDefinitions )
{
- filterData = (String[]) it.next();
- filterDefinition = new StringBuffer();
- tokens = new StringTokenizer(filterData[0], "()", true);
+ final StringBuffer filterDefinition = new StringBuffer();
+ // TODO - Create constant for this.
+ final StringTokenizer tokens = new StringTokenizer(filterData[0], "()", true); //$NON-NLS-1$
while (tokens.hasMoreTokens())
{
- token = tokens.nextToken();
+ final String token = tokens.nextToken();
if (FilterParser.isLegalToken(token.trim()))
{
@@ -838,15 +822,15 @@
}
else
{
- filterDefinition.append("[");
+ filterDefinition.append('[');
filterDefinition.append(token);
- filterDefinition.append("]");
+ filterDefinition.append(']');
}
}
try
{
- filter = parser.parse(filterDefinition.toString());
+ PObjectFilter filter = parser.parse(filterDefinition.toString());
if ((filterData[1] + filterData[2]).length() > 0)
{
@@ -858,7 +842,7 @@
catch (FilterParseException ex)
{
//Shouldn't something more be done here?
- Logging.errorPrint("Error in FilterFactory::parseCustomFilterList", ex);
+ Logging.errorPrintLocalised("Errors.FilterFactory.ParseError", ex); //$NON-NLS-1$
}
}
}
@@ -874,31 +858,25 @@
*
* @return a list containing the definitions of yet to be restored custom filters
*/
- private static List preprocessFilterList(String list, String filterString)
+ private static List<String[]> preprocessFilterList(String list, String filterString)
{
- List customFilters = new ArrayList();
+ List<String[]> customFilters = new ArrayList<String[]>();
if (filterString.length() == 0)
{
return customFilters;
}
- String classDef;
- String className;
- String filterName;
- String filterDesc;
+ // TODO - Make constants for this.
+ final StringTokenizer filterTokens = new StringTokenizer(filterString, "[]"); //$NON-NLS-1$
- StringTokenizer tokens;
-
- StringTokenizer filterTokens = new StringTokenizer(filterString, "[]");
-
while (filterTokens.hasMoreTokens())
{
- tokens = new StringTokenizer(filterTokens.nextToken(), "|");
- className = tokens.nextToken();
- classDef = tokens.nextToken();
- filterName = (tokens.hasMoreTokens()) ? tokens.nextToken() : "";
- filterDesc = (tokens.hasMoreTokens()) ? tokens.nextToken() : "";
+ final StringTokenizer tokens = new StringTokenizer(filterTokens.nextToken(), Constants.PIPE);
+ final String className = tokens.nextToken();
+ final String classDef = tokens.nextToken();
+ final String filterName = (tokens.hasMoreTokens()) ? tokens.nextToken() : Constants.EMPTY_STRING;
+ final String filterDesc = (tokens.hasMoreTokens()) ? tokens.nextToken() : Constants.EMPTY_STRING;
/*
* case:
@@ -910,8 +888,10 @@
* we need to have all standard filters restored before
* we restore the custom filters
*/
- if (className.endsWith("CompoundFilter") || className.endsWith("InverseFilter")
- || className.endsWith("NamedFilter"))
+ // TODO - This should be handled better.
+ if (className.endsWith("CompoundFilter") //$NON-NLS-1$
+ || className.endsWith("InverseFilter") //$NON-NLS-1$
+ || className.endsWith("NamedFilter")) //$NON-NLS-1$
{
customFilters.add(new String[]{ classDef, filterName, filterDesc });
}
@@ -935,10 +915,16 @@
{
PCClassFilter()
{
- super("Object", PropertyFactory.getString("in_class"));
+ super(PropertyFactory.getString("Filters.Category.Object"), PropertyFactory.getString("in_class")); //$NON-NLS-1$ //$NON-NLS-2$
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ * @see pcgen.gui.filter.PObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -959,10 +945,16 @@
{
PCTemplateFilter()
{
- super("Object", PropertyFactory.getString("in_template"));
+ super(PropertyFactory.getString("Filters.Category.Object"), //$NON-NLS-1$
+ PropertyFactory.getString("in_template")); //$NON-NLS-1$
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -983,10 +975,16 @@
{
RaceFilter()
{
- super("Object", PropertyFactory.getString("in_race"));
+ super(PropertyFactory.getString("Filters.Category.Object"), //$NON-NLS-1$
+ PropertyFactory.getString("in_race")); //$NON-NLS-1$
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -1012,13 +1010,18 @@
{
private String type;
- SpellTypeFilter(String type)
+ SpellTypeFilter(final String aType)
{
- super(PropertyFactory.getString("in_spellType"), type);
- this.type = type.toUpperCase();
+ super(PropertyFactory.getString("in_spellType"), aType); //$NON-NLS-1$
+ this.type = aType.toUpperCase();
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -1042,40 +1045,82 @@
*/
abstract class AlignmentFilter extends AbstractPObjectFilter
{
- protected String mode;
+ enum Mode {
+ /** Objects with this alignment are allowed */
+ ALLOWED("Filters.Mode.Allowed"), //$NON-NLS-1$
+ /** Objects with this alignment are required */
+ REQUIRED("Filters.Mode.Required"), //$NON-NLS-1$
+ /** Not sure */
+ DEFAULT("Filters.Mode.Default"); //$NON-NLS-1$
+
+ private String theName;
+
+ Mode(final String aResourceId)
+ {
+ theName = PropertyFactory.getString(aResourceId);
+ }
+
+ /**
+ * Returns the display name for this mode.
+ *
+ * @return A string to display for this mode.
+ */
+ @Override
+ public String toString()
+ {
+ return theName;
+ }
+ }
+
+ /** The <tt>Mode</tt> for this filter */
+ protected Mode theMode;
- protected AlignmentFilter(String argCategory, String argName)
+ /**
+ * Construct an AlignmentFilter with the specified category and name.
+ *
+ * @param argCategory The category.
+ * @param argName The name.
+ */
+ protected AlignmentFilter(final String argCategory, final String argName)
{
super(argCategory, argName);
}
+ /**
+ * Tests to see if this Filter applies to this PObject.
+ *
+ * @param pObject The Object to test
+ * @param alignment The alignment index to test for
+ * @return <tt>true</tt> if the object passes.
+ */
protected boolean passesAlignmentPrereqs(PObject pObject, int alignment)
{
StringBuffer prealign;
- if ("allowed".equals(mode))
+ switch ( theMode )
{
- prealign = new StringBuffer("0");
+ case ALLOWED:
+ prealign = new StringBuffer("0"); //$NON-NLS-1$
for (int i = 1; i < SettingsHandler.getGame().getUnmodifiableAlignmentList().size(); i++)
{
- prealign.append(",").append(i);
+ prealign.append(Constants.COMMA).append(i);
}
- }
- else if ("required".equals(mode))
- {
- prealign = new StringBuffer("");
- }
- else
- {
+ break;
+
+ case REQUIRED:
+ prealign = new StringBuffer(Constants.EMPTY_STRING);
+ break;
+
+ default:
return false;
}
-
for (int it = 0; it < pObject.getPreReqCount(); it++)
{
Prerequisite tmp = pObject.getPreReq(it);
- if ("ALIGN".equalsIgnoreCase( tmp.getKind() ))
+ // TODO - Fix prereqs to not use/give out strings.
+ if ("ALIGN".equalsIgnoreCase( tmp.getKind() )) //$NON-NLS-1$
{
prealign = new StringBuffer(tmp.getKey() );
@@ -1097,28 +1142,38 @@
{
private int alignment;
- DeityAlignmentFilter(int alignment)
+ DeityAlignmentFilter(int anAlignment)
{
- this(alignment, "default");
+ this(anAlignment, Mode.DEFAULT);
}
- DeityAlignmentFilter(int alignment, String mode)
+ DeityAlignmentFilter(int anAlignment, Mode mode)
{
- super(PropertyFactory.getString("in_alignLabel"), SettingsHandler.getGame().getLongAlignmentAtIndex(alignment));
- this.alignment = alignment;
- this.mode = mode;
+ super(PropertyFactory.getString("in_alignLabel"), //$NON-NLS-1$
+ SettingsHandler.getGame().getLongAlignmentAtIndex(anAlignment));
+ this.alignment = anAlignment;
+ theMode = mode;
}
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#getCategory()
+ */
+ @Override
public String getCategory()
{
- if ("default".equals(mode))
+ if ( theMode.equals(Mode.DEFAULT) )
{
return super.getCategory();
}
- return super.getCategory() + " (" + mode + ')';
+ return super.getCategory() + " (" + theMode.toString() + ')'; //$NON-NLS-1$
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -1127,7 +1182,7 @@
if (pObject instanceof Deity)
{
- String deityAlign = ((Deity) pObject).getAlignment();
+ final String deityAlign = ((Deity) pObject).getAlignment();
if (deityAlign.equals(SettingsHandler.getGame().getShortAlignmentAtIndex(alignment))
|| deityAlign.equals(SettingsHandler.getGame().getLongAlignmentAtIndex(alignment)))
@@ -1164,13 +1219,18 @@
{
private Domain domain;
- DomainFilter(Domain domain)
+ DomainFilter(final Domain aDomain)
{
- super(PropertyFactory.getString("in_domains"), domain.getKeyName());
- this.domain = domain;
+ super(PropertyFactory.getString("in_domains"), aDomain.getDisplayName()); //$NON-NLS-1$
+ this.domain = aDomain;
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if ((pObject == null) || (domain == null))
{
@@ -1193,31 +1253,43 @@
final class PantheonFilter extends AbstractPObjectFilter
{
+ // TODO - This is really bogus
/** ALL = PropertyFactory.getString("in_allPanth") */
- public static final String ALL = PropertyFactory.getString("in_allPanth");
- /** HIGH = 0 */
- public static final int HIGH = 0;
- /** LOW = 1 */
- public static final int LOW = 1;
+ public static final String ALL = PropertyFactory.getString("in_allPanth"); //$NON-NLS-1$
+
+ enum Detail {
+ /** Provide a high level of detail */
+ HIGH,
+ /** Provide a lower level of detail */
+ LOW;
+ }
+
private String pantheon;
- private int detailLevel;
+ private Detail detailLevel;
- PantheonFilter(String pantheon, int argDetailLevel)
+ PantheonFilter(final String aPantheon, Detail argDetailLevel)
{
super();
this.detailLevel = argDetailLevel;
- this.pantheon = ((this.detailLevel == LOW) ? normalizePantheon(pantheon) : pantheon);
- this.pantheon = ((this.pantheon.equalsIgnoreCase(ALL)) ? ALL : pantheon);
- setCategory(PropertyFactory.getString("in_pantheon")
- + ((detailLevel == LOW) ? (" (" + PropertyFactory.getString("in_general") + ")")
- : (" (" + PropertyFactory.getString("in_specific") + ")")));
+ this.pantheon = ((this.detailLevel == Detail.LOW) ? normalizePantheon(aPantheon) : aPantheon);
+ this.pantheon = ((this.pantheon.equalsIgnoreCase(ALL)) ? ALL : aPantheon);
+ setCategory(PropertyFactory.getString("in_pantheon") //$NON-NLS-1$
+ + ((detailLevel == Detail.LOW)
+ ? String.format("(%1$s)", PropertyFactory.getString("in_general")) //$NON-NLS-1$ //$NON-NLS-2$
+ : String.format("(%1$s)", PropertyFactory.getString("in_specific")))); //$NON-NLS-1$//$NON-NLS-2$
setName(this.pantheon);
- setDescription((this.pantheon.equalsIgnoreCase(ALL)) ? PropertyFactory.getString("in_acceptPantAll")
- : (PropertyFactory.getString("in_acceptPantOne")
- + pantheon + " " + PropertyFactory.getString("in_acceptPantTwo")));
+
+ setDescription((this.pantheon.equalsIgnoreCase(ALL))
+ ? PropertyFactory.getString("in_acceptPantAll") //$NON-NLS-1$
+ : PropertyFactory.getFormattedString("Filters.Pantheon.Description", pantheon)); //$NON-NLS-1$
}
- public boolean accept(PlayerCharacter aPC, PObject pObject)
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
+ public boolean accept(@SuppressWarnings("unused")final PlayerCharacter aPC,
+ final PObject pObject)
{
if (pObject == null)
{
@@ -1233,15 +1305,13 @@
return true;
}
- String tmp;
-
- for (Iterator it = aDeity.getPantheonList().iterator(); it.hasNext();)
+ for ( final String panthName : aDeity.getPantheonList() )
{
- tmp = (String) it.next();
+ String tmp = panthName;
- if (detailLevel == LOW)
+ if (detailLevel == Detail.LOW)
{
- tmp = normalizePantheon(tmp);
+ tmp = normalizePantheon(panthName);
}
if (pantheon.startsWith(tmp))
@@ -1251,8 +1321,6 @@
}
return false;
-
-// return (aDeity.getPantheonList().size() == 0) || aDeity.getPantheonList().contains(pantheon);
}
return true;
@@ -1267,9 +1335,9 @@
{
String work = s;
- if (work.indexOf("(") > 0)
+ if (work.indexOf("(") > 0) //$NON-NLS-1$
{
- work = (new StringTokenizer(work, "()")).nextToken().trim();
+ work = (new StringTokenizer(work, "()")).nextToken().trim(); //$NON-NLS-1$
}
return work;
@@ -1281,34 +1349,48 @@
{
PCAlignmentFilter()
{
- this("default");
+ this(Mode.DEFAULT);
}
- PCAlignmentFilter(String mode)
+ PCAlignmentFilter(final Mode aMode)
{
- super(PropertyFactory.getString("in_alignLabel"), PropertyFactory.getString("in_pc"));
- this.mode = mode;
+ super(PropertyFactory.getString("in_alignLabel"), PropertyFactory.getString("in_pc")); //$NON-NLS-1$//$NON-NLS-2$
+ theMode = aMode;
}
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#getCategory()
+ */
+ @Override
public String getCategory()
{
- if ("default".equals(mode))
+ if (theMode.equals(Mode.DEFAULT))
{
return super.getCategory();
}
- return super.getCategory() + " (" + mode + ")";
+ return super.getCategory() + " (" + theMode.toString() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
+ /**
+ * Returns the name of this filter.
+ *
+ * @see pcgen.gui.filter.AbstractPObjectFilter#getName(pcgen.core.PlayerCharacter)
+ */
+ @Override
public String getName(PlayerCharacter aPC)
{
if (aPC != null)
{
- return super.getName(aPC) + " ("
- + SettingsHandler.getGame().getLongAlignmentAtIndex(aPC.getAlignment()) + ")";
+ return super.getName(aPC) + " (" //$NON-NLS-1$
+ + SettingsHandler.getGame().getLongAlignmentAtIndex(aPC.getAlignment()) + ")"; //$NON-NLS-1$
}
return super.getName(aPC);
}
+ /**
+ * @see pcgen.gui.filter.AbstractPObjectFilter#accept(pcgen.core.PlayerCharacter, pcgen.core.PObject)
+ */
+ @Override
public boolean accept(PlayerCharacter aPC, PObject pObject)
{
if (pObject == null)
@@ -1320,7 +1402,7 @@
if (pObject instanceof Deity)
{
- String deityAlign = ((Deity) pObject).getAlignment();
+ final String deityAlign = ((Deity) pObject).getAlignment();
if (deityAlign.equals(SettingsHandler.getGame().getShortAlignmentAtIndex(alignment))
|| deityAlign.equals(SettingsHandler.getGame().getLongAlignmentAtIndex(alignment)))
@@ -1357,9 +1439,13 @@
{
AutomaticFeatFilter()
{
- super(PropertyFactory.getString("in_feats"), PropertyFa...
[truncated message content] |