|
From: <jde...@us...> - 2011-01-28 22:53:09
|
Revision: 14468
http://pcgen.svn.sourceforge.net/pcgen/?rev=14468&view=rev
Author: jdempsey
Date: 2011-01-28 22:53:02 +0000 (Fri, 28 Jan 2011)
Log Message:
-----------
CODE-503 - Implement EquipmentSet facade layer
* Rename EquipmentLocFacade to BodyStructureFacade
* Implement canEquip
Modified Paths:
--------------
sandbox/cdomui/code/src/java/pcgen/core/BodyStructure.java
sandbox/cdomui/code/src/java/pcgen/core/DataSet.java
sandbox/cdomui/code/src/java/pcgen/core/character/EquipSlot.java
sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java
sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java
sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java
sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java
sandbox/cdomui/code/src/test/pcgen/core/DataSetTest.java
sandbox/cdomui/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java
Added Paths:
-----------
sandbox/cdomui/code/src/java/pcgen/core/facade/BodyStructureFacade.java
Removed Paths:
-------------
sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentLocFacade.java
Modified: sandbox/cdomui/code/src/java/pcgen/core/BodyStructure.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/BodyStructure.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/BodyStructure.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -22,8 +22,13 @@
*/
package pcgen.core;
-import pcgen.core.facade.EquipmentLocFacade;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import pcgen.core.character.EquipSlot;
+import pcgen.core.facade.BodyStructureFacade;
+
/**
* The Class <code>BodyStructure</code> represents a part of a character's
* body that may hold equipment.
@@ -35,10 +40,12 @@
* @author James Dempsey <jde...@us...>
* @version $Revision$
*/
-public class BodyStructure implements EquipmentLocFacade
+public class BodyStructure implements BodyStructureFacade
{
private String name;
+ private List<EquipSlot> slots;
+ private boolean holdsAnyType;
/**
* Create a new BodyStructure instance.
@@ -46,7 +53,22 @@
*/
public BodyStructure(String name)
{
+ this(name, false);
+ }
+
+ /**
+ * Create a new BodyStructure instance noting if it can hold any type
+ * of equipment item. BodyStructures such as equipped, carried or not
+ * carried may hold items of any type.
+ *
+ * @param name The name of the body structure.
+ * @param holdsAnyType Can this item hold anything at all
+ */
+ public BodyStructure(String name, boolean holdsAnyType)
+ {
this.name = name;
+ slots = new ArrayList<EquipSlot>();
+ this.holdsAnyType = holdsAnyType;
}
/**
@@ -57,6 +79,26 @@
return name;
}
+ /**
+ * Add an EquipSlot to the list of those contained by the body structure.
+ * @param slot The EquipSlot to be added
+ */
+ public void addEquipSlot(EquipSlot slot)
+ {
+ if (!slots.contains(slot))
+ {
+ slots.add(slot);
+ }
+ }
+
+ /**
+ * @return A read-only list of EquipSlots that are contained by this BodyStructure.
+ */
+ public List<EquipSlot> getEquipSlots()
+ {
+ return Collections.unmodifiableList(slots);
+ }
+
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@@ -65,4 +107,12 @@
{
return name;
}
+
+ /**
+ * @return the holdsAnyType
+ */
+ public boolean isHoldsAnyType()
+ {
+ return holdsAnyType;
+ }
}
Modified: sandbox/cdomui/code/src/java/pcgen/core/DataSet.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/DataSet.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/DataSet.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -25,6 +25,7 @@
import pcgen.cdom.base.Constants;
import pcgen.cdom.enumeration.StringKey;
+import pcgen.core.character.EquipSlot;
import pcgen.core.facade.AbilityCategoryFacade;
import pcgen.core.facade.AbilityFacade;
import pcgen.core.facade.AlignmentFacade;
@@ -33,7 +34,7 @@
import pcgen.core.facade.DataSetFacade;
import pcgen.core.facade.DeityFacade;
import pcgen.core.facade.EquipmentFacade;
-import pcgen.core.facade.EquipmentLocFacade;
+import pcgen.core.facade.BodyStructureFacade;
import pcgen.core.facade.GameModeFacade;
import pcgen.core.facade.RaceFacade;
import pcgen.core.facade.SkillFacade;
@@ -64,7 +65,7 @@
private final GameMode gameMode;
private final ListFacade<CampaignFacade> campaigns;
private SkillFacade speakLanguageSkill = null;
- private DefaultListFacade<EquipmentLocFacade> bodyStructures;
+ private DefaultListFacade<BodyStructureFacade> bodyStructures;
private DefaultListFacade<EquipmentFacade> equipment;
public DataSet( LoadContext context, GameMode gameMode, ListFacade<CampaignFacade> campaigns)
@@ -78,7 +79,7 @@
stats = new DefaultListFacade<StatFacade>();
categories = new DefaultListFacade<AbilityCategoryFacade>();
abilityMap = new HashMap<AbilityCategoryFacade, ListFacade<AbilityFacade>>();
- bodyStructures = new DefaultListFacade<EquipmentLocFacade>();
+ bodyStructures = new DefaultListFacade<BodyStructureFacade>();
equipment = new DefaultListFacade<EquipmentFacade>();
this.context = context;
this.gameMode = gameMode;
@@ -121,14 +122,25 @@
categories.addElement(category);
abilityMap.put(category, new DefaultListFacade<AbilityFacade>(Globals.getAbilityList(category)));
}
+ Map<String, BodyStructure> structMap = new HashMap<String, BodyStructure>(Globals.getEquipSlotMap().keySet().size()+3);
for (String name : Globals.getEquipSlotMap().keySet())
{
String displayName = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();
- bodyStructures.addElement(new BodyStructure(displayName));
+ final BodyStructure bodyStructure = new BodyStructure(displayName);
+ bodyStructures.addElement(bodyStructure);
+ structMap.put(name, bodyStructure);
}
- bodyStructures.addElement(new BodyStructure(Constants.S_EQUIPPED));
- bodyStructures.addElement(new BodyStructure(Constants.S_CARRIED));
- bodyStructures.addElement(new BodyStructure(Constants.S_NOTCARRIED));
+ bodyStructures.addElement(new BodyStructure(Constants.S_EQUIPPED, true));
+ bodyStructures.addElement(new BodyStructure(Constants.S_CARRIED, true));
+ bodyStructures.addElement(new BodyStructure(Constants.S_NOTCARRIED, true));
+
+ for (EquipSlot es : SystemCollections.getUnmodifiableEquipSlotList())
+ {
+ if (structMap.containsKey(es.getBodyStructureName()))
+ {
+ structMap.get(es.getBodyStructureName()).addEquipSlot(es);
+ }
+ }
for(Equipment eq : context.ref.getConstructedCDOMObjects(Equipment.class))
{
@@ -218,7 +230,7 @@
/* (non-Javadoc)
* @see pcgen.core.facade.DataSetFacade#getEquipmentLocations()
*/
- public ListFacade<EquipmentLocFacade> getEquipmentLocations()
+ public ListFacade<BodyStructureFacade> getEquipmentLocations()
{
return bodyStructures;
}
Modified: sandbox/cdomui/code/src/java/pcgen/core/character/EquipSlot.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/character/EquipSlot.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/character/EquipSlot.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -121,6 +121,14 @@
}
/**
+ * @return The name of the body structure this slot is located within
+ */
+ public String getBodyStructureName()
+ {
+ return slotNumType;
+ }
+
+ /**
* TRUE if it can contain a type
* @param aTypeList
* @return TRUE if it can contain a type
Copied: sandbox/cdomui/code/src/java/pcgen/core/facade/BodyStructureFacade.java (from rev 14463, sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentLocFacade.java)
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/facade/BodyStructureFacade.java (rev 0)
+++ sandbox/cdomui/code/src/java/pcgen/core/facade/BodyStructureFacade.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -0,0 +1,30 @@
+/*
+ * BodyStructureFacade.java
+ * Copyright 2010 Connor Petty <cpm...@us...>
+ *
+ * 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 on Jul 21, 2010, 10:53:18 PM
+ */
+
+package pcgen.core.facade;
+
+/**
+ *
+ * @author Connor Petty <cpm...@us...>
+ */
+public interface BodyStructureFacade {
+
+}
Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/facade/DataSetFacade.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -58,6 +58,6 @@
public ListFacade<EquipmentFacade> getEquipment();
- public ListFacade<EquipmentLocFacade> getEquipmentLocations();
+ public ListFacade<BodyStructureFacade> getEquipmentLocations();
}
Deleted: sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentLocFacade.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentLocFacade.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentLocFacade.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -1,30 +0,0 @@
-/*
- * EquipmentLocFacade.java
- * Copyright 2010 Connor Petty <cpm...@us...>
- *
- * 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 on Jul 21, 2010, 10:53:18 PM
- */
-
-package pcgen.core.facade;
-
-/**
- *
- * @author Connor Petty <cpm...@us...>
- */
-public interface EquipmentLocFacade {
-
-}
Modified: sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/core/facade/EquipmentSetFacade.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -92,16 +92,16 @@
public static class EquipPath
{
- private EquipmentLocFacade root;
+ private BodyStructureFacade root;
private EquipmentFacade[] path;
- public EquipPath(EquipmentLocFacade root, EquipmentFacade... path)
+ public EquipPath(BodyStructureFacade root, EquipmentFacade... path)
{
this.root = root;
this.path = path;
}
- public EquipmentLocFacade getRoot()
+ public BodyStructureFacade getRoot()
{
return root;
}
Modified: sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -34,11 +34,12 @@
import pcgen.core.Equipment;
import pcgen.core.PlayerCharacter;
import pcgen.core.character.EquipSet;
+import pcgen.core.character.EquipSlot;
import pcgen.core.facade.DataSetFacade;
import pcgen.core.facade.DefaultReferenceFacade;
import pcgen.core.facade.EquipmentFacade;
import pcgen.core.facade.EquipmentListFacade;
-import pcgen.core.facade.EquipmentLocFacade;
+import pcgen.core.facade.BodyStructureFacade;
import pcgen.core.facade.EquipmentSetFacade;
import pcgen.core.facade.ReferenceFacade;
import pcgen.core.facade.util.DefaultListFacade;
@@ -110,7 +111,7 @@
bodyStructMap = new HashMap<String, BodyStructure>();
equipmentList = new EquipmentListFacadeImpl();
//TODO: populate equipmentList
- for (EquipmentLocFacade bodyStruct : dataSet.getEquipmentLocations())
+ for (BodyStructureFacade bodyStruct : dataSet.getEquipmentLocations())
{
bodyStructMap.put(bodyStruct.toString(), (BodyStructure) bodyStruct);
// Add a 'base' equippath entry for each body strcuture
@@ -152,7 +153,7 @@
}
fullPath[fullPath.length-1] = es.getItem();
- EquipmentLocFacade root = bodyStructMap.get(es.toString());
+ BodyStructureFacade root = bodyStructMap.get(es.toString());
EquipPathImpl epi = new EquipPathImpl(root, es.getIdPath(), fullPath);
paths.addElement(epi);
@@ -378,10 +379,54 @@
return equipmentList;
}
+ /* (non-Javadoc)
+ * @see pcgen.core.facade.EquipmentSetFacade#canEquip(pcgen.core.facade.EquipmentSetFacade.EquipPath, pcgen.core.facade.EquipmentFacade)
+ */
public boolean canEquip(EquipPath path, EquipmentFacade equipment)
{
- // TODO Auto-generated method stub
- return true;
+ if (!(equipment instanceof Equipment) || path == null)
+ {
+ return false;
+ }
+ Equipment item = (Equipment) equipment;
+
+ // Is this a container? Then check if the object can fit in
+ EquipmentFacade[] eqPath = path.getPath();
+ if (eqPath != null && eqPath.length > 0)
+ {
+ EquipmentFacade parent = eqPath[eqPath.length - 1];
+ if (parent instanceof Equipment
+ && ((Equipment) parent).isContainer())
+ {
+ // Check if it fits
+ if (((Equipment) parent).canContain(theCharacter, item) == 1)
+ {
+ return true;
+ }
+ }
+ }
+
+ // Is this a body structure? Then check if the object be placed there
+ if (path.getRoot() instanceof BodyStructure
+ && (eqPath == null || eqPath.length == 0))
+ {
+ BodyStructure root = (BodyStructure) path.getRoot();
+ if (root.isHoldsAnyType())
+ {
+ return true;
+ }
+
+ for (EquipSlot slot : root.getEquipSlots())
+ {
+ if (slot.canContainType(item.getType()))
+ {
+ return true;
+ }
+ }
+ }
+
+ // This item can't be equipped in this location
+ return false;
}
public void removeAllEquipment()
@@ -412,7 +457,7 @@
* @param idPath The id of the path as used by the core.
* @param path The path of equipment back to the root (e.g. containers in which this item is placed).
*/
- public EquipPathImpl(EquipmentLocFacade root, String idPath, EquipmentFacade... path)
+ public EquipPathImpl(BodyStructureFacade root, String idPath, EquipmentFacade... path)
{
super(root, path);
this.idPath = idPath;
Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java
===================================================================
--- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/equip/EquipmentTreeTableModel.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -24,17 +24,15 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+
import org.apache.commons.lang.ArrayUtils;
import pcgen.core.facade.CharacterFacade;
import pcgen.core.facade.EquipmentFacade;
-import pcgen.core.facade.EquipmentLocFacade;
import pcgen.core.facade.EquipmentSetFacade;
import pcgen.core.facade.EquipmentSetFacade.EquipPath;
import pcgen.core.facade.EquipmentSetFacade.EquipmentTreeEvent;
import pcgen.core.facade.EquipmentSetFacade.EquipmentTreeListener;
-import pcgen.core.facade.event.ListEvent;
-import pcgen.core.facade.event.ListListener;
import pcgen.gui2.util.treeview.DataView;
import pcgen.gui2.util.treeview.DataViewColumn;
import pcgen.gui2.util.treeview.DefaultDataViewColumn;
@@ -50,20 +48,20 @@
implements DataView<EquipPath>, TreeView<EquipPath>, EquipmentTreeListener
{
//
-// private final ListListener<EquipmentLocFacade> locListener = new ListListener<EquipmentLocFacade>()
+// private final ListListener<BodyStructureFacade> locListener = new ListListener<BodyStructureFacade>()
// {
//
-// public void elementAdded(ListEvent<EquipmentLocFacade> e)
+// public void elementAdded(ListEvent<BodyStructureFacade> e)
// {
// throw new UnsupportedOperationException("Not supported yet.");
// }
//
-// public void elementRemoved(ListEvent<EquipmentLocFacade> e)
+// public void elementRemoved(ListEvent<BodyStructureFacade> e)
// {
// throw new UnsupportedOperationException("Not supported yet.");
// }
//
-// public void elementsChanged(ListEvent<EquipmentLocFacade> e)
+// public void elementsChanged(ListEvent<BodyStructureFacade> e)
// {
// throw new UnsupportedOperationException("Not supported yet.");
// }
Modified: sandbox/cdomui/code/src/test/pcgen/core/DataSetTest.java
===================================================================
--- sandbox/cdomui/code/src/test/pcgen/core/DataSetTest.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/test/pcgen/core/DataSetTest.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -27,7 +27,7 @@
import pcgen.PCGenTestCase;
import pcgen.cdom.base.Constants;
import pcgen.core.facade.CampaignFacade;
-import pcgen.core.facade.EquipmentLocFacade;
+import pcgen.core.facade.BodyStructureFacade;
import pcgen.core.facade.util.DefaultListFacade;
import pcgen.core.facade.util.ListFacade;
@@ -53,7 +53,7 @@
public final void testGetEquipmentLocationsDefaultOnly()
{
DataSet dataset = new DataSet(Globals.getContext(), SettingsHandler.getGame(), new DefaultListFacade<CampaignFacade>());
- ListFacade<EquipmentLocFacade> locations = dataset.getEquipmentLocations();
+ ListFacade<BodyStructureFacade> locations = dataset.getEquipmentLocations();
assertNotNull("Body Strcuture should not be null", locations);
assertTrue("Expected to find Equipped", checkBodyStructurePresent(locations, Constants.S_EQUIPPED));
assertTrue("Expected to find Carried", checkBodyStructurePresent(locations, Constants.S_CARRIED));
@@ -73,7 +73,7 @@
DataSet dataset =
new DataSet(Globals.getContext(), SettingsHandler.getGame(),
new DefaultListFacade<CampaignFacade>());
- ListFacade<EquipmentLocFacade> locations =
+ ListFacade<BodyStructureFacade> locations =
dataset.getEquipmentLocations();
assertNotNull("Body Structure should not be null", locations);
assertTrue(
@@ -94,10 +94,10 @@
* @param name
*/
private boolean checkBodyStructurePresent(
- ListFacade<EquipmentLocFacade> locations, String name)
+ ListFacade<BodyStructureFacade> locations, String name)
{
boolean foundRec = false;
- for (EquipmentLocFacade equipmentLocFacade : locations)
+ for (BodyStructureFacade equipmentLocFacade : locations)
{
if (equipmentLocFacade.toString().equals(name))
{
Modified: sandbox/cdomui/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java
===================================================================
--- sandbox/cdomui/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java 2011-01-28 22:47:09 UTC (rev 14467)
+++ sandbox/cdomui/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java 2011-01-28 22:53:02 UTC (rev 14468)
@@ -30,7 +30,7 @@
import pcgen.core.facade.DataSetFacade;
import pcgen.core.facade.DeityFacade;
import pcgen.core.facade.EquipmentFacade;
-import pcgen.core.facade.EquipmentLocFacade;
+import pcgen.core.facade.BodyStructureFacade;
import pcgen.core.facade.GameModeFacade;
import pcgen.core.facade.RaceFacade;
import pcgen.core.facade.SkillFacade;
@@ -53,12 +53,12 @@
public class MockDataSetFacade implements DataSetFacade
{
- private DefaultListFacade<EquipmentLocFacade> equipmentLoc;
+ private DefaultListFacade<BodyStructureFacade> equipmentLoc;
public MockDataSetFacade()
{
- equipmentLoc = new DefaultListFacade<EquipmentLocFacade>();
+ equipmentLoc = new DefaultListFacade<BodyStructureFacade>();
}
/* (non-Javadoc)
@@ -127,12 +127,12 @@
/* (non-Javadoc)
* @see pcgen.core.facade.DataSetFacade#getEquipmentLocations()
*/
- public ListFacade<EquipmentLocFacade> getEquipmentLocations()
+ public ListFacade<BodyStructureFacade> getEquipmentLocations()
{
return equipmentLoc;
}
- public void addEquipmentLocation(EquipmentLocFacade elf)
+ public void addEquipmentLocation(BodyStructureFacade elf)
{
equipmentLoc.addElement(elf);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|