/******************************************************************************* * Copyright (c) 2007 Spring IDE Developers * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.ui.workingsets; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.internal.AggregateWorkingSet; import org.springframework.ide.eclipse.core.SpringCoreUtils; import org.springframework.ide.eclipse.ui.SpringUIPlugin; /** * @author Christian Dupuis * @since 2.0 */ @SuppressWarnings("restriction") public class WorkingSetsViewerFilter extends ViewerFilter { private static final String WORKING_SET_ID = SpringUIPlugin.PLUGIN_ID + ".springWorkingSetPage"; private IWorkingSet workingSet; public IWorkingSet getWorkingSet() { return workingSet; } public void setWorkingSet(IWorkingSet workingSet) { this.workingSet = workingSet; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (workingSet == null) { return true; } if (element != null) { if (WORKING_SET_ID.equals(workingSet.getId())) { return isInWorkingSet(parentElement, element); } else { // special handling for Java and Resource working sets; so // that at least the projects are correctly filtered IAdaptable[] elements = getElementsFromWorkingSet(); for (IAdaptable elem : elements) { if (elem instanceof IJavaProject) { return SpringCoreUtils.isSpringProject(((IJavaProject) elem) .getProject()); } else if (elem instanceof IProject) { return SpringCoreUtils.isSpringProject(((IProject) elem)); } } } } return true; } private boolean isInWorkingSet(Object parentElement, Object element) { if (workingSet == null) { return true; } else if (parentElement instanceof IWorkingSet && element instanceof IWorkingSet) { return true; } for (IWorkingSetFilter filter : WorkingSetUtils.getViewerFilter()) { if (filter.isInWorkingSet(getElementsFromWorkingSet(parentElement), parentElement, element)) { return true; } } return false; } private IAdaptable[] getElementsFromWorkingSet(Object parentElement) { if (parentElement instanceof TreePath && ((TreePath) parentElement).getFirstSegment() != null) { Object firstSegment = ((TreePath) parentElement).getFirstSegment(); if (firstSegment instanceof IWorkingSet) { if (workingSet.isAggregateWorkingSet()) { IWorkingSet[] workingSets = ((AggregateWorkingSet) workingSet) .getComponents(); for (IWorkingSet ws : workingSets) { if (ws.equals(firstSegment)) { return ws.getElements(); } } } } } return workingSet.getElements(); } private IAdaptable[] getElementsFromWorkingSet() { return workingSet.getElements(); } }