<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 5.50.4134.600" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2><FONT size=2>
<P>I know this has been discussed a couple of times, and I see the rationale for 
directly creating Elements, etc., rather than the DOM style 
"Document.createElement(), Document.createAttribute(), etc."</P>
<P>However, I have found a compelling use for "custom" subclasses for Elements. 
We are trying to add application specific metadata to our elements, and without 
Factory capability, need to wrap each element with an ElementDecorator style 
class. This works, but adds some memory overhead, and generally isn't much 
fun.</P>
<P>It is clear that if you are creating documents from scratch, its kind of easy 
to just make a subclass of Element, and say "new CustomElement()". However, the 
main reason we want this stuff is to read existing documents, then as we process 
the documents, to annotate the elements/attributes with app-specific data.</P>
<P>What I propose to get this kind of functionality is to enhace the 
SAXBuilder/DOMBuilder classes to accept either a custom class name or a 
JDOMFactory interface and use these to create the "right" kind of Element on 
demand.</P>
<P>&nbsp;</P>
<P>Consider an app-specific element I want (so that, for example, I can navigate 
my elements and assign some :</P>
<P>public class CustomElement extends Element {</P>
<P>String extraData;</P>
<P>public void setExtraData( String data) {...}</P>
<P>}</P>
<P>1) Custom class approach:</P>
<P>SAXBuilder myBuilder = new SAXBuilder();</P>
<P>myBuilder.setElementClass("com.bar.foo.CustomElement");</P>
<P></P>
<P>2) Factory approach:</P>
<P>SAXBuilder myBuilder = new SAXBuilder();</P>
<P>myBuilder.setElementFactory( new MyElementFactory());</P>
<P></P>
<P>public class MyElementFactory implements JDOMElementFactory {</P>
<P>public Element createElement() { return new CustomElement() ...}</P>
<P>public Element createElement( arg1, arg2.) { ...}</P>
<P>...</P>
<P>}</P>
<P>&nbsp;</P>
<P>Has anyone thought about this approach? I think its a nice compromise between 
imposing a Factory style on JDOM (plus its a bit late now, anyway), and forcing 
users to "deal with it" by writing custom code for this case.</P>
<P>--Dave</P>
<P>David Churchville</P>
<P>dmc@clearlight.com</P></FONT></FONT></DIV></BODY></HTML>