<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel adaptor</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>I did an attempt to write a JTreeModel based on JDOM long back when JDOM was in very initial stage.&nbsp; I posted my TreeModel etc to this group.&nbsp; Some one can look back to the list archives and search for TreeModel you can get them.&nbsp; If needed I can post them again.</FONT></P>

<P><FONT SIZE=2>Kesav Kumar</FONT>
<BR><FONT SIZE=2>Software Engineer</FONT>
<BR><FONT SIZE=2>Voquette, Inc.</FONT>
<BR><FONT SIZE=2>650 356 3740</FONT>
<BR><FONT SIZE=2><A HREF="mailto:kesavk@voquette.com">mailto:kesavk@voquette.com</A></FONT>
<BR><FONT SIZE=2><A HREF="http://www.voquette.com" TARGET="_blank">http://www.voquette.com</A></FONT>
<BR><FONT SIZE=2>Voquette...Delivering Sound Information</FONT>
</P>
<BR>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Matthew MacKenzie [<A HREF="mailto:matt@xmlglobal.com">mailto:matt@xmlglobal.com</A>]</FONT>
<BR><FONT SIZE=2>Sent: Wednesday, May 23, 2001 8:04 AM</FONT>
<BR><FONT SIZE=2>To: Richard Cook; adam flinton</FONT>
<BR><FONT SIZE=2>Cc: JDOM-Interest</FONT>
<BR><FONT SIZE=2>Subject: RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel</FONT>
<BR><FONT SIZE=2>adaptor</FONT>
</P>
<BR>

<P><FONT SIZE=2>I would like a tree model that is capable of showing the whole XML document</FONT>
<BR><FONT SIZE=2>in its entirety, with configurables for assigning icons, etceteras.&nbsp; I think</FONT>
<BR><FONT SIZE=2>this would be useful because quite often in my job I have to show raw XML in</FONT>
<BR><FONT SIZE=2>a GUI to allow the user to either directly edit a piece of the XML, or use</FONT>
<BR><FONT SIZE=2>DnD to pull pieces of an XML tree into another tree or table.&nbsp; I think the</FONT>
<BR><FONT SIZE=2>M$ XML Notepad displays XML like this.&nbsp; Of course, the model should also be</FONT>
<BR><FONT SIZE=2>configurable enough that it can suppress comments, processing instructions,</FONT>
<BR><FONT SIZE=2>etceteras, that the programmer doesn't want displayed.</FONT>
</P>

<P><FONT SIZE=2>I'll probably get around to this sometime, I'll probably start by toying</FONT>
<BR><FONT SIZE=2>around with the Sun examples of doing this with a DOM.</FONT>
</P>

<P><FONT SIZE=2>-Matt</FONT>
</P>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Richard Cook [<A HREF="mailto:rpc@prismtechnologies.com">mailto:rpc@prismtechnologies.com</A>]</FONT>
<BR><FONT SIZE=2>Sent: Wednesday, May 23, 2001 7:05 AM</FONT>
<BR><FONT SIZE=2>To: Matthew MacKenzie; adam flinton</FONT>
<BR><FONT SIZE=2>Cc: JDOM-Interest</FONT>
<BR><FONT SIZE=2>Subject: RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel</FONT>
<BR><FONT SIZE=2>adaptor</FONT>
</P>
<BR>

<P><FONT SIZE=2>I'm not sure why you want to display the whole document as a tree. Maybe a</FONT>
<BR><FONT SIZE=2>JtreeTable or similar would be better with attrs in the table. For mixed</FONT>
<BR><FONT SIZE=2>content, you could provide some view which would depend on the application</FONT>
<BR><FONT SIZE=2>(show the raw structure, simple concatenation, convert to html, ...)</FONT>
</P>

<P><FONT SIZE=2>getChild() doesn't have to return a JDOMNode() to give a readable String,</FONT>
<BR><FONT SIZE=2>you might find you create new JDOMNodes each time you expand a node</FONT>
<BR><FONT SIZE=2>(consider expand/contract/expand same node), so you might provide some</FONT>
<BR><FONT SIZE=2>variation on singleton if this was the case, or you can just use a different</FONT>
<BR><FONT SIZE=2>cell renderer to display the correct text and return the Element from</FONT>
<BR><FONT SIZE=2>getChild</FONT>
</P>

<P><FONT SIZE=2>class ElementRenderer extends javax.swing.JLabel implements</FONT>
<BR><FONT SIZE=2>javax.swing.tree.TreeCellRenderer {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public java.awt.Component getTreeCellRendererComponent(</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.swing.JTree tree,&nbsp;&nbsp; Object value,&nbsp;&nbsp; boolean selected,</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean expanded,&nbsp;&nbsp; boolean leaf,&nbsp;&nbsp; int row,&nbsp;&nbsp; boolean hasFocus)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setText(((Element) value).getName());</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>}</FONT>
</P>

<P><FONT SIZE=2>then</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* JTree tree */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tree.setCellRenderer(new ElementRenderer());</FONT>
</P>

<P><FONT SIZE=2>I'd consider using a real adapter to give a more ideal interface to the JDOM</FONT>
<BR><FONT SIZE=2>document to make the treemodel or whatever easier to write.</FONT>
</P>

<P><FONT SIZE=2>If only someone was working on V2 of a Java XML book with a Jtree example</FONT>
<BR><FONT SIZE=2>running through it.</FONT>
</P>
<BR>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: jdom-interest-admin@jdom.org [<A HREF="mailto:jdom-interest-admin@jdom.org">mailto:jdom-interest-admin@jdom.org</A>]On</FONT>
<BR><FONT SIZE=2>Behalf Of Matthew MacKenzie</FONT>
<BR><FONT SIZE=2>Sent: Tuesday, May 22, 2001 9:36 PM</FONT>
<BR><FONT SIZE=2>To: Richard Cook; adam flinton</FONT>
<BR><FONT SIZE=2>Cc: JDOM-Interest</FONT>
<BR><FONT SIZE=2>Subject: RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel adaptor</FONT>
</P>

<P><FONT SIZE=2>Richard,</FONT>
</P>

<P><FONT SIZE=2>How about something along these lines:</FONT>
</P>

<P><FONT SIZE=2>&nbsp;public Object getChild(Object parent, int index) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int atts = ((Element)parent).getAttributes().size();</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mcon = ((Element)parent).getMixedContent().size();</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (index &lt;= atts) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute att =</FONT>
<BR><FONT SIZE=2>(Attribute)((Element)parent).getAttributes().get(index);</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new JDOMNode(att);</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new</FONT>
<BR><FONT SIZE=2>JDOMNode(((Element)parent).getMixedContent().get(index-atts));</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public int getChildCount(Object parent) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int atts = ((Element)parent).getAttributes().size();</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mcon = ((Element)parent).getMixedContent().size();</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return atts + mcon;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
</P>
<BR>

<P><FONT SIZE=2>To properly display a whole XML tree, I need to tree the attributes as</FONT>
<BR><FONT SIZE=2>children, which means they have to be figured in to getChildCount.&nbsp; I also</FONT>
<BR><FONT SIZE=2>need to handle CDATA, Entity, Comment, etceteras..which necessitates</FONT>
<BR><FONT SIZE=2>creating a JDOMNode that can properly wrap all of the objects (Attribute,</FONT>
<BR><FONT SIZE=2>DocType, etc.) and return a human readable toString().&nbsp; The other problem,</FONT>
<BR><FONT SIZE=2>which I am not sure exists in JDOM, is the occurence of multiple text nodes</FONT>
<BR><FONT SIZE=2>(String objects in JDOM).&nbsp; It looks stupid in a tree to have them all</FONT>
<BR><FONT SIZE=2>seperated:</FONT>
</P>

<P><FONT SIZE=2>element: Root</FONT>
<BR><FONT SIZE=2>&nbsp; element: Kid</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; #attr: id=1</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; #text: fubar</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; #cdata: &lt;h1&gt;hello&lt;/h1&gt;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; #text: was his name.</FONT>
</P>

<P><FONT SIZE=2>This is all do-able, and the JDOMNode idea is solid...I just read an example</FONT>
<BR><FONT SIZE=2>of doing this very thing using a DOM node, the only difference is that they</FONT>
<BR><FONT SIZE=2>didn't support attributes.</FONT>
</P>

<P><FONT SIZE=2>Is it against the XML spec to include attribute objects in</FONT>
<BR><FONT SIZE=2>getMixedContent()? I think that would be very useful.</FONT>
</P>
<BR>

<P><FONT SIZE=2>-Matt</FONT>
</P>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Richard Cook [<A HREF="mailto:rpc@prismtechnologies.com">mailto:rpc@prismtechnologies.com</A>]</FONT>
<BR><FONT SIZE=2>Sent: Tuesday, May 22, 2001 11:25 AM</FONT>
<BR><FONT SIZE=2>To: Matthew MacKenzie; adam flinton</FONT>
<BR><FONT SIZE=2>Subject: RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel</FONT>
<BR><FONT SIZE=2>adaptor</FONT>
</P>
<BR>

<P><FONT SIZE=2>Expect someone has done it properly. I posted this a few weeks back. The</FONT>
<BR><FONT SIZE=2>tree model asks for children one by one so you can return what you want in</FONT>
<BR><FONT SIZE=2>getChild(). I suspect there is lots of inefficiency because of the partial</FONT>
<BR><FONT SIZE=2>lists built in getChildren().</FONT>
</P>
<BR>

<P><FONT SIZE=2>Depends on what you need, but say you want to display the elements could you</FONT>
<BR><FONT SIZE=2>not just implement TreeModel:</FONT>
</P>

<P><FONT SIZE=2>class JDOMTreeModel implements TreeModel {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; private Element root;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public JDOMTreeModel(Element root) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.root = root;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public Object getChild(Object parent, int index) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((Element) parent).getChildren().get(index);</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public int getChildCount(Object parent) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((Element) parent).getChildren().size();</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public int getIndexOfChild(Object parent, Object child) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((Element) parent).getChildren().indexOf(child);</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public Object getRoot() {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return root;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; public boolean isLeaf(Object node) {</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; // whatever</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; // etc</FONT>
<BR><FONT SIZE=2>}</FONT>
</P>

<P><FONT SIZE=2>then TreeModel mdl = new JDOMTreeModel(doc.getRootElement());</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp; JTree tree = new JTree(mdl)</FONT>
</P>
<BR>

<P><FONT SIZE=2>saves serialising the JDOM tree or having to walk it. You can change the</FONT>
<BR><FONT SIZE=2>cell renderer to display the element name rather than the toString(), or</FONT>
<BR><FONT SIZE=2>wrap the &quot;Element&quot; in getChild() if necessary [ return new MyNode(((Element)</FONT>
<BR><FONT SIZE=2>parent).getChildren().get(index)) ]. If you need attrs there'd be a bit more</FONT>
<BR><FONT SIZE=2>work.</FONT>
</P>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: jdom-interest-admin@jdom.org [<A HREF="mailto:jdom-interest-admin@jdom.org">mailto:jdom-interest-admin@jdom.org</A>]On</FONT>
<BR><FONT SIZE=2>Behalf Of Kiss Gábor</FONT>
<BR><FONT SIZE=2>Sent: Thursday, May 03, 2001 8:11 AM</FONT>
<BR><FONT SIZE=2>To: jdom-interest@jdom.org</FONT>
<BR><FONT SIZE=2>Subject: [jdom-interest] jdom tree conversion to a JTree</FONT>
</P>
<BR>

<P><FONT SIZE=2>How can I convert a jdom tree to a JTree?</FONT>
</P>

<P><FONT SIZE=2>Thanks</FONT>
</P>

<P><FONT SIZE=2>Kiss Gábor</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>To control your jdom-interest membership:</FONT>
<BR><FONT SIZE=2><A HREF="http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos" TARGET="_blank">http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos</A></FONT>
<BR><FONT SIZE=2>t.com</FONT>
</P>
<BR>
<BR>
<BR>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: jdom-interest-admin@jdom.org [<A HREF="mailto:jdom-interest-admin@jdom.org">mailto:jdom-interest-admin@jdom.org</A>]On</FONT>
<BR><FONT SIZE=2>Behalf Of Matthew MacKenzie</FONT>
<BR><FONT SIZE=2>Sent: Tuesday, May 22, 2001 6:48 PM</FONT>
<BR><FONT SIZE=2>To: adam flinton; JDOM Mailing List (E-mail)</FONT>
<BR><FONT SIZE=2>Subject: RE: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel adaptor</FONT>
</P>

<P><FONT SIZE=2>I wrote the JTreeOutputter for simple display purposes, but lately I have</FONT>
<BR><FONT SIZE=2>found the need to keep a JDOM in sync with the tree contents.&nbsp; I have never</FONT>
<BR><FONT SIZE=2>wrote a JTreeModel, is it hard?&nbsp; I might be able to whip one together fast</FONT>
<BR><FONT SIZE=2>depending on the API.</FONT>
</P>

<P><FONT SIZE=2>-Matt</FONT>
</P>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: jdom-interest-admin@jdom.org</FONT>
<BR><FONT SIZE=2>[<A HREF="mailto:jdom-interest-admin@jdom.org">mailto:jdom-interest-admin@jdom.org</A>]On Behalf Of adam flinton</FONT>
<BR><FONT SIZE=2>Sent: Tuesday, May 22, 2001 10:07 AM</FONT>
<BR><FONT SIZE=2>To: JDOM Mailing List (E-mail)</FONT>
<BR><FONT SIZE=2>Subject: [jdom-interest] Has any one done a JDOM &lt;&gt; JTreeModel adaptor</FONT>
</P>
<BR>

<P><FONT SIZE=2>Dear All,</FONT>
</P>

<P><FONT SIZE=2>I was just wondering if anyone has done a JDOM tree &lt;&gt; TreeModel adaptor</FONT>
<BR><FONT SIZE=2>such that I can use a JDOM Model to directly interface with a JTree.</FONT>
</P>

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

<P><FONT SIZE=2>Any thoughts?</FONT>
</P>

<P><FONT SIZE=2>TIA</FONT>
</P>

<P><FONT SIZE=2>Adam Flinton</FONT>
<BR><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>To control your jdom-interest membership:</FONT>
<BR><FONT SIZE=2><A HREF="http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos" TARGET="_blank">http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos</A></FONT>
<BR><FONT SIZE=2>t.com</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>To control your jdom-interest membership:</FONT>
<BR><FONT SIZE=2><A HREF="http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos" TARGET="_blank">http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos</A></FONT>
<BR><FONT SIZE=2>t.com</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>To control your jdom-interest membership:</FONT>
<BR><FONT SIZE=2><A HREF="http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos" TARGET="_blank">http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos</A></FONT>
<BR><FONT SIZE=2>t.com</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>To control your jdom-interest membership:</FONT>
<BR><FONT SIZE=2><A HREF="http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com" TARGET="_blank">http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com</A></FONT>
</P>

</BODY>
</HTML>