[jdom-interest] Moving Subtrees using JDOM

Noam Tamim noamt at yahoo.com
Sun Feb 24 01:34:43 PST 2002


--- Jason Hunter <jhunter at acm.org> wrote:
> > Therefore, a utility method that gets a live FilterList will look
> > something like this one:
> > public static void moveContent(List content, Element to) {
...
> > The remaining problem is handling document fragments that are not
> > stored in one List (and may have different parents). It is not really
> > a problem - it can be solved quite easily in fact - the problem is
> > that one method can't deal with both cases. A method that, unlike
> > the above moveContent(), is given a random list of nodes, must cast
> > and call detach() on every item in it - but the detach must NOT be
> > from the same list (see point a above).
> 
> Ah, filters will soon come to the rescue...

I'm not sure they will solve everything. The Filter.match(Object) 
method, as I understand, works like the FileFilter.accept(File) 
method. So if all objects (strings, elements, etc.) come from
the same FilterList, it'll work fine - for example, if I want
to move all elements that contain "foo" in their name, it'll be
easy to do it;  
But in the case mentioned above, it won't work - 
I want (do I? maybe nobody needs to do it anyway) to be able 
to pass a List of objects from different sources, detach them 
from their parents, and have them adopted by another. If the List
passed to the method is NOT a FilterList, this method will do:

public static void moveObjects(List objects, Element to) {
  Iterator i=objects.iterator();
  List list=to.getContent();
  while (i.hasNext()) {
    list.add(detach(i.next()));
    // detach(Object) is yet another simple utility method,
    // that does instanceof checks, casts, and detaches.
  }
}

Thing is, it is very important that the first moveContent() will
be passed a FilterList, while the second moveObjects() is passed
a (non-Filter)List. A way of enforcing it is asking if the list
is a ContentList.FilterList, but that can only be done by members
of org.jdom, not by external utility methods.


=====
Noam.

__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com



More information about the jdom-interest mailing list