/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.delegate.directory.complex;
import framework.beans.directory.writer.tree.DirectoryTemplateTreeBean;
import framework.beans.directory.writer.tree.DirectoryTemplateTreeRemote;
import cli_fmw.delegate.directory.*;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.utils.SelectorEditableExceptional;
import framework.beans.directory.writer.tree.TextTemplateTreeDetails;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import framework.beans.directory.DirectoryItemDetails;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Дерево шаблонов
* @author petr
*/
public class DirectoryTextTemplateTree extends
DirectoryRecursive<DirectoryTemplateTreeRemote, DirectoryTextTemplateTreeItem> {
private Map<DirectorySimpleItem, List<DirectoryTextTemplateTreeItem>> cache =
new HashMap<DirectorySimpleItem, List<DirectoryTextTemplateTreeItem>>();
public DirectoryTextTemplateTree() throws ClipsException {
super(DirectoryTemplateTreeBean.class.getSimpleName());
}
@Override
public String getDirectoryTitle() {
return "Дерево шаблонов";
}
@Override
protected DirectoryTextTemplateTreeItem createFromLoadedDetails(DirectoryItemDetails details) {
try {
TextTemplateTreeDetails d = (TextTemplateTreeDetails) details;
return new DirectoryTextTemplateTreeItem(d);
} catch (ClipsException ex) {
MessageBox.showException(ex);
return null;
}
}
/**
* Кеширует и возвращает список дерева шаблонов, принадлежащих данной группе
* @param type
* @return
* @throws ClipsException
*/
public List<DirectoryTextTemplateTreeItem> getItems(DirectorySimpleItem type)
throws ClipsException {
List<DirectoryTextTemplateTreeItem> res = cache.get(type);
if(res == null) {
res = new ArrayList<DirectoryTextTemplateTreeItem>();
SelectorEditableExceptional<DirectoryTextTemplateTreeItem> sel = getItems();
for(int i=0; i<sel.size(); i++) {
DirectoryTextTemplateTreeItem item = sel.get(i);
if(item.inType(type)) {
res.add(item);
}
}
cache.put(type, res);
}
return res;
}
@Override
protected void removeFromExtraCache(DirectoryTextTemplateTreeItem item) {
if(item instanceof DirectoryTextTemplateTreeItem) {
DirectoryTextTemplateTreeItem tree = item;
Iterator<DirectorySimpleItem> keys = cache.keySet().iterator();
while(keys.hasNext()) {
DirectorySimpleItem key = keys.next();
if(tree.inType(key)) {
cache.get(key).remove(tree);
}
}
}
}
@Override
protected void addToExtraCache(DirectoryTextTemplateTreeItem item) {
if(item instanceof DirectoryTextTemplateTreeItem) {
DirectoryTextTemplateTreeItem tree = item;
Iterator<DirectorySimpleItem> keys = cache.keySet().iterator();
while(keys.hasNext()) {
DirectorySimpleItem key = keys.next();
if(tree.inType(key)) {
keys.remove();
}
}
}
}
}