Carsten Ziegeler wrote:
Sylvain Wallez wrote:Okay. Let me throw in more arguments ;-)
Carsten Ziegeler wrote:I really don't like all these instanceof tests and I think that a source
Cool. But I'm still not that happy with these methods being on Source
itself. What about TraversableSource or HierarchicalSource (I have this
last one ready on my PC with collections) ?
can have children is very common. So if you deal with sources you always
end up with a test if this source contains children or not.
I think this test is much more cleaner/nicer/whatever if I can directly
query the source. An instanceof test for this reason is not appropriate.
How many protocols do we have for which parent and children make sense ? Actually 2 : 'file' and 'slide' (and 'cvs' soon). For other protocols such as 'cocoon', 'resource', 'blob', 'xmldb', 'http', etc, this has no meaning.
How many components do we have that use a source's parent and children ? Actually one : DirectoryGenerator, or its TraversableSource counterpart.
So should we add a lot of methods to Source for these few protocols and components ? I would say no.
Furthermore, I consider that DirectoryGenerator should fail hard if we try to generate from a source that is not traversable (as it does today if it's not given a file). So we should be able to know not only if a Source has children or not, but if it actually supports this feature.
Finally, what about WriteableSource, VersionableSource, LockableSource, InspectableSource, etc ? Should we merge their methods to Source ? If not, then why a particular case for TraversableSource ?
And as far as code cleanliness is concerned, an "instanceof" test seems more OOP to me than a isTraversable() method that tells us if is we have the right to use getParent() and getChildren(). With a separate interface, these methods do not exist if they do not make sense.
Your turn, now ;-)
Sylvain
--
Sylvain Wallez Anyware Technologies
http://www.apache.org/~sylvain http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]