diff --git a/src/java/com/threerings/cast/bundle/tools/ComponentBundlerTask.java b/src/java/com/threerings/cast/bundle/tools/ComponentBundlerTask.java
index e601b16d..7d8036b8 100644
--- a/src/java/com/threerings/cast/bundle/tools/ComponentBundlerTask.java
+++ b/src/java/com/threerings/cast/bundle/tools/ComponentBundlerTask.java
@@ -22,8 +22,6 @@
package com.threerings.cast.bundle.tools;
import java.awt.image.BufferedImage;
-import javax.imageio.ImageIO;
-
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -35,38 +33,37 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
-
-import java.util.jar.JarOutputStream;
import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
import java.util.zip.Deflater;
+import javax.imageio.ImageIO;
+
import org.apache.commons.digester.Digester;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
import com.samskivert.io.PersistenceException;
import com.samskivert.util.ComparableArrayList;
import com.samskivert.util.FileUtil;
import com.samskivert.util.HashIntMap;
import com.samskivert.util.Tuple;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.FileSet;
-
+import com.threerings.cast.ComponentIDBroker;
+import com.threerings.cast.StandardActions;
+import com.threerings.cast.bundle.BundleUtil;
+import com.threerings.cast.tools.xml.ActionRuleSet;
import com.threerings.media.tile.ImageProvider;
import com.threerings.media.tile.SimpleCachingImageProvider;
import com.threerings.media.tile.TileSet;
import com.threerings.media.tile.TrimmedTileSet;
import com.threerings.media.tile.tools.xml.SwissArmyTileSetRuleSet;
-
-import com.threerings.cast.ComponentIDBroker;
-import com.threerings.cast.StandardActions;
-import com.threerings.cast.bundle.BundleUtil;
-import com.threerings.cast.tools.xml.ActionRuleSet;
+import com.threerings.media.tile.tools.xml.TileSetRuleSet;
+import com.threerings.media.tile.tools.xml.UniformTileSetRuleSet;
/**
* Ant task for creating component bundles. This task must be configured
@@ -400,6 +397,16 @@ public class ComponentBundlerTask extends Task
}
}
+ /**
+ * Configures ruleSet and hooks it into digester.
+ */
+ protected static void addTileSetRuleSet (Digester digester, TileSetRuleSet ruleSet)
+ {
+ ruleSet.setPrefix("actions" + ActionRuleSet.ACTION_PATH);
+ digester.addRuleSet(ruleSet);
+ digester.addSetNext(ruleSet.getPath(), "addTileSet", TileSet.class.getName());
+ }
+
/**
* Parses the action tileset definitions and puts them into a hash
* map, keyed on action name.
@@ -407,14 +414,10 @@ public class ComponentBundlerTask extends Task
protected HashMap parseActionTileSets ()
{
Digester digester = new Digester();
- SwissArmyTileSetRuleSet srules = new SwissArmyTileSetRuleSet();
- String aprefix = "actions" + ActionRuleSet.ACTION_PATH;
- srules.setPrefix(aprefix);
-
- digester.addRuleSet(srules);
- digester.addSetProperties(aprefix);
- digester.addSetNext(aprefix + SwissArmyTileSetRuleSet.TILESET_PATH,
- "addTileSet", TileSet.class.getName());
+ digester.addSetProperties("actions" + ActionRuleSet.ACTION_PATH);
+ addTileSetRuleSet(digester, new SwissArmyTileSetRuleSet());
+ addTileSetRuleSet(digester, new UniformTileSetRuleSet("/uniformTileset"));
+
HashMap actsets = new ActionMap();
digester.push(actsets);
diff --git a/src/java/com/threerings/cast/bundle/tools/MetadataBundlerTask.java b/src/java/com/threerings/cast/bundle/tools/MetadataBundlerTask.java
index 39c51b7b..8137bc2f 100644
--- a/src/java/com/threerings/cast/bundle/tools/MetadataBundlerTask.java
+++ b/src/java/com/threerings/cast/bundle/tools/MetadataBundlerTask.java
@@ -28,30 +28,26 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
-
import java.util.ArrayList;
import java.util.HashMap;
-
-import java.util.jar.JarOutputStream;
import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
import java.util.zip.Deflater;
+import org.apache.commons.digester.Digester;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
-import org.apache.commons.digester.Digester;
-
import com.samskivert.util.Tuple;
-
-import com.threerings.media.tile.TileSet;
-import com.threerings.media.tile.tools.xml.SwissArmyTileSetRuleSet;
-
import com.threerings.cast.ActionSequence;
import com.threerings.cast.ComponentClass;
import com.threerings.cast.bundle.BundleUtil;
-
import com.threerings.cast.tools.xml.ActionRuleSet;
import com.threerings.cast.tools.xml.ClassRuleSet;
+import com.threerings.media.tile.TileSet;
+import com.threerings.media.tile.tools.xml.SwissArmyTileSetRuleSet;
+import com.threerings.media.tile.tools.xml.TileSetRuleSet;
+import com.threerings.media.tile.tools.xml.UniformTileSetRuleSet;
/**
* Ant task for creating metadata bundles, which contain action sequence
@@ -150,6 +146,16 @@ public class MetadataBundlerTask extends Task
}
}
+ /**
+ * Configures ruleSet and hooks it into digester.
+ */
+ protected static void addTileSetRuleSet (Digester digester, TileSetRuleSet ruleSet)
+ {
+ ruleSet.setPrefix("actions" + ActionRuleSet.ACTION_PATH);
+ digester.addRuleSet(ruleSet);
+ digester.addSetNext(ruleSet.getPath(), "add", Object.class.getName());
+ }
+
protected Tuple parseActions ()
throws BuildException
{
@@ -158,18 +164,13 @@ public class MetadataBundlerTask extends Task
ActionRuleSet arules = new ActionRuleSet();
arules.setPrefix("actions");
digester.addRuleSet(arules);
- digester.addSetNext("actions" + ActionRuleSet.ACTION_PATH,
- "add", Object.class.getName());
+ digester.addSetNext("actions" + ActionRuleSet.ACTION_PATH, "add", Object.class.getName());
ArrayList actlist = parseList(digester, _actionDef);
// now go through a second time reading the tileset info
digester = new Digester();
- SwissArmyTileSetRuleSet srules = new SwissArmyTileSetRuleSet();
- srules.setPrefix("actions" + ActionRuleSet.ACTION_PATH);
- digester.addRuleSet(srules);
- digester.addSetNext("actions" + ActionRuleSet.ACTION_PATH +
- SwissArmyTileSetRuleSet.TILESET_PATH, "add",
- Object.class.getName());
+ addTileSetRuleSet(digester, new SwissArmyTileSetRuleSet());
+ addTileSetRuleSet(digester, new UniformTileSetRuleSet("/uniformTileset"));
ArrayList setlist = parseList(digester, _actionDef);
// sanity check
diff --git a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java
index 69e50ea8..e04023cd 100644
--- a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java
+++ b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java
@@ -169,8 +169,7 @@ public class TileSetBundler
for (int i = 0; i < msize; i++) {
Mapping map = (Mapping)mappings.get(i);
try {
- TileSetRuleSet ruleset = (TileSetRuleSet)
- Class.forName(map.ruleset).newInstance();
+ TileSetRuleSet ruleset = (TileSetRuleSet)Class.forName(map.ruleset).newInstance();
// configure the ruleset
ruleset.setPrefix(map.path);
@@ -178,8 +177,7 @@ public class TileSetBundler
_digester.addRuleSet(ruleset);
// and add a rule to stick the parsed tilesets onto the
// end of an array list that we'll put on the stack
- _digester.addSetNext(map.path + TileSetRuleSet.TILESET_PATH,
- "add", "java.lang.Object");
+ _digester.addSetNext(ruleset.getPath(), "add", "java.lang.Object");
} catch (Exception e) {
String errmsg = "Unable to create tileset rule set " +
diff --git a/src/java/com/threerings/media/tile/tools/xml/ObjectTileSetRuleSet.java b/src/java/com/threerings/media/tile/tools/xml/ObjectTileSetRuleSet.java
index 0e84c68f..91ba0ced 100644
--- a/src/java/com/threerings/media/tile/tools/xml/ObjectTileSetRuleSet.java
+++ b/src/java/com/threerings/media/tile/tools/xml/ObjectTileSetRuleSet.java
@@ -66,7 +66,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
super.addRuleInstances(digester);
digester.addRule(
- _prefix + TILESET_PATH + "/objectWidths",
+ _path + "/objectWidths",
new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
@@ -76,7 +76,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/objectHeights",
+ _path + "/objectHeights",
new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
@@ -86,7 +86,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/xOrigins", new CallMethodSpecialRule() {
+ _path + "/xOrigins", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] xorigins = StringUtil.parseIntArray(bodyText);
@@ -95,7 +95,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/yOrigins", new CallMethodSpecialRule() {
+ _path + "/yOrigins", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] yorigins = StringUtil.parseIntArray(bodyText);
@@ -104,7 +104,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/priorities",
+ _path + "/priorities",
new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
@@ -114,7 +114,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/zations", new CallMethodSpecialRule() {
+ _path + "/zations", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
String[] zations = StringUtil.parseStringArray(bodyText);
@@ -123,7 +123,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/xspots", new CallMethodSpecialRule() {
+ _path + "/xspots", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
short[] xspots = StringUtil.parseShortArray(bodyText);
@@ -132,7 +132,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/yspots", new CallMethodSpecialRule() {
+ _path + "/yspots", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
short[] yspots = StringUtil.parseShortArray(bodyText);
@@ -141,7 +141,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/sorients", new CallMethodSpecialRule() {
+ _path + "/sorients", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
ObjectTileSet set = (ObjectTileSet)target;
@@ -165,7 +165,7 @@ public class ObjectTileSetRuleSet extends SwissArmyTileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/constraints",
+ _path + "/constraints",
new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
diff --git a/src/java/com/threerings/media/tile/tools/xml/SwissArmyTileSetRuleSet.java b/src/java/com/threerings/media/tile/tools/xml/SwissArmyTileSetRuleSet.java
index 11bed8c3..292cc60b 100644
--- a/src/java/com/threerings/media/tile/tools/xml/SwissArmyTileSetRuleSet.java
+++ b/src/java/com/threerings/media/tile/tools/xml/SwissArmyTileSetRuleSet.java
@@ -60,7 +60,7 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
super.addRuleInstances(digester);
digester.addRule(
- _prefix + TILESET_PATH + "/widths", new CallMethodSpecialRule() {
+ _path + "/widths", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] widths = StringUtil.parseIntArray(bodyText);
@@ -69,7 +69,7 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/heights", new CallMethodSpecialRule() {
+ _path + "/heights", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] heights = StringUtil.parseIntArray(bodyText);
@@ -78,7 +78,7 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/tileCounts",
+ _path + "/tileCounts",
new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
@@ -88,7 +88,7 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/offsetPos", new CallMethodSpecialRule() {
+ _path + "/offsetPos", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] values = StringUtil.parseIntArray(bodyText);
@@ -103,7 +103,7 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
});
digester.addRule(
- _prefix + TILESET_PATH + "/gapSize", new CallMethodSpecialRule() {
+ _path + "/gapSize", new CallMethodSpecialRule() {
public void parseAndSet (String bodyText, Object target)
{
int[] values = StringUtil.parseIntArray(bodyText);
diff --git a/src/java/com/threerings/media/tile/tools/xml/TileSetRuleSet.java b/src/java/com/threerings/media/tile/tools/xml/TileSetRuleSet.java
index f8c5cdc6..13b863c6 100644
--- a/src/java/com/threerings/media/tile/tools/xml/TileSetRuleSet.java
+++ b/src/java/com/threerings/media/tile/tools/xml/TileSetRuleSet.java
@@ -45,6 +45,13 @@ public abstract class TileSetRuleSet
* a matched tileset. */
public static final String TILESET_PATH = "/tileset";
+ /**
+ * @return The full path used to match tilesets. Consists of the prefile plus _tilesetPath.
+ */
+ public String getPath(){
+ return _path;
+ }
+
/**
* Instructs the tileset rule set to match tilesets with the supplied
* prefix. For example, passing a prefix of
@@ -65,7 +72,7 @@ public abstract class TileSetRuleSet
*/
public void setPrefix (String prefix)
{
- _prefix = prefix;
+ _path = prefix + _tilesetPath;
}
/**
@@ -79,21 +86,18 @@ public abstract class TileSetRuleSet
{
// this creates the appropriate instance when we encounter a
// tag
- digester.addObjectCreate(_prefix + TILESET_PATH,
- getTileSetClass().getName());
+ digester.addObjectCreate(_path, getTileSetClass().getName());
// grab the name attribute from the tag
- digester.addSetProperties(_prefix + TILESET_PATH);
+ digester.addSetProperties(_path);
// grab the image path from an element
- digester.addCallMethod(
- _prefix + TILESET_PATH + "/imagePath", "setImagePath", 0);
+ digester.addCallMethod(_path + "/imagePath", "setImagePath", 0);
}
/**
- * The ruleset can be provided to a {@link ValidatedSetNextRule} to
- * ensure that the tileset was fully parsed before doing something
- * with it.
+ * The ruleset can be provided to a {@link ValidatedSetNextRule} to ensure that the tileset
+ * was fully parsed before doing something with it.
*/
public boolean isValid (Object target)
{
@@ -123,6 +127,9 @@ public abstract class TileSetRuleSet
*/
protected abstract Class getTileSetClass ();
- /** The prefix at which me match our tilesets. */
- protected String _prefix;
+ /** The tileset path we append to the prefix to get the full path. */
+ protected String _tilesetPath = TILESET_PATH;
+
+ /** The full path at which me match our tilesets. */
+ protected String _path;
}
diff --git a/src/java/com/threerings/media/tile/tools/xml/UniformTileSetRuleSet.java b/src/java/com/threerings/media/tile/tools/xml/UniformTileSetRuleSet.java
index f21fccba..c5e258fc 100644
--- a/src/java/com/threerings/media/tile/tools/xml/UniformTileSetRuleSet.java
+++ b/src/java/com/threerings/media/tile/tools/xml/UniformTileSetRuleSet.java
@@ -42,16 +42,22 @@ import com.threerings.media.tile.UniformTileSet;
*/
public class UniformTileSetRuleSet extends TileSetRuleSet
{
+ public UniformTileSetRuleSet(){
+ this(TILESET_PATH);
+ }
+
+ public UniformTileSetRuleSet(String tilesetPath){
+ _tilesetPath = tilesetPath;
+ }
+
// documentation inherited
public void addRuleInstances (Digester digester)
{
super.addRuleInstances(digester);
- digester.addCallMethod(
- _prefix + TILESET_PATH + "/width", "setWidth", 0,
+ digester.addCallMethod(_path + "/width", "setWidth", 0,
new Class[] { java.lang.Integer.TYPE });
- digester.addCallMethod(
- _prefix + TILESET_PATH + "/height", "setHeight", 0,
+ digester.addCallMethod(_path + "/height", "setHeight", 0,
new Class[] { java.lang.Integer.TYPE });
}
diff --git a/src/java/com/threerings/media/tile/tools/xml/XMLTileSetParser.java b/src/java/com/threerings/media/tile/tools/xml/XMLTileSetParser.java
index 5490ed29..4cd15436 100644
--- a/src/java/com/threerings/media/tile/tools/xml/XMLTileSetParser.java
+++ b/src/java/com/threerings/media/tile/tools/xml/XMLTileSetParser.java
@@ -75,7 +75,7 @@ public class XMLTileSetParser
// add a set next rule which will put tilesets with this prefix
// into the array list that'll be on the top of the stack
- _digester.addRule(prefix + TileSetRuleSet.TILESET_PATH,
+ _digester.addRule(ruleset.getPath(),
new ValidatedSetNextRule("add", Object.class,
ruleset));
}
diff --git a/src/java/com/threerings/miso/tile/tools/xml/BaseTileSetRuleSet.java b/src/java/com/threerings/miso/tile/tools/xml/BaseTileSetRuleSet.java
index 5ce41d85..070d87ad 100644
--- a/src/java/com/threerings/miso/tile/tools/xml/BaseTileSetRuleSet.java
+++ b/src/java/com/threerings/miso/tile/tools/xml/BaseTileSetRuleSet.java
@@ -45,10 +45,8 @@ public class BaseTileSetRuleSet extends SwissArmyTileSetRuleSet
{
super.addRuleInstances(digester);
- digester.addRule(
- _prefix + TILESET_PATH + "/passable", new CallMethodSpecialRule() {
- public void parseAndSet (String bodyText, Object target)
- {
+ digester.addRule(_path + "/passable", new CallMethodSpecialRule() {
+ public void parseAndSet (String bodyText, Object target) {
int[] values = StringUtil.parseIntArray(bodyText);
boolean[] passable = new boolean[values.length];
for (int i = 0; i < values.length; i++) {