/******************************************************************************* * Copyright (c) 2011 Tasktop Technologies and others. * 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui.views; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.TaskTask; import org.eclipse.mylyn.internal.tasks.ui.AbstractTaskListFilter; import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.tasks.core.IAttributeContainer; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.ITask; /** * @author Steffen Pingel */ public class PresentationFilter extends AbstractTaskListFilter { private static PresentationFilter instance = new PresentationFilter(); public static PresentationFilter getInstance() { return instance; } private boolean filterHiddenQueries; private boolean filterNonMatching; private PresentationFilter() { updateSettings(); } public boolean isFilterHiddenQueries() { return filterHiddenQueries; } public boolean isFilterNonMatching() { return filterNonMatching; } public boolean select(Object element) { // filter hidden queries if (element instanceof IRepositoryQuery) { if (!filterHiddenQueries) { return true; } return isQueryVisible(element); } // filter repository sub-tasks not connected to queries or categories if (element instanceof TaskTask) { if (!filterNonMatching) { return true; } for (AbstractTaskContainer container : ((AbstractTask) element).getParentContainers()) { // categories and local subtasks are always visible if (container instanceof AbstractTaskCategory) { return true; } // show task if is contained in a query if (container instanceof IRepositoryQuery && (!filterHiddenQueries || isQueryVisible(container))) { return true; } } return false; } return true; } @Override public boolean select(Object parent, Object element) { return select(element); } public void setFilterHiddenQueries(boolean enabled) { this.filterHiddenQueries = enabled; } public void setFilterNonMatching(boolean filterSubtasks) { this.filterNonMatching = filterSubtasks; } public void updateSettings() { setFilterHiddenQueries(TasksUiPlugin.getDefault() .getPreferenceStore() .getBoolean(ITasksUiPreferenceConstants.FILTER_HIDDEN)); setFilterNonMatching(TasksUiPlugin.getDefault() .getPreferenceStore() .getBoolean(ITasksUiPreferenceConstants.FILTER_NON_MATCHING)); } private boolean isQueryVisible(Object element) { return !Boolean.parseBoolean(((IAttributeContainer) element).getAttribute(ITasksCoreConstants.ATTRIBUTE_HIDDEN)); } public boolean isInVisibleQuery(ITask task) { for (AbstractTaskContainer container : ((AbstractTask) task).getParentContainers()) { // categories and local subtasks are always visible if (container instanceof AbstractTaskCategory) { return true; } // show task if is contained in a query if (container instanceof IRepositoryQuery && (!filterHiddenQueries || isQueryVisible(container))) { return true; } } return false; } }