/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.utils.intelliwriter.templates;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplateTree;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplateTreeItem;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.main.ClipsException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
/**
*
* @author axe
*/
public class IntelliTemplateTreeModel implements TreeModel {
private DirectorySimpleItem type;
private String root = "Шаблоны";
private List<TreeModelListener> tml = new ArrayList<TreeModelListener>();
public IntelliTemplateTreeModel(DirectorySimpleItem type) {
this.type = type;
}
@Override
public Object getChild(Object parent, int index) {
if(parent == root) {
try {
DirectoryTextTemplateTree dir = (DirectoryTextTemplateTree)
DirectoryLocator.getDirectory(DirectoryTextTemplateTree.class, false);
List<DirectoryTextTemplateTreeItem> items = dir.getItems(type);
return items.get(index);
} catch (ClipsException ex) {
ex.printStackTrace();
}
} else if(parent instanceof DirectoryTextTemplateTreeItem) {
// try {
DirectoryTextTemplateTreeItem item = (DirectoryTextTemplateTreeItem) parent;
SelectorEditableExceptional<DirectoryTextTemplateTreeItem> sel = item.getItems();
return sel.get(index);
/* } catch (ClipsException ex) {
ex.printStackTrace();
}*/
}
return null;
}
@Override
public int getChildCount(Object parent) {
if(parent == root) {
try {
DirectoryTextTemplateTree dir = (DirectoryTextTemplateTree)
DirectoryLocator.getDirectory(DirectoryTextTemplateTree.class, false);
List<DirectoryTextTemplateTreeItem> items = dir.getItems(type);
return items.size();
} catch (ClipsException ex) {
ex.printStackTrace();
}
} else if(parent instanceof DirectoryTextTemplateTreeItem) {
//try {
DirectoryTextTemplateTreeItem item = (DirectoryTextTemplateTreeItem) parent;
SelectorEditableExceptional<DirectoryTextTemplateTreeItem> sel = item.getItems();
return sel.size();
/*} catch (ClipsException ex) {
ex.printStackTrace();
}*/
}
return 0;
}
@Override
public boolean isLeaf(Object node) {
return false;
}
@Override
public Object getRoot() {
return root;
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
Object node = path.getLastPathComponent();
if(node!= null &&
node != root) {
if(node instanceof DirectoryTextTemplateTreeItem) {
try {
DirectoryTextTemplateTreeItem item = (DirectoryTextTemplateTreeItem) node;
item.setTitle(newValue.toString());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}
}
@Override
public int getIndexOfChild(Object parent, Object child) {
if(child != null && parent != null) {
if(parent == root) {
try {
DirectoryTextTemplateTree dir = (DirectoryTextTemplateTree)
DirectoryLocator.getDirectory(DirectoryTextTemplateTree.class, false);
List<DirectoryTextTemplateTreeItem> items = dir.getItems(type);
return items.indexOf(child);
} catch (ClipsException ex) {
ex.printStackTrace();
}
} else if(parent instanceof DirectoryTextTemplateTreeItem) {
// try {
DirectoryTextTemplateTreeItem item = (DirectoryTextTemplateTreeItem) parent;
SelectorEditableExceptional<DirectoryTextTemplateTreeItem> sel = item.getItems();
for(int i=0; i<sel.size(); i++) {
if(sel.get(i) == child) {
return i;
}
}
/* } catch (ClipsException ex) {
ex.printStackTrace();
}*/
}
}
return -1;
}
@Override
public void addTreeModelListener(TreeModelListener l) {
if(tml.indexOf(l) == -1) {
tml.add(l);
}
}
@Override
public void removeTreeModelListener(TreeModelListener l) {
tml.remove(l);
}
public void nodeChanged(TreePath path) {
Iterator<TreeModelListener> it = tml.iterator();
while(it.hasNext()) {
it.next().treeNodesChanged(new TreeModelEvent(this, path));
}
}
public void nodesInserted(TreePath path) {
Iterator<TreeModelListener> it = tml.iterator();
while(it.hasNext()) {
it.next().treeNodesInserted(new TreeModelEvent(this, path));
}
}
public void nodesRemoved(TreePath path) {
Iterator<TreeModelListener> it = tml.iterator();
while(it.hasNext()) {
it.next().treeNodesRemoved(new TreeModelEvent(this, path));
}
}
public void structureChanged(TreePath path) {
Iterator<TreeModelListener> it = tml.iterator();
while(it.hasNext()) {
it.next().treeStructureChanged(new TreeModelEvent(type, path));
}
}
}