diff options
author | Steffen Pingel | 2011-09-16 16:30:35 +0000 |
---|---|---|
committer | Steffen Pingel | 2011-09-16 16:30:35 +0000 |
commit | 6e184421ca62955dc533b039f58e824abb4786c6 (patch) | |
tree | 5cd676c5b41105305d9130b8e37f691a9945d9a6 /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn | |
parent | 6d8a2fc7c721e548710f2b05e6b1ce818efac316 (diff) | |
download | org.eclipse.mylyn.tasks-6e184421ca62955dc533b039f58e824abb4786c6.tar.gz org.eclipse.mylyn.tasks-6e184421ca62955dc533b039f58e824abb4786c6.tar.xz org.eclipse.mylyn.tasks-6e184421ca62955dc533b039f58e824abb4786c6.zip |
NEW - bug 245152: opening "Task Search" blocks UI when page is first
shown
https://bugs.eclipse.org/bugs/show_bug.cgi?id=245152
Change-Id: I2ca9f5e0e7aac6f3cf1ee735f41e40c634867cfd
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn')
6 files changed, 505 insertions, 107 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/provisional/tasks/ui/wizards/AbstractRepositoryQueryPage2.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/provisional/tasks/ui/wizards/AbstractRepositoryQueryPage2.java index cb1e44035..7b109e529 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/provisional/tasks/ui/wizards/AbstractRepositoryQueryPage2.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/provisional/tasks/ui/wizards/AbstractRepositoryQueryPage2.java @@ -19,7 +19,6 @@ import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylyn.internal.tasks.ui.wizards.QueryWizardDialog; import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.TaskRepository; @@ -35,6 +34,7 @@ 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.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; @@ -44,7 +44,9 @@ import org.eclipse.ui.progress.IProgressService; /** * @author Steffen Pingel * @since 3.1 + * @deprecated use {@link org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage2} instead */ +@Deprecated public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQueryPage { private Text titleText; @@ -57,8 +59,6 @@ public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQue private boolean needsRepositoryConfiguration = true; - private boolean needsClearButton = false; - public AbstractRepositoryQueryPage2(String pageName, TaskRepository repository, IRepositoryQuery query) { super(pageName, repository, query); this.connector = TasksUi.getRepositoryConnector(getTaskRepository().getConnectorKind()); @@ -69,10 +69,6 @@ public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQue this.needsRepositoryConfiguration = needsRepositoryConfiguration; } - public void setNeedsClearButton(boolean needsClearButton) { - this.needsClearButton = needsClearButton; - } - public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(composite); @@ -89,8 +85,10 @@ public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQue GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).span(2, 1).applyTo(innerComposite); innerComposite.setLayout(new FillLayout()); createPageContent(innerComposite); - createButtonGroup(composite); - if (!needsRepositoryConfiguration) { + + if (needsRepositoryConfiguration) { + createUpdateButton(composite); + } else { setDescription(Messages.AbstractRepositoryQueryPage2_Create_a_Query_Page_Description); } @@ -126,49 +124,30 @@ public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQue }); } - private void createButtonGroup(Composite control) { + private Control createUpdateButton(final Composite control) { Composite composite = new Composite(control, SWT.NONE); GridLayout layout = new GridLayout(2, false); composite.setLayout(layout); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).span(2, 1).applyTo(composite); - createButtons(composite); - } - protected void createButtons(final Composite control) { - if (getSearchContainer() == null) { - return; - } - if (needsClearButton) { - Button clearButton = new Button(control, SWT.PUSH); - clearButton.setText(Messages.AbstractRepositoryQueryPage2_Clear_Fields); - clearButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); - clearButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - clearFields(); + updateButton = new Button(composite, SWT.PUSH); + updateButton.setText(Messages.AbstractRepositoryQueryPage2__Refresh_From_Repository); + updateButton.setLayoutData(new GridData()); + updateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (getTaskRepository() != null) { + updateAttributesFromRepository(true); + } else { + MessageDialog.openInformation( + Display.getCurrent().getActiveShell(), + Messages.AbstractRepositoryQueryPage2_Update_Attributes_Failed, + Messages.AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view); } + } + }); - }); - } - if (needsRepositoryConfiguration) { - updateButton = new Button(control, SWT.PUSH); - updateButton.setText(Messages.AbstractRepositoryQueryPage2__Refresh_From_Repository); - updateButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); -// updateButton.setImage(TasksUiImages.REPOSITORY_UPDATE_CONFIGURATION.createImage()); - updateButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (getTaskRepository() != null) { - updateAttributesFromRepository(true); - } else { - MessageDialog.openInformation( - Display.getCurrent().getActiveShell(), - Messages.AbstractRepositoryQueryPage2_Update_Attributes_Failed, - Messages.AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view); - } - } - }); - } + return composite; } @Override @@ -290,47 +269,4 @@ public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQue } } - public void setExtraButtonState(Button button) { - Integer obj = (Integer) button.getData(); - if (obj == QueryWizardDialog.UPDATE_BUTTON_ID) { - if (needsRepositoryConfiguration) { - if (!button.isVisible()) { - button.setVisible(true); - } - button.setEnabled(true); - } else { - if (button != null && button.isVisible()) { - button.setVisible(false); - } - } - } else if (obj == QueryWizardDialog.CLEAR_BUTTON_ID) { - if (!button.isVisible()) { - button.setVisible(true); - } - button.setEnabled(true); - } - - } - - public boolean handleExtraButtonPressed(int buttonId) { - if (buttonId == QueryWizardDialog.UPDATE_BUTTON_ID) { - if (getTaskRepository() != null) { - updateAttributesFromRepository(true); - } else { - MessageDialog.openInformation( - Display.getCurrent().getActiveShell(), - Messages.AbstractRepositoryQueryPage2_Update_Attributes_Failed, - Messages.AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view); - } - return true; - } else if (buttonId == QueryWizardDialog.CLEAR_BUTTON_ID) { - clearFields(); - return true; - } - return false; - } - - public void clearFields() { - - } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java index 62248c831..a18e181dd 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java @@ -290,4 +290,23 @@ public class Messages extends NLS { public static String QueryWizardDialog_Clear_Fields; public static String QueryWizardDialog_Update_Attributes_from_Repository; + + public static String AbstractRepositoryQueryPage2__Refresh_From_Repository; + + public static String AbstractRepositoryQueryPage2__Title_; + + public static String AbstractRepositoryQueryPage2_Clear_Fields; + + public static String AbstractRepositoryQueryPage2_Create_a_Query_Page_Description; + + public static String AbstractRepositoryQueryPage2_Enter_a_title; + + public static String AbstractRepositoryQueryPage2_Enter_query_parameters; + + public static String AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view; + + public static String AbstractRepositoryQueryPage2_Refresh_Configuration_Button_Label; + + public static String AbstractRepositoryQueryPage2_Update_Attributes_Failed; + } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/QueryWizardDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/QueryWizardDialog.java index 0ca217f4e..f3c4d1620 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/QueryWizardDialog.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/QueryWizardDialog.java @@ -16,22 +16,22 @@ import java.util.HashMap; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.mylyn.internal.provisional.commons.ui.dialogs.EnhancedWizardDialog; -import org.eclipse.mylyn.internal.provisional.tasks.ui.wizards.AbstractRepositoryQueryPage2; +import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage2; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; public class QueryWizardDialog extends EnhancedWizardDialog { - private static final String UPDATE_BUTTON_KEY = "update"; //$NON-NLS-1$ + private static final String REFRESH_BUTTON_KEY = "refresh"; //$NON-NLS-1$ private static final String CLEAR_BUTTON_KEY = "clear"; //$NON-NLS-1$ - public static final int UPDATE_BUTTON_ID = 2001; + public static final int REFRESH_BUTTON_ID = 2001; public static final int CLEAR_BUTTON_ID = 2002; - private Button updateButton; + private Button refreshButton; private Button clearButton; @@ -49,21 +49,26 @@ public class QueryWizardDialog extends EnhancedWizardDialog { @Override protected void createExtraButtons(Composite composite) { - clearButton = createButton(composite, CLEAR_BUTTON_ID, Messages.QueryWizardDialog_Clear_Fields, false); - clearButton.setVisible(false); - setButtonLayoutData(clearButton); - updateButton = createButton(composite, UPDATE_BUTTON_ID, - Messages.QueryWizardDialog_Update_Attributes_from_Repository, false); -// updateButton.setImage(TasksUiImages.REPOSITORY_UPDATE_CONFIGURATION_SMALL.createImage()); - updateButton.setVisible(false); - setButtonLayoutData(updateButton); + if (abstractRepositoryQueryPage != null) { + if (abstractRepositoryQueryPage.needsRefresh()) { + refreshButton = createButton(composite, REFRESH_BUTTON_ID, + Messages.QueryWizardDialog_Update_Attributes_from_Repository, false); + refreshButton.setVisible(false); + setButtonLayoutData(refreshButton); + } + if (abstractRepositoryQueryPage.needsClear()) { + clearButton = createButton(composite, CLEAR_BUTTON_ID, Messages.QueryWizardDialog_Clear_Fields, false); + clearButton.setVisible(false); + setButtonLayoutData(clearButton); + } + } } @Override protected void updateExtraButtons() { if (abstractRepositoryQueryPage != null) { abstractRepositoryQueryPage.setExtraButtonState(clearButton); - abstractRepositoryQueryPage.setExtraButtonState(updateButton); + abstractRepositoryQueryPage.setExtraButtonState(refreshButton); } } @@ -87,9 +92,9 @@ public class QueryWizardDialog extends EnhancedWizardDialog { savedEnabledState.put(CLEAR_BUTTON_KEY, clearButton.getEnabled()); clearButton.setEnabled(false); } - if (updateButton != null && updateButton.getShell() == getShell()) { - savedEnabledState.put(UPDATE_BUTTON_KEY, updateButton.getEnabled()); - updateButton.setEnabled(false); + if (refreshButton != null && refreshButton.getShell() == getShell()) { + savedEnabledState.put(REFRESH_BUTTON_KEY, refreshButton.getEnabled()); + refreshButton.setEnabled(false); } } return savedEnabledState; @@ -107,9 +112,9 @@ public class QueryWizardDialog extends EnhancedWizardDialog { if (clearButton != null && savedValidateEnabledState != null) { clearButton.setEnabled(savedValidateEnabledState); } - savedValidateEnabledState = savedEnabledState.get(UPDATE_BUTTON_KEY); - if (updateButton != null && savedValidateEnabledState != null) { - updateButton.setEnabled(savedValidateEnabledState); + savedValidateEnabledState = savedEnabledState.get(REFRESH_BUTTON_KEY); + if (refreshButton != null && savedValidateEnabledState != null) { + refreshButton.setEnabled(savedValidateEnabledState); } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties index e1a25a32d..eae725128 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties @@ -159,3 +159,13 @@ LocalRepositorySettingsPage_Configure_the_local_repository=Configure the local r LocalRepositorySettingsPage_Local_Repository_Settings=Local Repository Settings QueryWizardDialog_Clear_Fields=Clear Fields QueryWizardDialog_Update_Attributes_from_Repository=Refresh + +AbstractRepositoryQueryPage2__Refresh_From_Repository=&Refresh +AbstractRepositoryQueryPage2__Title_=&Title: +AbstractRepositoryQueryPage2_Clear_Fields=Clear Fields +AbstractRepositoryQueryPage2_Create_a_Query_Page_Description=Create a query. +AbstractRepositoryQueryPage2_Enter_a_title=Enter a title +AbstractRepositoryQueryPage2_Enter_query_parameters=Enter query parameters +AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view=No repository available, please add one using the Task Repositories view. +AbstractRepositoryQueryPage2_Refresh_Configuration_Button_Label=Refresh Configuration +AbstractRepositoryQueryPage2_Update_Attributes_Failed=Update Attributes Failed diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java index 0140e79ef..09d75c7d3 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java @@ -32,6 +32,8 @@ import org.eclipse.swt.widgets.Control; /** * Extend to provide repository-specific query page to the Workbench search dialog. + * <p> + * It is recommended that clients extend {@link AbstractRepositoryQueryPage2} instead. * * @author Rob Elves * @author Steffen Pingel diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage2.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage2.java new file mode 100644 index 000000000..2b4204c8c --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage2.java @@ -0,0 +1,426 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 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 + * Frank Becker - improvements + *******************************************************************************/ +package org.eclipse.mylyn.tasks.ui.wizards; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.SubMonitor; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.wizard.ProgressMonitorPart; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonUiUtil; +import org.eclipse.mylyn.internal.provisional.commons.ui.ProgressContainer; +import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; +import org.eclipse.mylyn.internal.tasks.ui.wizards.Messages; +import org.eclipse.mylyn.internal.tasks.ui.wizards.QueryWizardDialog; +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.TasksUi; +import org.eclipse.swt.SWT; +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.layout.FillLayout; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +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.PlatformUI; +import org.eclipse.ui.progress.IProgressService; + +/** + * @author Steffen Pingel + * @author Frank Becker + * @since 3.7 + */ +public abstract class AbstractRepositoryQueryPage2 extends AbstractRepositoryQueryPage { + + private Button cancelButton; + + private final AbstractRepositoryConnector connector; + + private boolean firstTime = true; + + private Composite innerComposite; + + private boolean needsClear; + + private boolean needsRefresh = true; + + private ProgressContainer progressContainer; + + private Button refreshButton; + + private Text titleText; + + private Composite buttonComposite; + + public AbstractRepositoryQueryPage2(String pageName, TaskRepository repository, IRepositoryQuery query) { + super(pageName, repository, query); + this.connector = TasksUi.getRepositoryConnector(getTaskRepository().getConnectorKind()); + setTitle(Messages.AbstractRepositoryQueryPage2_Enter_query_parameters); + } + + public void createControl(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(composite); + GridLayout layout = new GridLayout(2, false); + if (inSearchContainer()) { + layout.marginWidth = 0; + layout.marginHeight = 0; + } + composite.setLayout(layout); + + createTitleGroup(composite); + + innerComposite = new Composite(composite, SWT.NONE); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).span(2, 1).applyTo(innerComposite); + innerComposite.setLayout(new FillLayout()); + createPageContent(innerComposite); + + createButtonGroup(composite); + + if (!needsRefresh) { + setDescription(Messages.AbstractRepositoryQueryPage2_Create_a_Query_Page_Description); + } + + if (getQuery() != null) { + titleText.setText(getQuery().getSummary()); + restoreState(getQuery()); + } + + Dialog.applyDialogFont(composite); + setControl(composite); + } + + @Override + public String getQueryTitle() { + return (titleText != null) ? titleText.getText() : null; + } + + public boolean handleExtraButtonPressed(int buttonId) { + if (buttonId == QueryWizardDialog.REFRESH_BUTTON_ID) { + if (getTaskRepository() != null) { + updateAttributesFromRepository(true); + } else { + MessageDialog.openInformation( + Display.getCurrent().getActiveShell(), + Messages.AbstractRepositoryQueryPage2_Update_Attributes_Failed, + Messages.AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view); + } + return true; + } else if (buttonId == QueryWizardDialog.CLEAR_BUTTON_ID) { + doClearFields(); + return true; + } + return false; + } + + @Override + public boolean isPageComplete() { + if (titleText != null && titleText.getText().length() > 0) { + return true; + } + setMessage(Messages.AbstractRepositoryQueryPage2_Enter_a_title); + return false; + } + + public boolean needsClear() { + return needsClear; + } + + public boolean needsRefresh() { + return needsRefresh; + } + + @Override + public boolean performSearch() { + if (inSearchContainer()) { + saveState(); + } + return super.performSearch(); + } + + @Override + public void saveState() { + if (inSearchContainer()) { + RepositoryQuery query = new RepositoryQuery(getTaskRepository().getConnectorKind(), "handle"); //$NON-NLS-1$ + applyTo(query); + + IDialogSettings settings = getDialogSettings(); + settings.put(getSavedStateSettingKey(), query.getRepositoryUrl()); + } + } + + public void setExtraButtonState(Button button) { + Integer obj = (Integer) button.getData(); + if (obj == QueryWizardDialog.REFRESH_BUTTON_ID) { + if (needsRefresh) { + if (!button.isVisible()) { + button.setVisible(true); + } + button.setEnabled(true); + } else { + if (button != null && button.isVisible()) { + button.setVisible(false); + } + } + } else if (obj == QueryWizardDialog.CLEAR_BUTTON_ID) { + if (!button.isVisible()) { + button.setVisible(true); + } + button.setEnabled(true); + } + + } + + public void setNeedsClear(boolean needsClearButton) { + this.needsClear = needsClearButton; + } + + public void setNeedsRefresh(boolean needsRepositoryConfiguration) { + this.needsRefresh = needsRepositoryConfiguration; + } + + public void setQueryTitle(String text) { + if (titleText != null) { + titleText.setText(text); + } + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + + if (getSearchContainer() != null) { + getSearchContainer().setPerformActionEnabled(true); + } + + if (visible && firstTime) { + firstTime = false; + if (!hasRepositoryConfiguration() && needsRefresh) { + // delay the execution so the dialog's progress bar is visible + // when the attributes are updated + Display.getDefault().asyncExec(new Runnable() { + public void run() { + if (getControl() != null && !getControl().isDisposed()) { + initializePage(); + } + } + + }); + } else { + // no remote connection is needed to get attributes therefore do + // not use delayed execution to avoid flickering + initializePage(); + } + } + } + + private void createButtonGroup(Composite parent) { + buttonComposite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(1, false); + layout.marginWidth = 0; + layout.marginHeight = 0; + buttonComposite.setLayout(layout); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).span(2, 1).applyTo(buttonComposite); + createButtons(buttonComposite); + layout.numColumns = buttonComposite.getChildren().length; + } + + private void createTitleGroup(Composite control) { + if (inSearchContainer()) { + return; + } + + Label titleLabel = new Label(control, SWT.NONE); + titleLabel.setText(Messages.AbstractRepositoryQueryPage2__Title_); + + titleText = new Text(control, SWT.BORDER); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(titleText); + titleText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + getContainer().updateButtons(); + } + }); + } + + private void initializePage() { + if (needsRefresh) { + updateAttributesFromRepository(false); + } + boolean restored = (getQuery() != null); + if (inSearchContainer()) { + restored |= restoreSavedState(); + } + if (!restored) { + // initialize with default values + } + } + + private void updateAttributesFromRepository(final boolean force) { + if (!hasRepositoryConfiguration() || force) { + setErrorMessage(null); + try { + IRunnableWithProgress runnable = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + monitor = SubMonitor.convert(monitor); + monitor.beginTask(Messages.AbstractRepositoryQueryPage2_Refresh_Configuration_Button_Label, + IProgressMonitor.UNKNOWN); + try { + connector.updateRepositoryConfiguration(getTaskRepository(), monitor); + } catch (CoreException e) { + throw new InvocationTargetException(e); + } catch (OperationCanceledException e) { + throw new InterruptedException(); + } finally { + monitor.done(); + } + } + }; + + if (getContainer() != null) { + getContainer().run(true, true, runnable); + } else if (progressContainer != null) { + progressContainer.run(true, true, runnable); + } else if (getSearchContainer() != null) { + getSearchContainer().getRunnableContext().run(true, true, runnable); + } else { + IProgressService service = PlatformUI.getWorkbench().getProgressService(); + service.busyCursorWhile(runnable); + } + } catch (InvocationTargetException e) { + if (e.getCause() instanceof CoreException) { + setErrorMessage(((CoreException) e.getCause()).getStatus().getMessage()); + } else { + setErrorMessage(e.getCause().getMessage()); + } + return; + } catch (InterruptedException e) { + return; + } + } + + doRefresh(); + } + + protected void createButtons(final Composite composite) { + if (getContainer() instanceof QueryWizardDialog) { + // refresh and clear buttons are provided by the dialog + return; + } + if (needsRefresh) { + refreshButton = new Button(composite, SWT.PUSH); + refreshButton.setText(Messages.AbstractRepositoryQueryPage2__Refresh_From_Repository); + refreshButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (getTaskRepository() != null) { + updateAttributesFromRepository(true); + } else { + MessageDialog.openInformation( + Display.getCurrent().getActiveShell(), + Messages.AbstractRepositoryQueryPage2_Update_Attributes_Failed, + Messages.AbstractRepositoryQueryPage2_No_repository_available_please_add_one_using_the_Task_Repositories_view); + } + } + }); + } + if (needsClear) { + Button clearButton = new Button(composite, SWT.PUSH); + clearButton.setText(Messages.AbstractRepositoryQueryPage2_Clear_Fields); + clearButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + doClearFields(); + } + }); + } + final ProgressMonitorPart progressMonitorPart = new ProgressMonitorPart(composite, null); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).applyTo(progressMonitorPart); + progressMonitorPart.setVisible(false); + progressContainer = new ProgressContainer(composite.getShell(), progressMonitorPart) { + @Override + protected void restoreUiState(java.util.Map<Object, Object> state) { + cancelButton.setVisible(false); + CommonUiUtil.setEnabled(innerComposite, true); + for (Control control : buttonComposite.getChildren()) { + if (control instanceof ProgressMonitorPart) { + break; + } + control.setEnabled(true); + } + } + + @Override + protected void saveUiState(java.util.Map<Object, Object> savedState) { + CommonUiUtil.setEnabled(innerComposite, false); + for (Control control : buttonComposite.getChildren()) { + if (control instanceof ProgressMonitorPart) { + break; + } + control.setEnabled(false); + } + cancelButton.setEnabled(true); + cancelButton.setVisible(true); + } + }; + + cancelButton = new Button(composite, SWT.PUSH); + cancelButton.setText(IDialogConstants.CANCEL_LABEL); + cancelButton.setVisible(false); + progressContainer.setCancelButton(cancelButton); + } + + protected abstract void createPageContent(Composite parent); + + protected void doClearFields() { + } + + protected abstract void doRefresh(); + + protected AbstractRepositoryConnector getConnector() { + return connector; + } + + protected String getSavedStateSettingKey() { + return getName() + "." + getTaskRepository().getRepositoryUrl(); //$NON-NLS-1$ + } + + protected abstract boolean hasRepositoryConfiguration(); + + protected boolean restoreSavedState() { + IDialogSettings settings = getDialogSettings(); + String queryUrl = settings.get(getSavedStateSettingKey()); + if (queryUrl != null) { + RepositoryQuery query = new RepositoryQuery(getTaskRepository().getConnectorKind(), "handle"); //$NON-NLS-1$ + query.setUrl(queryUrl); + return restoreState(query); + } + return false; + } + + protected abstract boolean restoreState(IRepositoryQuery query); + +} |