[jdom-interest] setContent NOT setting parent correctly.

Bradley S. Huffman hip at cs.okstate.edu
Thu Oct 16 10:40:00 PDT 2003


So we need to put a note in the javadocs that all nodes in the supplied
collection must be detached?

Brad

"Dave Bartmess" writes:

> I'm using JDOM b10 (latest from CVS). 
> 
> >From looking at the javadocs, Element.setContent(Collection) SHOULD set
> the parent of each of the passed objects in the Collection to the
> calling instance.
> >From the javadocs:
> In addition, all objects in the supplied List will have their parentage
> set to this element, but the List itself will not be "live" and further
> removals and additions will have no effect on this elements content.
> 
> But, from trying the code below, this is definitely NOT the case.
> Instead, it throws an IllegalAddException because in the calls to (in
> sequence) Element.setContent, ContentList.clearAndSet,
> ContentList.addAll, ContentList.add(Object), and finally
> ContentList.add(Element), nothing resets the passed List members'
> parent, and thus throws the exception.
> 
> Therefore, setContent cannot work, unless you first go into the passed
> Collection, and one by one, set the parent to null for each object.
> 
> Try the simple test class below, and you'll see what I mean:
> 
> import org.jdom.*;
> 
> public class Chance_1 extends Element {
>    public Chance_1() {
>       super("Chance");
>       setDefaults();
>    }
>    public Chance_1(Chance_1 newchance) {
>       super("Chance");
>       setDefaults2();
>       this.setContent(newchance.getContent());
>    }
>    
>    public void setDefaults() {
>       for (int i = 0; i < 10; i++) {
>          Element child = new Element("Test" + i);
>          child.setText("This is child " + i);
>          this.addContent(child);
>       }
>    }
>    
>    public void setDefaults2() {
>       for (int i = 100; i < 110; i++) {
>          Element child = new Element("Test" + i);
>          child.setText("This is child " + i);
>          this.addContent(child);
>       }
>    }
>    
>    public static void main(String args[]) {
>       Chance_1 test = new Chance_1();
>       Chance_1 test2 = new Chance_1(test);
>    }
> }
> 
> -- 
> David A. Bartmess
> Software Configuration Manager / Sr. Software Developer
> eDingo Enterprises
> http://edingo.net
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost
> .com



More information about the jdom-interest mailing list