/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.viewsupport; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.ui.UiConstants; import org.teiid.designer.ui.common.util.UiUtil; import org.teiid.designer.ui.common.viewsupport.CompositeViewerFilter; /** * A <code>CompositeViewerFilter</code> that filters resources based on the filter settings in the * {@link org.teiid.designer.ui.explorer.ModelExplorerResourceNavigator}. Add other * {@link org.eclipse.jface.viewers.ViewerFilter}s if needed. By default, hidden projects are not shown. * * @since 8.0 */ public class ModelingResourceFilter extends CompositeViewerFilter implements UiConstants.Extensions.Explorer { private ViewerFilter hiddenProjectFilter; private SingleProjectFilter singleProjectFilter; /** * Constructs a <code>ModelingResourceFilter</code> that uses the existing resource filter settings. * * @since 5.0.2 */ public ModelingResourceFilter() { addFilter(UiUtil.getResourceFilter(VIEW)); setShowHiddenProjects(false); } /** * Constructs a <code>ModelingResourceFilter</code> and adds the specified filter to it's collection of filters. * * @param theFilter the filter being included * @since 5.0.2 */ public ModelingResourceFilter( ViewerFilter theFilter ) { this(); addFilter(theFilter); } /** * After calling this method, remember to refresh the viewer. * * @param showHiddenProjects <code>true</code> if hidden projects should be shown * @since 5.5.3 */ public void setShowHiddenProjects( boolean showHiddenProjects ) { if (showHiddenProjects) { if (this.hiddenProjectFilter != null) { removeFilter(this.hiddenProjectFilter); this.hiddenProjectFilter = null; } } else if (this.hiddenProjectFilter == null) { this.hiddenProjectFilter = new HiddenProjectFilter(); addFilter(this.hiddenProjectFilter); } } /** * After calling this method, remember to refresh the viewer. * * @param showHiddenProjects <code>true</code> if hidden projects should be shown * @since 5.5.3 */ public void setSingleProjectProject( IProject project ) { if( project == null ) { if( singleProjectFilter != null ) { removeFilter(this.singleProjectFilter); } this.singleProjectFilter = null; } else { if( this.singleProjectFilter == null ) { this.singleProjectFilter = new SingleProjectFilter(project); addFilter(this.singleProjectFilter); } else { this.singleProjectFilter.setProject(project); } } } class HiddenProjectFilter extends ViewerFilter { /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) */ @Override public boolean select( Viewer viewer, Object parentElement, Object element ) { if (element instanceof IProject) { boolean result = false; try { result = ((IProject)element).isOpen() && !((IProject)element).hasNature(ModelerCore.HIDDEN_PROJECT_NATURE_ID) && ((IProject)element).hasNature(ModelerCore.NATURE_ID); } catch (CoreException e) { UiConstants.Util.log(e); } return result; } return true; } } class SingleProjectFilter extends ViewerFilter { IProject singleProject; SingleProjectFilter(IProject project) { super(); this.singleProject = project; } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) */ @Override public boolean select( Viewer viewer, Object parentElement, Object element ) { if (element instanceof IProject) { if( singleProject == null) return true; IProject proj = (IProject)element; if( proj.getName().equals(singleProject.getName()) ) return true; } else if( element instanceof IContainer) { if( singleProject == null) return true; IProject proj = ((IContainer)element).getProject(); if( proj.getName().equals(singleProject.getName()) ) return true; } return false; } public void setProject(IProject project) { singleProject = project; } } }