/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.directory.editors.servicePacketTemplate;
import cli_fmw.delegate.directory.DirectoryItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.directory.filtered.DirectoryService;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import clips.delegate.directory.complex.DirectoryServicesGroup;
import clips.delegate.directory.complex.DirectoryServicesGroupItem;
import cli_fmw.utils.Selector;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.main.ClipsException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
/**
*
* @author lacoste
*/
public class TreeModelSelService extends DefaultTreeModel {
Map<DirectoryServicesGroupItem, Selector<DirectoryServiceItem>> services =
new HashMap<DirectoryServicesGroupItem, Selector<DirectoryServiceItem>>();
SelectorEditableExceptional<DirectoryServicesGroupItem> di;
public TreeModelSelService() throws ClipsException {
super(new DefaultMutableTreeNode("Справочник услуг"));
DirectoryServicesGroup directory = (DirectoryServicesGroup)
DirectoryLocator.getDirectory(DirectoryServicesGroup.class, false);
di = directory.getItems();
}
private Selector<DirectoryServiceItem> getServices(DirectoryServicesGroupItem item) throws ClipsException {
Selector<DirectoryServiceItem> ss = services.get(item);
if(ss == null) {
DirectoryService ds = (DirectoryService)
DirectoryLocator.getDirectory(DirectoryService.class, false);
ss = ds.getFilteredItems(item);
services.put(item, ss);
}
return ss;
}
@Override
public Object getChild(Object parent, int index) {
try {
if(parent instanceof DefaultMutableTreeNode) {
return di.get(index);
} else {
DirectoryServicesGroupItem item = (DirectoryServicesGroupItem) parent;
SelectorEditableExceptional<DirectoryServicesGroupItem> it = item.getItems();
if (index < it.size()) {
return it.get(index);
} else {
return getServices(item).get(index - it.size());
}
}
} catch (ClipsException ex) { ex.printStackTrace(); }
return null;
}
@Override
public int getChildCount(Object parent) {
try {
if(parent instanceof DefaultMutableTreeNode) {
return di.size();
} else {
DirectoryServicesGroupItem item = (DirectoryServicesGroupItem) parent;
SelectorEditableExceptional<DirectoryServicesGroupItem> it = item.getItems();
return it.size() + getServices(item).size();
}
} catch (ClipsException ex) {
ex.printStackTrace();
}
return 0;
}
@Override
public boolean isLeaf(Object node) {
if (node instanceof DirectoryServiceItem){
return true;
}
return false;
}
}