package org.teiid.designer.ui.viewsupport;
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;
public class SingleProjectOrFolderFilter extends CompositeViewerFilter implements UiConstants.Extensions.Explorer {
private ViewerFilter hiddenProjectFilter;
private IProject targetProject;
/**
* Constructs a <code>ModelingResourceFilter</code> that uses the existing resource filter settings.
*
* @since 5.0.2
*/
private SingleProjectOrFolderFilter() {
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 SingleProjectOrFolderFilter( IProject targetProject ) {
this();
this.targetProject = targetProject;
addFilter(new OneProjectFilter());
}
/**
* 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);
}
}
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;
IProject project = (IProject)element;
try {
result = project.isOpen() &&
!project.hasNature(ModelerCore.HIDDEN_PROJECT_NATURE_ID) &&
project.hasNature(ModelerCore.NATURE_ID);
} catch (CoreException e) {
UiConstants.Util.log(e);
}
return result;
}
return true;
}
}
class OneProjectFilter 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;
IProject project = (IProject)element;
try {
result = project.isOpen() &&
!project.hasNature(ModelerCore.HIDDEN_PROJECT_NATURE_ID) &&
project.hasNature(ModelerCore.NATURE_ID) &&
targetProject.getName().equals(project.getName());
} catch (CoreException e) {
UiConstants.Util.log(e);
}
return result;
}
return true;
}
}
}