diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java | 550 |
1 files changed, 0 insertions, 550 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java deleted file mode 100644 index 261c5913b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java +++ /dev/null @@ -1,550 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 Mylyn project committers 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 - *******************************************************************************/ - -package org.eclipse.mylyn.internal.tasks.ui.workingsets; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.CheckStateChangedEvent; -import org.eclipse.jface.viewers.CheckboxTreeViewer; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.ICheckStateListener; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; -import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; -import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; -import org.eclipse.mylyn.internal.tasks.ui.views.TaskRepositoryLabelProvider; -import org.eclipse.mylyn.tasks.core.IRepositoryQuery; -import org.eclipse.mylyn.tasks.core.TaskRepository; -import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider; -import org.eclipse.mylyn.tasks.ui.TasksUi; -import org.eclipse.mylyn.tasks.ui.TasksUiImages; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.BusyIndicator; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.IWorkingSetManager; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.IWorkingSetPage; -import org.eclipse.ui.internal.IWorkbenchGraphicConstants; -import org.eclipse.ui.internal.WorkbenchImages; -import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.model.WorkbenchLabelProvider; - -/** - * Adapted from org.eclipse.ui.internal.ide.dialogs.ResourceWorkingSetPage - * - * @author Eugene Kuleshov - * @author Mik Kersten - */ -public class TaskWorkingSetPage extends WizardPage implements IWorkingSetPage { - - private static final String LABEL_TASKS = "Tasks"; - - private final static int SIZING_SELECTION_WIDGET_WIDTH = 50; - - private final static int SIZING_SELECTION_WIDGET_HEIGHT = 200; - - private Text text; - - private CheckboxTreeViewer treeViewer; - - private IWorkingSet workingSet; - - private final WorkingSetPageContentProvider workingSetPageContentProvider = new WorkingSetPageContentProvider(); - - private boolean firstCheck = false; - - private final class WorkingSetPageContentProvider implements ITreeContentProvider { - - public Object[] getChildren(Object parentElement) { - if (parentElement instanceof List) { - List<IAdaptable> taskRepositoriesContainers = new ArrayList<IAdaptable>(); - List<IAdaptable> resourcesRepositoriesContainers = new ArrayList<IAdaptable>(); - - for (AbstractTaskContainer category : TasksUiInternal.getTaskList().getCategories()) { - taskRepositoriesContainers.add(category); - } - - IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - Set<IProject> unmappedProjects = new HashSet<IProject>(); - for (Object container : (List<?>) parentElement) { - if (container instanceof TaskRepository) { - // NOTE: looking down, high complexity - if (hasChildren(container)) { - taskRepositoriesContainers.add((TaskRepository) container); - } - - // NOTE: O(n^2) complexity, could fix - Set<IProject> mappedProjects = new HashSet<IProject>(); - - for (IProject project : projects) { - TaskRepository taskRepository = TasksUiPlugin.getDefault() - .getRepositoryForResource(project); - if (container.equals(taskRepository)) { - mappedProjects.add(project); - } else if (taskRepository == null) { - unmappedProjects.add(project); - } - } - if (!mappedProjects.isEmpty()) { - resourcesRepositoriesContainers.add(new TaskRepositoryProjectMapping( - (TaskRepository) container, mappedProjects)); - } - } - } - resourcesRepositoriesContainers.addAll(unmappedProjects); - return new Object[] { new ElementCategory(LABEL_TASKS, taskRepositoriesContainers), - new ElementCategory("Resources", resourcesRepositoriesContainers) }; - } else if (parentElement instanceof TaskRepository) { - List<IAdaptable> taskContainers = new ArrayList<IAdaptable>(); - for (AbstractTaskContainer element : TasksUiPlugin.getTaskListManager() - .getTaskList() - .getRepositoryQueries(((TaskRepository) parentElement).getRepositoryUrl())) { - if (element instanceof IRepositoryQuery) { - taskContainers.add(element); - } - } - - return taskContainers.toArray(); - } else if (parentElement instanceof TaskRepositoryProjectMapping) { - return ((TaskRepositoryProjectMapping) parentElement).getProjects().toArray(); - } else if (parentElement instanceof ElementCategory) { - return ((ElementCategory) parentElement).getChildren(parentElement); - } else { - return new Object[0]; - } - } - - public boolean hasChildren(Object element) { - return getChildren(element).length > 0; - } - - public Object[] getElements(Object element) { - return getChildren(element); - } - - public Object getParent(Object element) { - return null; - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - } - - private class TaskRepositoryProjectMapping extends PlatformObject { - - private final TaskRepository taskRepository; - - private final Set<IProject> projects; - - public TaskRepositoryProjectMapping(TaskRepository taskRepository, Set<IProject> mappedProjects) { - this.taskRepository = taskRepository; - this.projects = mappedProjects; - } - - public Set<IProject> getProjects() { - return projects; - } - - public TaskRepository getTaskRepository() { - return taskRepository; - } - } - - class ElementCategory extends PlatformObject implements IWorkbenchAdapter { - - private final String label; - - private final List<IAdaptable> children; - - public ElementCategory(String label, List<IAdaptable> children) { - this.label = label; - this.children = children; - } - - public Object[] getChildren(Object o) { - return children.toArray(); - } - - public ImageDescriptor getImageDescriptor(Object object) { - return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_WORKING_SETS); - } - - public String getLabel(Object o) { - return label; - } - - public Object getParent(Object o) { - return null; - } - - } - - class AggregateLabelProvider implements ILabelProvider { - - private final TaskElementLabelProvider taskLabelProvider = new TaskElementLabelProvider(false); - - private final TaskRepositoryLabelProvider taskRepositoryLabelProvider = new TaskRepositoryLabelProvider(); - - private final WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); - - public Image getImage(Object element) { - if (element instanceof AbstractTaskContainer) { - return taskLabelProvider.getImage(element); - } else if (element instanceof TaskRepository) { - return taskRepositoryLabelProvider.getImage(element); - } else if (element instanceof TaskRepositoryProjectMapping) { - return getImage(((TaskRepositoryProjectMapping) element).getTaskRepository()); - } else { - return workbenchLabelProvider.getImage(element); - } - } - - public String getText(Object element) { - if (element instanceof AbstractTaskContainer) { - return taskLabelProvider.getText(element); - } else if (element instanceof TaskRepository) { - return taskRepositoryLabelProvider.getText(element); - } else if (element instanceof TaskRepositoryProjectMapping) { - return getText(((TaskRepositoryProjectMapping) element).getTaskRepository()); - } else { - return workbenchLabelProvider.getText(element); - } - } - - public void addListener(ILabelProviderListener listener) { - } - - public void dispose() { - } - - public boolean isLabelProperty(Object element, String property) { - return false; - } - - public void removeListener(ILabelProviderListener listener) { - } - } - - class CustomSorter extends ViewerSorter { - - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - if (e1 instanceof TaskRepository || e1 instanceof TaskRepositoryProjectMapping) { - return -1; - } else if (e2 instanceof TaskRepository || e2 instanceof TaskRepositoryProjectMapping) { - return 1; - } else if (e1 instanceof ElementCategory && ((ElementCategory) e1).getLabel(e1).equals(LABEL_TASKS)) { - return -1; - } else if (e2 instanceof ElementCategory && ((ElementCategory) e1).getLabel(e1).equals(LABEL_TASKS)) { - return 1; - } else { - return super.compare(viewer, e1, e2); - } - } - } - - public TaskWorkingSetPage() { - super("taskWorkingSetPage", "Select Working Set Elements", null); - setDescription("" + "When this Working Set is selected views will be filtered just to show only\n" - + "these elements if the Window Working Set is enabled in the view (default)."); - setImageDescriptor(TasksUiImages.BANNER_WORKING_SET); - } - - public void finish() { - Object[] elements = treeViewer.getCheckedElements(); - Set<IAdaptable> validElements = new HashSet<IAdaptable>(); - for (Object element : elements) { - if (element instanceof AbstractTaskContainer || element instanceof IProject) { - validElements.add((IAdaptable) element); - } - } - - addUnmatchedCategories(validElements); - - if (workingSet == null) { - IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager(); - workingSet = workingSetManager.createWorkingSet(getWorkingSetName(), - validElements.toArray(new IAdaptable[validElements.size()])); - } else { - workingSet.setName(getWorkingSetName()); - workingSet.setElements(validElements.toArray(new IAdaptable[validElements.size()])); - } - } - - private void addUnmatchedCategories(Set<IAdaptable> validElements) { - HashSet<AbstractTaskContainer> orphanContainers = new HashSet<AbstractTaskContainer>(); - for (IAdaptable element : validElements) { - if (element instanceof IRepositoryQuery) { - IRepositoryQuery query = (IRepositoryQuery) element; - if (query.getRepositoryUrl() != null) { - AbstractTaskContainer orphansContainer = TasksUiPlugin.getTaskListManager() - .getTaskList() - .getUnmatchedContainer(query.getRepositoryUrl()); - if (orphansContainer != null) { - orphanContainers.add(orphansContainer); - } - } - } - } - validElements.addAll(orphanContainers); - } - - public IWorkingSet getSelection() { - return workingSet; - } - - public void setSelection(IWorkingSet workingSet) { - this.workingSet = workingSet; - if (getShell() != null && text != null) { - firstCheck = true; - initializeCheckedState(); - text.setText(workingSet.getName()); - } - } - - private String getWorkingSetName() { - return text.getText(); - } - - public void createControl(Composite parent) { - initializeDialogUnits(parent); - - Composite composite = new Composite(parent, SWT.NULL); - - GridLayout layout = new GridLayout(); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - setControl(composite); - - // PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IIDEHelpContextIds.WORKING_SET_RESOURCE_PAGE); - Label label = new Label(composite, SWT.WRAP); - label.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_message); - label.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL - | GridData.VERTICAL_ALIGN_CENTER)); - - text = new Text(composite, SWT.SINGLE | SWT.BORDER); - text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); - text.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - validateInput(); - } - }); - text.setFocus(); - // text.setBackground(FieldAssistColors.getRequiredFieldBackgroundColor(text)); - - label = new Label(composite, SWT.WRAP); - label.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_label_tree); - label.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL - | GridData.VERTICAL_ALIGN_CENTER)); - - treeViewer = new CheckboxTreeViewer(composite); - treeViewer.setUseHashlookup(true); - treeViewer.setContentProvider(workingSetPageContentProvider); - - treeViewer.setLabelProvider(new DecoratingLabelProvider(new AggregateLabelProvider(), PlatformUI.getWorkbench() - .getDecoratorManager() - .getLabelDecorator())); - -// tree.setLabelProvider(new TaskElementLabelProvider()); - treeViewer.setSorter(new CustomSorter()); - - ArrayList<Object> containers = new ArrayList<Object>(); - for (TaskRepository repository : TasksUi.getRepositoryManager().getAllRepositories()) { - containers.add(repository); - } - -// for (AbstractTaskContainer element : TasksUiPlugin.getTaskList().getRootElements()) { -// if (!(element instanceof TaskArchive)) { -// containers.add(element); -// } -// } - containers.addAll(Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects())); - - treeViewer.setInput(containers); - treeViewer.expandAll(); - - // tree.setComparator(new ResourceComparator(ResourceComparator.NAME)); - - GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); - data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT; - data.widthHint = SIZING_SELECTION_WIDGET_WIDTH; - treeViewer.getControl().setLayoutData(data); - - treeViewer.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - handleCheckStateChange(event); - } - }); - -// tree.addTreeListener(new ITreeViewerListener() { -// public void treeCollapsed(TreeExpansionEvent event) { -// } -// -// public void treeExpanded(TreeExpansionEvent event) { -// final Object element = event.getElement(); -// if (tree.getGrayed(element) == false) { -// BusyIndicator.showWhile(getShell().getDisplay(), -// new Runnable() { -// public void run() { -// setSubtreeChecked((IContainer) element, -// tree.getChecked(element), false); -// } -// }); -// } -// } -// }); - - // Add select / deselect all buttons for bug 46669 - Composite buttonComposite = new Composite(composite, SWT.NONE); - layout = new GridLayout(2, false); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - buttonComposite.setLayout(layout); - buttonComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - - Button selectAllButton = new Button(buttonComposite, SWT.PUSH); - selectAllButton.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_label); - selectAllButton.setToolTipText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_toolTip); - selectAllButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent selectionEvent) { - treeViewer.setCheckedElements(workingSetPageContentProvider.getElements(treeViewer.getInput())); - validateInput(); - } - }); - setButtonLayoutData(selectAllButton); - - Button deselectAllButton = new Button(buttonComposite, SWT.PUSH); - deselectAllButton.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_deselectAll_label); - deselectAllButton.setToolTipText(IDEWorkbenchMessages.ResourceWorkingSetPage_deselectAll_toolTip); - deselectAllButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent selectionEvent) { - treeViewer.setCheckedElements(new Object[0]); - validateInput(); - } - }); - setButtonLayoutData(deselectAllButton); - - initializeCheckedState(); - if (workingSet != null) { - text.setText(workingSet.getName()); - } - setPageComplete(false); - - Dialog.applyDialogFont(composite); - } - - private void initializeCheckedState() { - BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { - public void run() { - Object[] items = null; - if (workingSet != null) { - items = workingSet.getElements(); - if (items != null) { - // see bug 191342 - treeViewer.setCheckedElements(new Object[] {}); - for (Object item : items) { - if (item != null) { - treeViewer.setChecked(item, true); - } - } - } - } - } - }); - } - - protected void handleCheckStateChange(final CheckStateChangedEvent event) { - BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { - public void run() { - IAdaptable element = (IAdaptable) event.getElement(); - if (element instanceof AbstractTaskContainer || element instanceof IProject) { - treeViewer.setGrayed(element, false); - } else if (element instanceof ElementCategory) { - for (Object child : ((ElementCategory) element).getChildren(null)) { - treeViewer.setChecked(child, event.getChecked()); - } - } else if (element instanceof TaskRepository || element instanceof TaskRepositoryProjectMapping) { - for (Object child : workingSetPageContentProvider.getChildren(element)) { - treeViewer.setChecked(child, event.getChecked()); - } - } - - validateInput(); - } - }); - } - - protected void validateInput() { - String errorMessage = null; - String infoMessage = null; - String newText = text.getText(); - - if (!newText.equals(newText.trim())) { - errorMessage = "The name must not have a leading or trailing whitespace."; - } else if (firstCheck) { - firstCheck = false; - return; - } - if ("".equals(newText)) { //$NON-NLS-1$ - errorMessage = "The name must not be empty."; - } - if (errorMessage == null && (workingSet == null || !newText.equals(workingSet.getName()))) { - IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets(); - for (IWorkingSet workingSet2 : workingSets) { - if (newText.equals(workingSet2.getName())) { - errorMessage = "A working set with the same name already exists."; - } - } - } - if (treeViewer.getCheckedElements().length == 0) { - infoMessage = "No categories/queries selected."; - } - setMessage(infoMessage, INFORMATION); - setErrorMessage(errorMessage); - setPageComplete(errorMessage == null); - } - -} |