Moved some stuff into BundleUtil. Added code to support post-parsing
tileset validation. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@700 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileSetBundler.java,v 1.2 2001/11/29 00:13:20 mdb Exp $
|
// $Id: TileSetBundler.java,v 1.3 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.tools.tile.bundle;
|
package com.threerings.media.tools.tile.bundle;
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ import com.samskivert.io.PersistenceException;
|
|||||||
import com.threerings.media.Log;
|
import com.threerings.media.Log;
|
||||||
import com.threerings.media.tile.TileSet;
|
import com.threerings.media.tile.TileSet;
|
||||||
import com.threerings.media.tile.TileSetIDBroker;
|
import com.threerings.media.tile.TileSetIDBroker;
|
||||||
import com.threerings.media.tile.bundle.BundledTileSetRepository;
|
import com.threerings.media.tile.bundle.BundleUtil;
|
||||||
import com.threerings.media.tile.bundle.TileSetBundle;
|
import com.threerings.media.tile.bundle.TileSetBundle;
|
||||||
import com.threerings.media.tools.tile.xml.TileSetRuleSet;
|
import com.threerings.media.tools.tile.xml.TileSetRuleSet;
|
||||||
|
|
||||||
@@ -270,8 +270,7 @@ public class TileSetBundler
|
|||||||
try {
|
try {
|
||||||
// first write a serialized representation of the tileset
|
// first write a serialized representation of the tileset
|
||||||
// bundle object to the bundle jar file
|
// bundle object to the bundle jar file
|
||||||
JarEntry entry = new JarEntry(
|
JarEntry entry = new JarEntry(BundleUtil.METADATA_PATH);
|
||||||
BundledTileSetRepository.METADATA_PATH);
|
|
||||||
jar.putNextEntry(entry);
|
jar.putNextEntry(entry);
|
||||||
ObjectOutputStream oout = new ObjectOutputStream(jar);
|
ObjectOutputStream oout = new ObjectOutputStream(jar);
|
||||||
oout.writeObject(bundle);
|
oout.writeObject(bundle);
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
//
|
||||||
|
// $Id: ObjectTileSetRuleSet.java,v 1.1 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.media.tools.tile.xml;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Point;
|
||||||
|
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
import org.apache.commons.digester.Digester;
|
||||||
|
|
||||||
|
import com.samskivert.util.StringUtil;
|
||||||
|
import com.samskivert.xml.CallMethodSpecialRule;
|
||||||
|
|
||||||
|
import com.threerings.media.tile.TileSet;
|
||||||
|
import com.threerings.media.tile.ObjectTileSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses {@link ObjectTileSet} instances from a tileset description. An
|
||||||
|
* object tileset description looks like so:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* <tileset name="Sample Object Tileset">
|
||||||
|
* <imagePath>path/to/image.png</imagePath>
|
||||||
|
* <!-- the widths (per row) of each tile in pixels -->
|
||||||
|
* <widths>265</widths>
|
||||||
|
* <!-- the heights (per row) of each tile in pixels -->
|
||||||
|
* <heights>224</heights>
|
||||||
|
* <!-- the number of tiles in each row -->
|
||||||
|
* <tileCounts>4</tileCounts>
|
||||||
|
* <!-- the offset in pixels to the upper left tile -->
|
||||||
|
* <offsetPos>0, 0</offsetPos>
|
||||||
|
* <!-- the gap between tiles in pixels -->
|
||||||
|
* <gapSize>0, 0</gapSize>
|
||||||
|
* <!-- the widths (in unit tile count) of the objects -->
|
||||||
|
* <objectWidths>4, 3, 4, 3</objectWidths>
|
||||||
|
* <!-- the heights (in unit tile count) of the objects -->
|
||||||
|
* <objectHeights>3, 4, 3, 4</objectHeights>
|
||||||
|
* </tileset>
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ObjectTileSetRuleSet extends TileSetRuleSet
|
||||||
|
{
|
||||||
|
// documentation inherited
|
||||||
|
public void addRuleInstances (Digester digester)
|
||||||
|
{
|
||||||
|
super.addRuleInstances(digester);
|
||||||
|
|
||||||
|
digester.addRule(
|
||||||
|
_prefix + TILESET_PATH + "/objectWidths",
|
||||||
|
new CallMethodSpecialRule(digester) {
|
||||||
|
public void parseAndSet (String bodyText, Object target)
|
||||||
|
{
|
||||||
|
int[] widths = StringUtil.parseIntArray(bodyText);
|
||||||
|
((ObjectTileSet)target).setObjectWidths(widths);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
digester.addRule(
|
||||||
|
_prefix + TILESET_PATH + "/objectHeights",
|
||||||
|
new CallMethodSpecialRule(digester) {
|
||||||
|
public void parseAndSet (String bodyText, Object target)
|
||||||
|
{
|
||||||
|
int[] heights = StringUtil.parseIntArray(bodyText);
|
||||||
|
((ObjectTileSet)target).setObjectHeights(heights);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
protected Class getTileSetClass ()
|
||||||
|
{
|
||||||
|
return ObjectTileSet.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: SwissArmyTileSetRuleSet.java,v 1.6 2001/11/29 20:39:37 mdb Exp $
|
// $Id: SwissArmyTileSetRuleSet.java,v 1.7 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.tools.tile.xml;
|
package com.threerings.media.tools.tile.xml;
|
||||||
|
|
||||||
@@ -12,6 +12,7 @@ import org.apache.commons.digester.Digester;
|
|||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
import com.samskivert.xml.CallMethodSpecialRule;
|
import com.samskivert.xml.CallMethodSpecialRule;
|
||||||
|
|
||||||
|
import com.threerings.media.Log;
|
||||||
import com.threerings.media.tile.TileSet;
|
import com.threerings.media.tile.TileSet;
|
||||||
import com.threerings.media.tile.SwissArmyTileSet;
|
import com.threerings.media.tile.SwissArmyTileSet;
|
||||||
|
|
||||||
@@ -95,6 +96,36 @@ public class SwissArmyTileSetRuleSet extends TileSetRuleSet
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public boolean isValid (Object target)
|
||||||
|
{
|
||||||
|
SwissArmyTileSet set = (SwissArmyTileSet)target;
|
||||||
|
boolean valid = super.isValid(target);
|
||||||
|
|
||||||
|
// check for a <widths> element
|
||||||
|
if (set.getWidths() == null) {
|
||||||
|
Log.warning("Tile set definition missing valid <widths> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a <heights> element
|
||||||
|
if (set.getHeights() == null) {
|
||||||
|
Log.warning("Tile set definition missing valid <heights> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a <tileCounts> element
|
||||||
|
if (set.getTileCounts() == null) {
|
||||||
|
Log.warning("Tile set definition missing valid <tileCounts> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
protected Class getTileSetClass ()
|
protected Class getTileSetClass ()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: TileSetRuleSet.java,v 1.4 2001/11/21 02:42:15 mdb Exp $
|
// $Id: TileSetRuleSet.java,v 1.5 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.tools.tile.xml;
|
package com.threerings.media.tools.tile.xml;
|
||||||
|
|
||||||
@@ -9,6 +9,11 @@ import org.apache.commons.digester.Digester;
|
|||||||
import org.apache.commons.digester.Rule;
|
import org.apache.commons.digester.Rule;
|
||||||
import org.apache.commons.digester.RuleSetBase;
|
import org.apache.commons.digester.RuleSetBase;
|
||||||
|
|
||||||
|
import com.samskivert.util.StringUtil;
|
||||||
|
import com.samskivert.xml.ValidatedSetNextRule;
|
||||||
|
import com.samskivert.xml.ValidatedSetNextRule.Validator;
|
||||||
|
|
||||||
|
import com.threerings.media.Log;
|
||||||
import com.threerings.media.tile.TileSet;
|
import com.threerings.media.tile.TileSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -16,7 +21,8 @@ import com.threerings.media.tile.TileSet;
|
|||||||
* instance. Derived classes would extend this and add rules for their own
|
* instance. Derived classes would extend this and add rules for their own
|
||||||
* special tilesets.
|
* special tilesets.
|
||||||
*/
|
*/
|
||||||
public abstract class TileSetRuleSet extends RuleSetBase
|
public abstract class TileSetRuleSet
|
||||||
|
extends RuleSetBase implements Validator
|
||||||
{
|
{
|
||||||
/** The component of the digester path that is appended by the tileset
|
/** The component of the digester path that is appended by the tileset
|
||||||
* rule set to match a tileset. This is appended to whatever prefix is
|
* rule set to match a tileset. This is appended to whatever prefix is
|
||||||
@@ -69,6 +75,33 @@ public abstract class TileSetRuleSet extends RuleSetBase
|
|||||||
_prefix + TILESET_PATH + "/imagePath", "setImagePath", 0);
|
_prefix + TILESET_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.
|
||||||
|
*/
|
||||||
|
public boolean isValid (Object target)
|
||||||
|
{
|
||||||
|
TileSet set = (TileSet)target;
|
||||||
|
boolean valid = true;
|
||||||
|
|
||||||
|
// check for the 'name' attribute
|
||||||
|
if (StringUtil.blank(set.getName())) {
|
||||||
|
Log.warning("Tile set definition missing 'name' attribute " +
|
||||||
|
"[set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for an <imagePath> element
|
||||||
|
if (StringUtil.blank(set.getImagePath())) {
|
||||||
|
Log.warning("Tile set definition missing <imagePath> element " +
|
||||||
|
"[set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A tileset rule set will create tilesets of a particular class,
|
* A tileset rule set will create tilesets of a particular class,
|
||||||
* which must be provided by the derived class via this method.
|
* which must be provided by the derived class via this method.
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
//
|
//
|
||||||
// $Id: UniformTileSetRuleSet.java,v 1.5 2001/11/29 20:39:37 mdb Exp $
|
// $Id: UniformTileSetRuleSet.java,v 1.6 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.tools.tile.xml;
|
package com.threerings.media.tools.tile.xml;
|
||||||
|
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
import org.apache.commons.digester.Digester;
|
import org.apache.commons.digester.Digester;
|
||||||
|
|
||||||
|
import com.threerings.media.Log;
|
||||||
import com.threerings.media.tile.TileSet;
|
import com.threerings.media.tile.TileSet;
|
||||||
import com.threerings.media.tile.UniformTileSet;
|
import com.threerings.media.tile.UniformTileSet;
|
||||||
|
|
||||||
@@ -43,6 +44,36 @@ public class UniformTileSetRuleSet extends TileSetRuleSet
|
|||||||
new Class[] { java.lang.Integer.TYPE });
|
new Class[] { java.lang.Integer.TYPE });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public boolean isValid (Object target)
|
||||||
|
{
|
||||||
|
UniformTileSet set = (UniformTileSet)target;
|
||||||
|
boolean valid = super.isValid(target);
|
||||||
|
|
||||||
|
// check for a <width> element
|
||||||
|
if (set.getWidth() == 0) {
|
||||||
|
Log.warning("Tile set definition missing valid <width> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a <height> element
|
||||||
|
if (set.getHeight() == 0) {
|
||||||
|
Log.warning("Tile set definition missing valid <height> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a <tileCount> element
|
||||||
|
if (set.getTileCount() == 0) {
|
||||||
|
Log.warning("Tile set definition missing valid <tileCount> " +
|
||||||
|
"element [set=" + set + "].");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
protected Class getTileSetClass ()
|
protected Class getTileSetClass ()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: XMLTileSetParser.java,v 1.4 2001/11/27 22:06:39 mdb Exp $
|
// $Id: XMLTileSetParser.java,v 1.5 2001/11/29 21:58:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.tools.tile.xml;
|
package com.threerings.media.tools.tile.xml;
|
||||||
|
|
||||||
@@ -16,6 +16,7 @@ import org.apache.commons.digester.Digester;
|
|||||||
import org.apache.commons.digester.Rule;
|
import org.apache.commons.digester.Rule;
|
||||||
|
|
||||||
import com.samskivert.util.ConfigUtil;
|
import com.samskivert.util.ConfigUtil;
|
||||||
|
import com.samskivert.xml.ValidatedSetNextRule;
|
||||||
|
|
||||||
import com.threerings.media.Log;
|
import com.threerings.media.Log;
|
||||||
import com.threerings.media.tile.TileSet;
|
import com.threerings.media.tile.TileSet;
|
||||||
@@ -57,8 +58,10 @@ public class XMLTileSetParser
|
|||||||
|
|
||||||
// add a set next rule which will put tilesets with this prefix
|
// 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
|
// into the array list that'll be on the top of the stack
|
||||||
_digester.addSetNext(prefix + TileSetRuleSet.TILESET_PATH,
|
_digester.addRule(prefix + TileSetRuleSet.TILESET_PATH,
|
||||||
"add", "java.lang.Object");
|
new ValidatedSetNextRule(_digester,
|
||||||
|
"add", Object.class,
|
||||||
|
ruleset));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user