diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java | 624 |
1 files changed, 0 insertions, 624 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java deleted file mode 100644 index 933c18f49..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java +++ /dev/null @@ -1,624 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2008 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; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.DialogPage; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.mylyn.commons.core.StatusHandler; -import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; -import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; -import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylyn.tasks.core.IRepositoryQuery; -import org.eclipse.mylyn.tasks.core.TaskRepository; -import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylyn.tasks.ui.TasksUi; -import org.eclipse.mylyn.tasks.ui.TasksUiUtil; -import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage; -import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPage; -import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPageContainer; -import org.eclipse.search.internal.ui.SearchPlugin; -import org.eclipse.search.ui.ISearchPage; -import org.eclipse.search.ui.ISearchPageContainer; -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.search.ui.ISearchResultViewPart; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.Hyperlink; -import org.eclipse.ui.forms.widgets.ImageHyperlink; - -/** - * @author Rob Elves - * @author Mik Kersten - * @author Steffen Pingel - */ -public class TaskSearchPage extends DialogPage implements ISearchPage { - - public static final String ID = "org.eclipse.mylyn.tasks.ui.search.page"; //$NON-NLS-1$ - - private static final String PAGE_KEY = "page"; //$NON-NLS-1$ - - private static final String PAGE_NAME = "TaskSearchPage"; //$NON-NLS-1$ - - private static final String STORE_REPO_ID = PAGE_NAME + ".REPO"; //$NON-NLS-1$ - - private Combo repositoryCombo; - - private Text keyText; - - private TaskRepository repository; - - private Composite fParentComposite; - - private IDialogSettings fDialogSettings; - - private int currentPageIndex = -1; - - private boolean firstView = true; - - private Control[] queryPages; - - private ISearchPageContainer pageContainer; - - private ITaskSearchPageContainer taskSearchPageContainer; - - public boolean performAction() { - saveDialogSettings(); - String key = keyText.getText(); - if (key != null && key.trim().length() > 0) { - key = key.trim(); - boolean openSuccessful = TasksUiUtil.openTask(repository, key); - if (!openSuccessful) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - Messages.TaskSearchPage_Task_Search, Messages.TaskSearchPage_No_task_found_matching_key_ + key); - } - return openSuccessful; - } else { - ITaskSearchPage page = (ITaskSearchPage) queryPages[currentPageIndex].getData(PAGE_KEY); - return page.performSearch(); - } - } - - public void setContainer(ISearchPageContainer container) { - this.pageContainer = container; - this.taskSearchPageContainer = new ITaskSearchPageContainer() { - public IRunnableContext getRunnableContext() { - return pageContainer.getRunnableContext(); - } - - public void setPerformActionEnabled(boolean enabled) { - pageContainer.setPerformActionEnabled(enabled); - } - }; - } - - public void createControl(Composite parent) { - fParentComposite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(1, false); - // layout.marginHeight = 0; - // layout.marginWidth = 0; - fParentComposite.setLayout(layout); - GridData gd = new GridData(GridData.FILL_BOTH); - fParentComposite.setLayoutData(gd); - - createRepositoryGroup(fParentComposite); - createSeparator(fParentComposite); - this.setControl(fParentComposite); - - Dialog.applyDialogFont(fParentComposite); - } - - private void createSeparator(Composite parent) { - Label separator = new Label(parent, SWT.NONE); - separator.setVisible(false); - GridData data = new GridData(GridData.FILL, GridData.FILL, false, false, 2, 1); - data.heightHint = convertHeightInCharsToPixels(1) / 3; - separator.setLayoutData(data); - } - - private void createRepositoryGroup(Composite control) { - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(6, false); - group.setLayout(layout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - group.setLayoutData(gd); - - Label label = new Label(group, SWT.NONE); - label.setText(Messages.TaskSearchPage_Select_Repository_); - - repositoryCombo = new Combo(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); - repositoryCombo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - displayQueryPage(repositoryCombo.getSelectionIndex()); - } - }); - label = new Label(group, SWT.NONE); - label.setText(" "); //$NON-NLS-1$ - - Label labelKey = new Label(group, SWT.NONE); - labelKey.setText(Messages.TaskSearchPage_Task_Key_ID); - keyText = new Text(group, SWT.BORDER); - keyText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); - - String findText = null; - TaskListView taskListView = TaskListView.getFromActivePerspective(); - if (taskListView != null) { - findText = taskListView.getFilteredTree().getFilterControl().getText(); - if (findText != null && findText.trim().length() > 0 && isTaskKeyCandidate(findText.trim())) { - pageContainer.setPerformActionEnabled(true); - keyText.setText(findText.trim()); - keyText.setFocus(); - } - } - - keyText.addKeyListener(new KeyListener() { - - public void keyPressed(KeyEvent e) { - // ignore - } - - public void keyReleased(KeyEvent e) { - updatePageEnablement(); - } - }); - - ImageHyperlink clearKey = new ImageHyperlink(group, SWT.NONE); - clearKey.setImage(CommonImages.getImage(CommonImages.REMOVE)); - clearKey.addHyperlinkListener(new HyperlinkAdapter() { - - @Override - public void linkActivated(HyperlinkEvent e) { - keyText.setText(""); //$NON-NLS-1$ - updatePageEnablement(); - } - }); - } - - private void updatePageEnablement() { - if (keyText.getText() != null && keyText.getText().trim().length() > 0) { - //setControlsEnabled(queryPages[currentPageIndex], false); - if (queryPages != null && queryPages[currentPageIndex] != null - && queryPages[currentPageIndex].getData(PAGE_KEY) instanceof AbstractRepositoryQueryPage) { - ((AbstractRepositoryQueryPage) queryPages[currentPageIndex].getData(PAGE_KEY)).setControlsEnabled(false); - } - if (repositoryCombo.getSelectionIndex() > -1) { - pageContainer.setPerformActionEnabled(true); - } - } else { - //setControlsEnabled(queryPages[currentPageIndex], true); - if (queryPages != null && queryPages[currentPageIndex] != null - && queryPages[currentPageIndex].getData(PAGE_KEY) instanceof AbstractRepositoryQueryPage) { - ((AbstractRepositoryQueryPage) queryPages[currentPageIndex].getData(PAGE_KEY)).setControlsEnabled(true); - } - //setControlsEnabled(queryPages[currentPageIndex], true); - //pageContainer.setPerformActionEnabled(false); - } - } - - private Control createPage(TaskRepository repository, ITaskSearchPage searchPage) { - // Page wrapper - final Composite pageWrapper = new Composite(fParentComposite, SWT.NONE); - pageWrapper.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - pageWrapper.setLayout(layout); - - searchPage.setContainer(taskSearchPageContainer); - try { - searchPage.createControl(pageWrapper); - } catch (Exception e) { - pageWrapper.dispose(); - searchPage.dispose(); - - searchPage = new DeadSearchPage(repository); - searchPage.setContainer(taskSearchPageContainer); - searchPage.createControl(fParentComposite); - StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Error occurred while constructing search page for " + repository.getRepositoryUrl() + " [" //$NON-NLS-1$ //$NON-NLS-2$ - + repository.getConnectorKind() + "]", e)); //$NON-NLS-1$ - searchPage.getControl().setData(PAGE_KEY, searchPage); - return searchPage.getControl(); - } - - // XXX: work around for initial search page size issue bug#198493 - IDialogSettings searchDialogSettings = SearchPlugin.getDefault().getDialogSettingsSection( - "DialogBounds_SearchDialog"); //$NON-NLS-1$ - if (searchDialogSettings.get("DIALOG_WIDTH") == null) { //$NON-NLS-1$ - fParentComposite.getParent().getShell().pack(); - } - pageWrapper.setData(PAGE_KEY, searchPage); - return pageWrapper; - } - - private void displayQueryPage(int pageIndex) { - if (currentPageIndex == pageIndex || pageIndex < 0) { - return; - } - - // TODO: if repository == null display invalid page? - if (currentPageIndex != -1 && queryPages[currentPageIndex] != null) { - queryPages[currentPageIndex].setVisible(false); - ITaskSearchPage page = (ITaskSearchPage) queryPages[currentPageIndex].getData(PAGE_KEY); - page.setVisible(false); - GridData data = (GridData) queryPages[currentPageIndex].getLayoutData(); - data.exclude = true; - queryPages[currentPageIndex].setLayoutData(data); - } - - String repositoryLabel = repositoryCombo.getItem(pageIndex); - repository = (TaskRepository) repositoryCombo.getData(repositoryLabel); - - if (queryPages[pageIndex] == null) { - if (repository != null) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repository.getConnectorKind()); - if (connectorUi != null) { - ITaskSearchPage searchPage = getSearchPage(connectorUi); - if (searchPage != null) { - queryPages[pageIndex] = createPage(repository, searchPage); - } else { - AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( - repository.getConnectorKind()); - if (connector.canCreateTaskFromKey(repository)) { - queryPages[pageIndex] = createPage(repository, new NoSearchPage(repository)); - } - } - } - - } - } - - // update enablement of the task id field - if (repository != null) { - AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( - repository.getConnectorKind()); - if (connector.canCreateTaskFromKey(repository)) { - keyText.setEnabled(true); - } else { - keyText.setEnabled(false); - } - } - - if (queryPages[pageIndex] != null) { - GridData data = (GridData) queryPages[pageIndex].getLayoutData(); - if (data == null) { - data = new GridData(); - } - data.exclude = false; - queryPages[pageIndex].setLayoutData(data); - queryPages[pageIndex].setVisible(true); - ITaskSearchPage page = (ITaskSearchPage) queryPages[pageIndex].getData(PAGE_KEY); - page.setVisible(true); - } - - currentPageIndex = pageIndex; - fParentComposite.getParent().layout(true, true); - updatePageEnablement(); - - } - - private ITaskSearchPage getSearchPage(AbstractRepositoryConnectorUi connectorUi) { - if (connectorUi.hasSearchPage()) { - return connectorUi.getSearchPage(repository, null); - } - return null; - } - - @Override - public void setVisible(boolean visible) { - if (firstView) { - getControl().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); - - List<TaskRepository> repositories = TasksUi.getRepositoryManager().getAllRepositories(); - List<TaskRepository> searchableRepositories = new ArrayList<TaskRepository>(); - for (TaskRepository repository : repositories) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repository.getConnectorKind()); - AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( - repository.getConnectorKind()); - if ((connectorUi != null && connectorUi.hasSearchPage() && !repository.isOffline()) - || connector.canCreateTaskFromKey(repository)) { - searchableRepositories.add(repository); - } - } - - Collections.sort(searchableRepositories, new TaskRepositoryComparator()); - - String[] repositoryUrls = new String[searchableRepositories.size()]; - int i = 0; - int indexToSelect = 0; - for (TaskRepository currRepsitory : searchableRepositories) { - if (repository != null && repository.equals(currRepsitory)) { - indexToSelect = i; - } - repositoryUrls[i] = currRepsitory.getRepositoryUrl(); - i++; - } - - IDialogSettings settings = getDialogSettings(); - if (repositoryCombo != null) { - for (int x = 0; x < searchableRepositories.size(); x++) { - repositoryCombo.add(searchableRepositories.get(x).getRepositoryLabel()); - repositoryCombo.setData(searchableRepositories.get(x).getRepositoryLabel(), - searchableRepositories.get(x)); - } - if (repositoryUrls.length == 0) { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - Messages.TaskSearchPage_Repository_Search, TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - } else { - String selectRepo = settings.get(STORE_REPO_ID); - if (selectRepo != null && repositoryCombo.indexOf(selectRepo) > -1) { - repositoryCombo.select(repositoryCombo.indexOf(selectRepo)); - repository = (TaskRepository) repositoryCombo.getData(selectRepo); - if (repository == null) { - // TODO: Display no repository error - } - } else { - repositoryCombo.select(indexToSelect); - } - - // TODO: Create one page per connector and repopulate based on repository - queryPages = new Control[repositoryUrls.length]; - displayQueryPage(repositoryCombo.getSelectionIndex()); - // updateAttributesFromRepository(repositoryCombo.getText(), - // null, false); - } - } - firstView = false; - } - - if (queryPages == null) { - pageContainer.setPerformActionEnabled(false); - } - - super.setVisible(visible); - - setDefaultValuesAndFocus(); - } - - private void setDefaultValuesAndFocus() { - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - IWorkbenchPage page = window.getActivePage(); - if (page != null) { - String repositoryUrl = null; - IWorkbenchPart part = page.getActivePart(); - if (part instanceof ISearchResultViewPart) { - ISearchQuery[] queries = NewSearchUI.getQueries(); - if (queries.length > 0) { - if (queries[0] instanceof SearchHitCollector) { - repositoryUrl = ((SearchHitCollector) queries[0]).getRepositoryQuery().getRepositoryUrl(); - } - } - } -// if (repositoryUrl == null) { -// IEditorPart editor = page.getActiveEditor(); -// if (editor instanceof TaskEditor) { -// repositoryUrl = ((TaskEditor) editor).getTaskEditorInput().getTask().getRepositoryUrl(); -// } -// } -// if (repositoryUrl == null) { -// TaskListView taskListView = TaskListView.getFromActivePerspective(); -// if (taskListView != null) { -// AbstractTask selectedTask = taskListView.getSelectedTask(); -// if (selectedTask != null) { -// repositoryUrl = selectedTask.getRepositoryUrl(); -// } -// } -// } - if (repositoryUrl != null) { - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryUrl); - if (repository != null) { - int index = 0; - for (String repositoryLabel : repositoryCombo.getItems()) { - if (repositoryLabel.equals(repository.getRepositoryLabel())) { - repositoryCombo.select(index); - } - index++; - } - displayQueryPage(repositoryCombo.getSelectionIndex()); - } - } - } - } - - if (keyText.getText() != null && keyText.getText().trim().length() > 0) { - keyText.setFocus(); - keyText.setSelection(0, keyText.getText().length()); - } else { - Clipboard clipboard = new Clipboard(Display.getDefault()); - TextTransfer transfer = TextTransfer.getInstance(); - String contents = (String) clipboard.getContents(transfer); - if (contents != null) { - if (isTaskKeyCandidate(contents.trim())) { - keyText.setText(contents.trim()); - keyText.setFocus(); - keyText.setSelection(0, keyText.getText().length()); - } - } - } - updatePageEnablement(); - } - - private boolean isTaskKeyCandidate(String contents) { - boolean looksLikeKey = false; - try { - Integer.parseInt(contents); - looksLikeKey = true; - } catch (NumberFormatException nfe) { - } - if (!looksLikeKey) { - try { - Integer.parseInt(contents.substring(contents.lastIndexOf('-'))); - looksLikeKey = true; - } catch (Exception e) { - } - } - return looksLikeKey; - } - - public IDialogSettings getDialogSettings() { - IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings(); - fDialogSettings = settings.getSection(PAGE_NAME); - if (fDialogSettings == null) { - fDialogSettings = settings.addNewSection(PAGE_NAME); - } - return fDialogSettings; - } - - private void saveDialogSettings() { - IDialogSettings settings = getDialogSettings(); - settings.put(STORE_REPO_ID, repositoryCombo.getText()); - } - - @Override - public void dispose() { - if (queryPages != null) { - for (Control control : queryPages) { - if (control != null) { - ITaskSearchPage page = (ITaskSearchPage) control.getData(PAGE_KEY); - page.dispose(); - } - } - } - super.dispose(); - } - - private class DeadSearchPage extends AbstractRepositoryQueryPage { - - public DeadSearchPage(TaskRepository rep) { - super("Search page error", rep); //$NON-NLS-1$ - } - - public void createControl(Composite parent) { - Hyperlink hyperlink = new Hyperlink(parent, SWT.NONE); - hyperlink.setText(Messages.TaskSearchPage_ERROR_Unable_to_present_query_page); - hyperlink.setUnderlined(true); - hyperlink.addHyperlinkListener(new HyperlinkAdapter() { - @Override - public void linkActivated(HyperlinkEvent e) { - TaskSearchPage.this.getControl().getShell().close(); - TasksUiUtil.openEditRepositoryWizard(getTaskRepository()); - // TODO: Re-construct this page with new - // repository data - } - - }); - - GridDataFactory.fillDefaults().applyTo(hyperlink); - setControl(hyperlink); - } - - @Override - public IRepositoryQuery getQuery() { - return null; - } - - @Override - public boolean isPageComplete() { - return false; - } - - @Override - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - getSearchContainer().setPerformActionEnabled(false); - } - } - - @Override - public String getQueryTitle() { - return null; - } - - @Override - public void applyTo(IRepositoryQuery query) { - // ignore - } - - } - - private class NoSearchPage extends AbstractRepositoryQueryPage { - - public NoSearchPage(TaskRepository rep) { - super("No search page", rep); //$NON-NLS-1$ - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout()); - Dialog.applyDialogFont(composite); - setControl(composite); - } - - @Override - public IRepositoryQuery getQuery() { - return null; - } - - @Override - public boolean isPageComplete() { - return false; - } - - @Override - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - getSearchContainer().setPerformActionEnabled(false); - } - } - - @Override - public String getQueryTitle() { - return null; - } - - @Override - public void applyTo(IRepositoryQuery query) { - // ignore - } - - } -} |