package captor.lib.formtree;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import captor.lib.intl.MyIntl;
import captor.modelsystem.GUI;
import captor.modelsystem.Model;
import captor.windowsystem.main.locationPane.util.FormPath;
/**
* This class is used for form components to interate in the form tree without
* having to know about the DefaultMutableTreeNode graphical interface.
*
* The user can select the lastSelected form or the root form in an easy way.
*
* @author Kicho
*
*/
public class FormTree {
private FormNode root;
private FormNode lastSelected;
private Model model;
private DefaultMutableTreeNode lastSelectedComponent;
public FormTree(Model model) {
this.model = model;
create();
}
//-------------------------------------------------------------------------
/**
* @return Returns the lastSelected.
*/
public FormNode getLastSelected() {
return lastSelected;
}
/**
* @param lastSelected The lastSelected to set.
*/
public void setLastSelected(FormNode lastSelected) {
this.lastSelected = lastSelected;
}
/**
* @return Returns the lastSelectedComponent.
*/
public DefaultMutableTreeNode getLastSelectedComponent() {
return lastSelectedComponent;
}
/**
* @param lastSelectedComponent The lastSelectedComponent to set.
*/
public void setLastSelectedComponent(
DefaultMutableTreeNode lastSelectedComponent) {
this.lastSelectedComponent = lastSelectedComponent;
}
/**
* @return Returns the root.
*/
public FormNode getRoot() {
return root;
}
/**
* @param root The root to set.
*/
public void setRoot(FormNode root) {
this.root = root;
}
//-------------------------------------------------------------------------
public void create() {
GUI gui = model.getGui();
JTree tree = gui.getTree();
lastSelectedComponent = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
root = new FormNode(null);
DefaultMutableTreeNode DMTNroot = (DefaultMutableTreeNode) tree.getModel().getRoot();
root.setNode(DMTNroot);
root.setRoot(true);
if ( DMTNroot != null )
fillNode(DMTNroot, root);
}
//-------------------------------------------------------------------------
public FormNode getLastSelectedPattern() {
return lastSelected;
}
//-------------------------------------------------------------------------
private void fillNode(DefaultMutableTreeNode parentDMTN, FormNode parentNode) {
for ( int i = 0; i < parentDMTN.getChildCount(); i++ ) {
DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) parentDMTN.getChildAt(i);
Object obj = dmtn.getUserObject();
if ( obj instanceof FormPath ) {
FormPath pp = (FormPath) obj;
FormNode pn = new FormNode(parentNode);
pn.setInteraction(pp.getInteraction());
pn.setNode(dmtn);
pn.setCard(pp.getCard());
pn.setFormType(pp.getFormType());
parentNode.addChild(pn);
if ( lastSelectedComponent == dmtn ) {
lastSelected = pn;
}
fillNode(dmtn, pn);
}
else if ( obj instanceof String ) {
String str = (String) obj;
if ( str.substring(0, 11).equals("Interaction") ) {
FormNode pn = new FormNode(root);
pn.setInteraction(parentDMTN.getIndex(dmtn));
pn.setNode(dmtn);
parentNode.addChild(pn);
fillNode(dmtn, pn);
}
}
}
}
//-------------------------------------------------------------------------
public void print() {
print2(root);
}
//-------------------------------------------------------------------------
public void print2(FormNode node) {
printName(node);
for ( int i = 0; i < node.getChildCount(); i++ ) {
FormNode fn = node.getChildAt(i);
print2(fn);
}
}
//-------------------------------------------------------------------------
private void printName(FormNode pn) {
if ( pn == null ) {
System.out.println("Cannot print a null form node.");
return;
}
String out = "";
FormNode parent = pn.getParent();
while ( parent != null ) {
if ( parent.getFormType() != null )
out = "->" + parent.getFormType().getName() + out;
parent = parent.getParent();
}
if ( pn.getFormType() != null )
out = pn.getInteraction() + ":" + out + "->" + pn.getFormType().getName();
else {
DefaultMutableTreeNode nde = pn.getNode();
if ( nde != null ) {
Object obj = nde.getUserObject();
if ( obj instanceof String ) {
out = "Interaction: " + pn.getInteraction();
}
else if ( obj instanceof FormPath ) {
out = MyIntl.NAVIGATOR_ROOT_NAME;
}
}
}
System.out.println("PTree - " + out);
}
//-------------------------------------------------------------------------
}