/* * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. * * This software is open source. * See the bottom of this file for the licence. */ package view.swing; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; import javax.swing.tree.TreeNode; import org.dom4j.Branch; import org.dom4j.CharacterData; import org.dom4j.Node; /** *
* Node4DOM
implémente l'interface Swing TreeNode
* afin de faire le lien entre les noeuds XML DOM4J
et un
* TreeModel Swing
*
* Il s'agit d'une fusion des classes BranchTreeNode
et
* LeafTreeNode
permetant une mise à jour de l'affichage du
* JTree
lors d'une suppression via l'ajout des methodes
* removeFromParent()
et remove()
*
Node
de DOM4J
encapsulé
*/
protected Node xmlNode;
public Node4DOM() {
}
/**
* Constructeur prenant en parametre un noeud DOM4J
*
* @param xmlNode Noeud Node
de DOM4J
*/
public Node4DOM( Node xmlNode ) {
this.xmlNode = xmlNode;
}
/**
* Constructeur prenant en parametre le parent du noeud et un
* noeud DOM4J
*
* @param parent Parent de ce noeud
* @param xmlNode Noeud Node
de DOM4J
*/
public Node4DOM( Node4DOM parent, Node xmlNode ){
this.parent = parent;
this.xmlNode = xmlNode;
}
/**
* @see TreeNode#getChildAt(int)
*/
public TreeNode getChildAt( int index ) {
return (TreeNode)getChildList().get( index );
}
/**
* @see TreeNode#getChildCount()
*/
public int getChildCount() {
return getChildList().size();
}
/**
* @see TreeNode#getParent()
*/
public TreeNode getParent() {
return parent;
}
/**
* @see TreeNode#getIndex(javax.swing.tree.TreeNode)
*/
public int getIndex( TreeNode node ) {
if( node == null )
throw new IllegalArgumentException( "Null 'node' argument.");
return children.indexOf( node );
}
/**
* @see TreeNode#getAllowsChildren()
*/
public boolean getAllowsChildren() {
return ( xmlNode instanceof Branch );
}
/**
* @see TreeNode#isLeaf()
*/
public boolean isLeaf() {
return getChildList().size() <= 0;
}
/**
* @see TreeNode#children()
*/
public Enumeration children() {
return Collections.enumeration( children );
}
/**
* Fixe le parent du noeud
*
* @param parent Parent du noeud
*/
public void setParent( Node4DOM parent ){
this.parent = parent;
}
@Override
public String toString() {
// Si le noeud est une branche
if( xmlNode instanceof Branch ){
return xmlNode.getName();
}
// Si le noeud est une feuille
else{
String text = xmlNode.getText();
return ( text != null ) ? text.trim() : "";
}
}
/**
* Donne le noeud Node
de DOM4J
encapsulé
* @return Noeud Node
de DOM4J
encapsulé
*/
public Node getXmlNode(){
return xmlNode;
}
/**
* Donne la liste des fils du noeud avec une creation a retardement
* (Pattern Lazy Loading)
*
* @return Liste des fils du noeud
*/
protected List getChildList(){
if ( children == null )
children = createChildList();
return children;
}
/**
* Creation de la liste des fils du noeud, reflet des fils du noeud
* xmlNode
encapsulé
*
* @return Liste des fils du noeud
*/
private List