package org.rr.jeborker.gui.model;
import java.util.List;
import java.util.logging.Level;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import org.rr.commons.log.LoggerFactory;
import org.rr.commons.mufs.IResourceHandler;
public abstract class AbstractFileTreeModel extends DefaultTreeModel {
public AbstractFileTreeModel(TreeNode root) {
super(root);
}
@Override
public void reload(TreeNode node) {
if(node == null) {
return;
}
if(node instanceof FileSystemNode) {
((FileSystemNode) node).reset();
}
try {
super.reload(node);
} catch(NullPointerException e) {
// happens sometimes if the node to be reloaded is not expanded.
LoggerFactory.getLogger(this).log(Level.WARNING, "NullPointer for node " + node);
} catch(Exception e) {
LoggerFactory.getLogger(this).log(Level.WARNING, "Reload node " + node + " failed.", e);
}
}
/**
* Reloads these node which represents the given {@link IResourceHandler} instance.
* If the node is not opened it will not be refreshed.
*/
public void reload(IResourceHandler resourceToRefresh, List<TreePath> treePathRows) {
for (TreePath pathForRow : treePathRows) {
if(pathForRow != null && pathForRow.getLastPathComponent() instanceof FileSystemNode) {
IResourceHandler resourceHandler = ((FileSystemNode) pathForRow.getLastPathComponent()).getResource();
if(resourceHandler.equals(resourceToRefresh)) {
reload((TreeNode) pathForRow.getLastPathComponent());
}
}
}
}
}