--- Finn Bock <[EMAIL PROTECTED]> wrote:
> [Glen Mazza]
>
> > Could you explain why we have the datatypes
> instances
> > to begin with--what they're for? I'm not sure
> what
> > their precise purpose is.
>
> The datatypes are the slightly more complex property
> values. The
> property classes wraps the datatype in order to give
> the datatypes a
> common interface.
>
Thanks for taking the time to explain this. My
comprehension has increased quite a bit.
>
> Some of the concrete property subclasses wraps
> standard java types such
> as int, char, String, Number and Vector and for
> these properties we
> still need a wrapper. But some of them, marked with
> (*), wraps a
> datatype which is under our own control and for
> those properties, the
> datatype class could also function as the property
> wrapper.
>
I now understand what you're saying, and like the
simplification you're suggesting. The current naming
however, is probably preferable--the word "Property"
figures quite highly in the spec! Do you have a
problem remaining with it?
For those (*)'ed datatypes, can't we get rid of the
datatype instead by rolling that datatype into the
equivalently named Property? In turn, have *those*
Properties extend AbstractProperty as you suggest.
Actually, I guess I'm just saying the same thing
you're suggesting, except to use "--Property" instead
of "--Type" for everything.
> > Offhand, it's doesn't seem natural to go without
> > Property objects--they are kept in the
> PropertyList
> > and indexed by the property ID in that list.
>
> That would still be the case. Everything stored in
> the PropertyList
> implements the Property interface.
But only a few of them would extend AbstractProperty,
correct--or would you plan on having all do so?
> I remember two cases, but I can only find one at the
> moment: In
> Title.setup():
>
> prop =
> this.propertyList.get(PR_BASELINE_SHIFT);
> if (prop instanceof LengthProperty) {
> Length bShift = prop.getLength();
> } else if (prop instanceof EnumProperty) {
> int bShift = prop.getEnum();
> }
>
> This would stay the same, except LengthProperty
> would be called
> LengthType and EnumProperty would be called
> EnumType. Except that the
> code above should IMHO use "if (prop.getLength() !=
> null)" to test for a
> length type instead of using instanceof.
>
Well, instanceof is slower I believe, but better
self-commenting. If you switch to this type of
conditional for speed, just add a short comment of its
purpose--here, to determine if we are working with an
EnumProperty or a LengthProperty.
(Another option, BTW, if you think it will cut down on
buggy programming, is to have the classes implementing
this Property interface supply unsupported interface
methods a la Peter's Read-Only BitSet[1], i.e., throw
exceptions. We can revisit this topic later if code
errors are becoming a problem.)
Thanks,
Glen
[1]
http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-fop/src/java/org/apache/fop/datastructs/Attic/ROBitSet.java?content-type=text%2Fplain&rev=1.1.2.2
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free web site building tool. Try it!
http://webhosting.yahoo.com/ps/sb/