--- Victor Mote <[EMAIL PROTECTED]> wrote:
The current implementation might look like this: public class FObj { .... public int getMaxWidth() { //WARNING -- unchecked or tested!! return properties.get("max-width").getLength().getValue(); }
A subclass that doesn't use max-width might override with: public int getMaxWidth() { return FObj.INVALID_PROPERTY; }
Not to be a pain here--but this just occurred to me--if we are going to do this, it may be cleaner to rely on enumeration constants--that way, we probably can avoid all these "return FObj.INVALID_PROPERTY" overrides in the various FO's for each unsupported property.
This is what I'm thinking (pseudocode here):
In FOObj (similar to your code above):
public int getProperty(int propVal) {
if (validateValidProperty(propVal) == false) {
return FObj.INVALID_PROPERTY;
} return
properties.get("max-width").getLength().getValue();
}
Then we may just need a single validateValidProperty()
method in each FO, that would check if propVal is an
accepted property for that FO.
Each FO's validateValidProperty() would not need to degenerate into a huge list of comparisons like this:
if (prop_val == PROPVAL1 || prop_val == PROPVAL2 ||
... on and on and on)
return true;
else return false;
because I think we can simplify the properties supported by an FO into an integer array of 1's (supported) and 0's (not) so the validate() function for any FO would look like this:
validateValidProperty(int propVal) { return (supportedProps[propVal] == 1); }
(Come to think of it, we can probably keep validateValidProperty() in the FObj base class alone as well!)
Then, finally, we can perhaps expand this array of 1's and 0's to include a 2--"supported by the spec but not yet by FOP", i.e., FObj.NOT_YET_SUPPORTED, and other codes as needed.
Comments?
Alt.design makes *extensive* use of BitSets (don't have the Javadocs handy, but they're in Collections). datastructs.ROBitSet.java is an attempt at a read-only BitSet.
See: fo.PropertySets.java fo.FOPropertySets.java fo.FObjectSets.java
You will probably also want to look at fo.PropNames.java and fo.FObjectNames.java
Peter -- Peter B. West <http://www.powerup.com.au/~pbwest/resume.html>