[jdom-interest] Protected methods to make private
Bradley S. Huffman
hip at csa.cs.okstate.edu
Thu Jun 26 08:52:14 PDT 2003
Laurent Bihanic writes:
> Bradley S. Huffman wrote:
> > Is there some reason we cann't get rid of JDOMResult.FragmentHandler and
> > put the methods getResult and clearResult in SAXHandler?
>
> SAXHandler was not designed to cope this document fragments. Mixing SAXHandle
> r
> with document fragment supports leads to ugly code (like using a dummy root
> element).
> Thus, I don't think it's a good idea to merge FragmentHandler's code unless
> there's a real need to generalize document fragment support.
I don't think the following is any uglier than "if (atRoot) ..." that's
currently in comment(), startElement(), processingInstruction(). And SAXHandler
now becomes reuseable, and JDOMResult becomes simpler :)
private Parent parent = null;
private List result = new ArrayList();
// Return document, or null if results weren't a well-formed document.
public Document getDocument() {
Document document = null;
if (parent instanceof Document) {
document = (Document) parent;
}
return document;
}
// Return current or final results of SAX events as a List. If results
// where a well-formed document then getResult().get(0) will contain
// the document.
public List getResult() {
return result;
}
// Clear all results and reset SAXHandler for reuse
public void clearResult() {
parent == null;
result.clear();
textBuffer.clear();
}
public startDocument() {}
public endDocument() {
parent = factory.document(result); // If document(List) is a constructor
result.clear();
result.add(parent);
}
At end of startElement()
if (parent == null) {
result.add(element);
}
else {
parent.addContent(element);
}
parent = element;
At end of endElement()
parent = ((Element) parent).getParent();
In comment(), processingInstruction(), flushCharacters(), etc.
if (parent == null) {
result.add(...);
}
else {
parent.addContent(...);
}
Brad
More information about the jdom-interest
mailing list