package com.mobilesorcery.sdk.profiling.ui.views; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import com.mobilesorcery.sdk.core.IFilter; import com.mobilesorcery.sdk.profiling.IInvocation; public class InvocationViewerFilter extends ViewerFilter { private IFilter<IInvocation> filter; private boolean recursive; public InvocationViewerFilter(IFilter<IInvocation> filter, boolean recursive) { setDelegatingFilter(filter); this.recursive = recursive; } public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof IInvocation) { IInvocation invocation = (IInvocation) element; boolean result = element != null && (filter == null || filter.accept(invocation)); if (recursive && !result) { for (IInvocation child : invocation.getInvocations()) { if (select(viewer, element, child)) { return true; } } } else { return result; } } return false; } public void setDelegatingFilter(IFilter<IInvocation> filter) { this.filter = filter; } }