package org.projectusus.ui.dependencygraph.filters;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.zest.core.viewers.EntityConnectionData;
import org.projectusus.ui.dependencygraph.nodes.GraphNode;
public abstract class NodeAndEdgeFilter extends ViewerFilter {
@Override
public boolean select( Viewer viewer, Object parentElement, Object element ) {
Set<GraphNode> others = convertToSetOfGraphNodes( parentElement );
if( element instanceof GraphNode ) {
return select( (GraphNode)element, others );
}
if( element instanceof EntityConnectionData ) {
return select( (EntityConnectionData)element, others );
}
return true;
}
public abstract String getDescription();
protected abstract boolean select( GraphNode node, Set<GraphNode> others );
protected boolean select( EntityConnectionData edge, Set<GraphNode> others ) {
return true;
}
private Set<GraphNode> convertToSetOfGraphNodes( Object parentElement ) {
Set<GraphNode> others = new HashSet<GraphNode>();
if( parentElement instanceof Set ) {
Set<?> parentSet = (Set<?>)parentElement;
for( Object object : parentSet ) {
if( object instanceof GraphNode ) {
others.add( (GraphNode)object );
}
}
}
return others;
}
public void setFilterLimitProvider( IRestrictNodesFilterProvider filterLimitProvider ) {
// no limit
}
}