package net.sourceforge.sqlexplorer.dbstructure.nodes; import net.sourceforge.sqlexplorer.dbproduct.MetaDataSession; import net.sourceforge.sqlexplorer.util.ImageUtil; import net.sourceforge.sqlexplorer.util.TextUtil; import org.eclipse.swt.graphics.Image; public abstract class AbstractFolderNode extends AbstractNode { private String[] _filterExpressions; public AbstractFolderNode(String name) { super(name); } public AbstractFolderNode(String name, MetaDataSession session) { super(name, session); } public AbstractFolderNode(INode parent, String name, MetaDataSession session, String type) { super(parent, name, session, type); setImageKey("Images.closedFolder"); setExpandedImageKey("Images.OpenFolder"); } /** * Override this method to change the image that is displayed for this node * in the database structure outline. */ public Image getImage() { if (get_imageKey() == null) return super.getImage(); return ImageUtil.getImage(get_imageKey()); } public final String getUniqueIdentifier() { return getParent().getName() + '.' + getType(); } /** * Checks if a node name should be filtered. * * @param name to check for filtering * @return true if the name should be filtered */ protected boolean isExcludedByFilter(String name) { if (_filterExpressions == null) { String filter = getSession().getUser().getAlias().getNameFilterExpression(); if (filter != null) { _filterExpressions = filter.split(","); } } if (_filterExpressions == null || _filterExpressions.length == 0) { // no active filter return false; } for (int i = 0; i < _filterExpressions.length; i++) { String regex = _filterExpressions[i].trim(); regex = TextUtil.replaceChar(regex, '?', "."); regex = TextUtil.replaceChar(regex, '*', ".*"); if (regex.length() != 0 && name.matches(regex)) { // we have a match, exclude node.. return true; } } // no match found return false; } public abstract void loadChildren(); }