[jdom-interest] Has any one done a JDOM <> JTreeModel adaptor

adam flinton aflinton at armature.com
Thu May 24 06:58:33 PDT 2001


Could you possibly send me the code?

In essence we have 2 parts of which it appears that you have 1

1) Create a (J)DOM Tree from a DTD. We have this in XML-DBMS already as part
of the "GenerateMapFromDTD"
2) "GUI-ize" the tree & make it easy for Users (which is what you appear to
have).

I have a bunch of code for a generic "Container" which has a Jtree on the
left hand side & a JPanel on the right. You load up stuff like the button
bar etc via a properties file (which can be got via http). I am think about
building a generic JDOM based XML<>GUI which I can **then** extend to use
for Map building (in XML-DBMS). The reason is that @ the moment we have 2
DTD'es (V1 & V2) & I'd like to be able to suport both based upon the DTD.

Other people could then extend the generic XML<>GUI for their own uses.

TIA

Adam



> -----Original Message-----
> From: Kenworthy, Edward [mailto:edward.kenworthy at exchange.co.uk]
> Sent: 24 May 2001 07:29
> To: 'Matthew MacKenzie'; Richard Cook; adam flinton
> Cc: JDOM-Interest
> Subject: RE: [jdom-interest] Has any one done a JDOM <> JTreeModel
> adaptor
> 
> 
> I've actually done this already (except I do not display 
> attributes in the
> tree as I didn't think that was appropriate). But I do have 
> different icons
> for each element and I allow drag and drop (both move and copy).
> 
> The way I did it was by writing my own XMLDocument class to wrap JDoms
> document. This XMLDocument class handles schemas and queries 
> (eg can this
> element be added as a child of this element) and it also 
> supports Document
> Listeners.
> 
> I then have a second class, XMLDocTreeModel which implements 
> TreeModel.
> 
> A third class extends JTree to add in the custom renderers, 
> drag and drop
> support and popup menu.
> 
> -----Original Message-----
> From: Matthew MacKenzie [mailto:matt at xmlglobal.com]
> Sent: 23 May 2001 16:04
> To: Richard Cook; adam flinton
> Cc: JDOM-Interest
> Subject: RE: [jdom-interest] Has any one done a JDOM <> JTreeModel
> adaptor
> 
> 
> I would like a tree model that is capable of showing the 
> whole XML document
> in its entirety, with configurables for assigning icons, 
> etceteras.  I think
> this would be useful because quite often in my job I have to 
> show raw XML in
> a GUI to allow the user to either directly edit a piece of 
> the XML, or use
> DnD to pull pieces of an XML tree into another tree or table. 
>  I think the
> M$ XML Notepad displays XML like this.  Of course, the model 
> should also be
> configurable enough that it can suppress comments, processing 
> instructions,
> etceteras, that the programmer doesn't want displayed.
> 
> I'll probably get around to this sometime, I'll probably 
> start by toying
> around with the Sun examples of doing this with a DOM.
> 
> -Matt
> 
> -----Original Message-----
> From: Richard Cook [mailto:rpc at prismtechnologies.com]
> Sent: Wednesday, May 23, 2001 7:05 AM
> To: Matthew MacKenzie; adam flinton
> Cc: JDOM-Interest
> Subject: RE: [jdom-interest] Has any one done a JDOM <> JTreeModel
> adaptor
> 
> 
> I'm not sure why you want to display the whole document as a 
> tree. Maybe a
> JtreeTable or similar would be better with attrs in the 
> table. For mixed
> content, you could provide some view which would depend on 
> the application
> (show the raw structure, simple concatenation, convert to html, ...)
> 
> getChild() doesn't have to return a JDOMNode() to give a 
> readable String,
> you might find you create new JDOMNodes each time you expand a node
> (consider expand/contract/expand same node), so you might provide some
> variation on singleton if this was the case, or you can just 
> use a different
> cell renderer to display the correct text and return the Element from
> getChild
> 
> class ElementRenderer extends javax.swing.JLabel implements
> javax.swing.tree.TreeCellRenderer {
>    public java.awt.Component getTreeCellRendererComponent(
>       javax.swing.JTree tree,   Object value,   boolean selected,
>       boolean expanded,   boolean leaf,   int row,   boolean hasFocus)
>    {
>          setText(((Element) value).getName());
>          return this;
>    }
> }
> 
> then
>       /* JTree tree */
>       tree.setCellRenderer(new ElementRenderer());
> 
> I'd consider using a real adapter to give a more ideal 
> interface to the JDOM
> document to make the treemodel or whatever easier to write.
> 
> If only someone was working on V2 of a Java XML book with a 
> Jtree example
> running through it.
> 
> 
> -----Original Message-----
> From: jdom-interest-admin at jdom.org 
> [mailto:jdom-interest-admin at jdom.org]On
> Behalf Of Matthew MacKenzie
> Sent: Tuesday, May 22, 2001 9:36 PM
> To: Richard Cook; adam flinton
> Cc: JDOM-Interest
> Subject: RE: [jdom-interest] Has any one done a JDOM <> 
> JTreeModel adaptor
> 
> Richard,
> 
> How about something along these lines:
> 
>  public Object getChild(Object parent, int index) {
>       int atts = ((Element)parent).getAttributes().size();
>       int mcon = ((Element)parent).getMixedContent().size();
>       if (index <= atts) {
>           Attribute att =
> (Attribute)((Element)parent).getAttributes().get(index);
>           return new JDOMNode(att);
>       }
>       else {
>           return new
> JDOMNode(((Element)parent).getMixedContent().get(index-atts));
>       }
>    }
>    public int getChildCount(Object parent) {
>        int atts = ((Element)parent).getAttributes().size();
>        int mcon = ((Element)parent).getMixedContent().size();
>       return atts + mcon;
>    }
> 
> 
> To properly display a whole XML tree, I need to tree the attributes as
> children, which means they have to be figured in to 
> getChildCount.  I also
> need to handle CDATA, Entity, Comment, etceteras..which necessitates
> creating a JDOMNode that can properly wrap all of the objects 
> (Attribute,
> DocType, etc.) and return a human readable toString().  The 
> other problem,
> which I am not sure exists in JDOM, is the occurence of 
> multiple text nodes
> (String objects in JDOM).  It looks stupid in a tree to have them all
> seperated:
> 
> element: Root
>   element: Kid
>     #attr: id=1
>     #text: fubar
>     #cdata: <h1>hello</h1>
>     #text: was his name.
> 
> This is all do-able, and the JDOMNode idea is solid...I just 
> read an example
> of doing this very thing using a DOM node, the only 
> difference is that they
> didn't support attributes.
> 
> Is it against the XML spec to include attribute objects in
> getMixedContent()? I think that would be very useful.
> 
> 
> -Matt
> 
> -----Original Message-----
> From: Richard Cook [mailto:rpc at prismtechnologies.com]
> Sent: Tuesday, May 22, 2001 11:25 AM
> To: Matthew MacKenzie; adam flinton
> Subject: RE: [jdom-interest] Has any one done a JDOM <> JTreeModel
> adaptor
> 
> 
> Expect someone has done it properly. I posted this a few 
> weeks back. The
> tree model asks for children one by one so you can return 
> what you want in
> getChild(). I suspect there is lots of inefficiency because 
> of the partial
> lists built in getChildren().
> 
> 
> Depends on what you need, but say you want to display the 
> elements could you
> not just implement TreeModel:
> 
> class JDOMTreeModel implements TreeModel {
>    private Element root;
>    public JDOMTreeModel(Element root) {
>       this.root = root;
>    }
>    public Object getChild(Object parent, int index) {
>       return ((Element) parent).getChildren().get(index);
>    }
>    public int getChildCount(Object parent) {
>       return ((Element) parent).getChildren().size();
>    }
>    public int getIndexOfChild(Object parent, Object child) {
>       return ((Element) parent).getChildren().indexOf(child);
>    }
>    public Object getRoot() {
>       return root;
>    }
>    public boolean isLeaf(Object node) {
>       return false; // whatever
>    }
>    // etc
> }
> 
> then TreeModel mdl = new JDOMTreeModel(doc.getRootElement());
>      JTree tree = new JTree(mdl)
> 
> 
> saves serialising the JDOM tree or having to walk it. You can 
> change the
> cell renderer to display the element name rather than the 
> toString(), or
> wrap the "Element" in getChild() if necessary [ return new 
> MyNode(((Element)
> parent).getChildren().get(index)) ]. If you need attrs 
> there'd be a bit more
> work.
> 
> -----Original Message-----
> From: jdom-interest-admin at jdom.org 
> [mailto:jdom-interest-admin at jdom.org]On
> Behalf Of Kiss Gábor
> Sent: Thursday, May 03, 2001 8:11 AM
> To: jdom-interest at jdom.org
> Subject: [jdom-interest] jdom tree conversion to a JTree
> 
> 
> How can I convert a jdom tree to a JTree?
> 
> Thanks
> 
> Kiss Gábor
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/yo
> uraddr at yourhos
> t.com
> 
> 
> 
> 
> -----Original Message-----
> From: jdom-interest-admin at jdom.org 
[mailto:jdom-interest-admin at jdom.org]On
Behalf Of Matthew MacKenzie
Sent: Tuesday, May 22, 2001 6:48 PM
To: adam flinton; JDOM Mailing List (E-mail)
Subject: RE: [jdom-interest] Has any one done a JDOM <> JTreeModel adaptor

I wrote the JTreeOutputter for simple display purposes, but lately I have
found the need to keep a JDOM in sync with the tree contents.  I have never
wrote a JTreeModel, is it hard?  I might be able to whip one together fast
depending on the API.

-Matt

-----Original Message-----
From: jdom-interest-admin at jdom.org
[mailto:jdom-interest-admin at jdom.org]On Behalf Of adam flinton
Sent: Tuesday, May 22, 2001 10:07 AM
To: JDOM Mailing List (E-mail)
Subject: [jdom-interest] Has any one done a JDOM <> JTreeModel adaptor


Dear All,

I was just wondering if anyone has done a JDOM tree <> TreeModel adaptor
such that I can use a JDOM Model to directly interface with a JTree.

i.e. I am looking @ doing a designer tool for XML-DBMS & was very impressed
by the **lack of code** within the JTreeOutputter however it strikes me as
silly to store in effect 2 trees which I then have to keep in sync.

Any thoughts?

TIA

Adam Flinton
_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
t.com

_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
t.com

_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
t.com

_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
t.com



More information about the jdom-interest mailing list