1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 23:25:26 +02:00

[fix] bug 237816: restrictToSystemType does not work for RSEMainNewConnectionWizard

This commit is contained in:
Uwe Stieber 2008-10-11 15:41:35 +00:00
parent 592e9a2d04
commit 2beb24ab37
7 changed files with 341 additions and 8 deletions

View file

@ -23,6 +23,7 @@
package org.eclipse.rse.ui.wizards.newconnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@ -147,6 +148,14 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS
restrictedSystemTypes = systemTypes;
onlySystemType = restrictedSystemTypes.length == 1;
mainPage.restrictToSystemTypes(restrictedSystemTypes);
if (onlySystemType && !restrictedSystemTypes[0].equals(selectedSystemType))
selectedSystemType = restrictedSystemTypes[0];
else if (restrictedSystemTypes.length > 0 && !Arrays.asList(restrictedSystemTypes).contains(selectedSystemType))
selectedSystemType = null;
else if (restrictedSystemTypes.length == 0)
selectedSystemType = null;
onSelectedSystemTypeChanged();
}
@ -329,7 +338,7 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS
// Note: Do not call IWizard.addPages() here in case the main wizard is restricted to
// a single system type. The IWizard.addPages() method will be called from the
// enclosing wizard dialog directly instead!
if (!onlySystemType && selectedWizard != null && !initializedWizards.contains(selectedWizard)) {
if ((!onlySystemType || mainPage.getPreviousPage() != null) && selectedWizard != null && !initializedWizards.contains(selectedWizard)) {
selectedWizard.addPages();
initializedWizards.add(selectedWizard);
}

View file

@ -263,7 +263,26 @@ public class RSENewConnectionWizardSelectionPage extends WizardPage {
// before initializing the selection.
restoreWidgetValues();
// Initialize the tree selection
initializeSelection(treeViewer);
// Initialize the selection in the tree
filteredTree.getFilterControl().setFocus();
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), helpId);
}
/**
* Set the initial tree selection for the given tree viewer instance.
*
* @param treeViewer The tree viewer instance.
*
* @since 3.1
*/
protected void initializeSelection(TreeViewer treeViewer) {
if (treeViewer == null) return;
if (getWizard() instanceof ISelectionProvider) {
ISelectionProvider selectionProvider = (ISelectionProvider)getWizard();
if (selectionProvider.getSelection() instanceof IStructuredSelection) {
@ -275,14 +294,9 @@ public class RSENewConnectionWizardSelectionPage extends WizardPage {
}
}
}
// we put the initial focus into the filter field
filteredTree.getFilterControl().setFocus();
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), helpId);
}
/**
* Called from the selection listener to propage the current
* system type selection to the underlaying wizard.
@ -338,6 +352,12 @@ public class RSENewConnectionWizardSelectionPage extends WizardPage {
// if the page will become hidden, save the expansion state of
// the tree elements.
if (!visible) saveWidgetValues();
// If the page will become visible, refresh the viewer
// content -> The listed system types might have changed.
else if (filteredTree != null && filteredTree.getViewer() != null) {
filteredTree.getViewer().refresh();
initializeSelection(filteredTree.getViewer());
}
}
/**

View file

@ -37,6 +37,8 @@ TestSubsystemTestCase.testAddAndDeleteDeepNodes=true
TestSubsystemTestCase.testAddAndDeleteFlatNodes=true
TestSubsystemTestCase.testBugzilla170728=true
RSENewConnectionWizardTestCase.testRestrictToSystemType=true
#
# The following section controls enablement of test cases by target or client platform.
# Uncomment a line to disable running unit tests on the specified target connection.

View file

@ -0,0 +1,41 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Uwe Stieber (Wind River) - initial API and implementation
*******************************************************************************/
package org.eclipse.rse.tests.ui.connectionwizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.rse.core.IRSECoreRegistry;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.tests.RSETestsPlugin;
import org.eclipse.rse.tests.core.RSECoreTestCase;
import org.eclipse.ui.PlatformUI;
/**
* Tests the RSE new connection wizard functionality.
*
* @author uwe.stieber@windriver.com
*/
public class RSENewConnectionWizardTestCase extends RSECoreTestCase {
/* Test restrictToSystemType functionality. See bug 237816 */
public void testRestrictToSystemType() {
//-test-author-:UweStieber
if (!RSETestsPlugin.isTestCaseEnabled("RSENewConnectionWizardTestCase.testRestrictToSystemType")) return; //$NON-NLS-1$
IRSECoreRegistry coreRegistry = RSECorePlugin.getTheCoreRegistry();
assertNotNull("Failed to fetch RSE core registry instance!", coreRegistry); //$NON-NLS-1$
// Construct the wizard
RSENewConnectionWizardTestWizard wizard = new RSENewConnectionWizardTestWizard();
WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard);
dialog.open();
}
}

View file

@ -0,0 +1,144 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Uwe Stieber (Wind River) - initial API and implementation.
*******************************************************************************/
package org.eclipse.rse.tests.ui.connectionwizard;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.rse.core.IRSECoreRegistry;
import org.eclipse.rse.core.IRSESystemType;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.ui.wizards.newconnection.RSEMainNewConnectionWizard;
import org.eclipse.rse.ui.wizards.newconnection.RSENewConnectionWizardRegistry;
import org.eclipse.swt.SWT;
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.Composite;
import org.eclipse.swt.widgets.List;
/**
* Simple wizard page listing the available system types in a simple text list.
*
* @author uwe.stieber@windriver.com
*/
public class RSENewConnectionWizardTestSimpleWizardPage extends WizardPage {
private List fList;
private IRSESystemType[] fSystemTypes;
RSEMainNewConnectionWizard fMainWizard;
/**
* Constructor.
*
* @param wizardRegistry The wizard registry to use. Must not be <code>null</code>
* @param pageName the name of the page
*/
public RSENewConnectionWizardTestSimpleWizardPage(RSENewConnectionWizardRegistry wizardRegistry, String pageName) {
super(pageName);
assert wizardRegistry != null;
}
/**
* Constructor.
*
* @param wizardRegistry The wizard registry to use. Must not be <code>null</code>
* @param pageName the name of the page
* @param title the title for this wizard page,
* or <code>null</code> if none
* @param titleImage the image descriptor for the title of this wizard page,
* or <code>null</code> if none
*/
public RSENewConnectionWizardTestSimpleWizardPage(RSENewConnectionWizardRegistry wizardRegistry, String pageName, String title, ImageDescriptor titleImage) {
super(pageName, title, titleImage);
assert wizardRegistry != null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage#dispose()
*/
public void dispose() {
fSystemTypes = null;
fList = null;
if (fMainWizard != null) { fMainWizard.dispose(); fMainWizard = null; }
super.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
setControl(composite);
fList = new List(composite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
fList.setLayoutData(new GridData(GridData.FILL_BOTH));
IRSECoreRegistry coreRegistry = RSECorePlugin.getTheCoreRegistry();
fSystemTypes = coreRegistry.getSystemTypes();
for (int i = 0; i < fSystemTypes.length; i++) {
fList.add(fSystemTypes[i].getLabel());
}
fList.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
// Update the main wizard if already created
if (fMainWizard != null && getSelectedSystemType() != null) fMainWizard.restrictToSystemType(getSelectedSystemType());
setPageComplete(getSelectedSystemType() != null);
}
});
setPageComplete(false);
}
/**
* Returns the selected system type instance. This method will
* return <code>null</code> if the page hasn't been visible yet or
* got already disposed.
*
* @return The selected RSE system type instance or <code>null</code>.
*/
public IRSESystemType getSelectedSystemType() {
if (fList != null && !fList.isDisposed() && fList.getSelectionIndex() != -1) {
return fSystemTypes[fList.getSelectionIndex()];
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
*/
public boolean canFlipToNextPage() {
return super.canFlipToNextPage() && (fList != null && !fList.isDisposed() && fList.getSelectionIndex() != -1);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.WizardPage#getNextPage()
*/
public IWizardPage getNextPage() {
if (fMainWizard == null) {
// Create a new instance
fMainWizard = new RSEMainNewConnectionWizard();
// Create the pages
fMainWizard.addPages();
// Restrict the wizard to the selected system type
if (getSelectedSystemType() != null) fMainWizard.restrictToSystemType(getSelectedSystemType());
}
return fMainWizard.getStartingPage();
}
}

View file

@ -0,0 +1,55 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Uwe Stieber (Wind River) - initial API and implementation.
*******************************************************************************/
package org.eclipse.rse.tests.ui.connectionwizard;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.rse.tests.framework.DelegatingTestSuiteHolder;
public class RSENewConnectionWizardTestSuite extends DelegatingTestSuiteHolder {
/**
* Standard Java application main method. Allows to launch the test
* suite from outside as part of nightly runs, headless runs or other.
* <p><b>Note:</b> Use only <code>junit.textui.TestRunner</code> here as
* it is explicitly supposed to output the test output to the shell the
* test suite has been launched from.
* <p>
* @param args The standard Java application command line parameters passed in.
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
/**
* Combine all test into a suite and returns the test suite instance.
* <p>
* <b>Note: This method must be always called <i><code>suite</code></i> ! Otherwise
* the JUnit plug-in test launcher will fail to detect this class!</b>
* <p>
* @return The test suite instance.
*/
public static Test suite() {
TestSuite suite = new TestSuite("RSE Registries Test Suite"); //$NON-NLS-1$
// add the single test suites to the overall one here.
suite.addTestSuite(RSENewConnectionWizardTestCase.class);
return suite;
}
/* (non-Javadoc)
* @see org.eclipse.rse.tests.framework.AbstractTestSuiteHolder#getTestSuite()
*/
public TestSuite getTestSuite() {
return (TestSuite)RSENewConnectionWizardTestSuite.suite();
}
}

View file

@ -0,0 +1,62 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Uwe Stieber (Wind River) - initial API and implementation
*******************************************************************************/
package org.eclipse.rse.tests.ui.connectionwizard;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.rse.ui.wizards.newconnection.RSENewConnectionWizardRegistry;
/**
* Simple test wizard implementation.
*
* @author uwe.stieber@windriver.com
*/
public class RSENewConnectionWizardTestWizard extends Wizard {
private final RSENewConnectionWizardRegistry fWizardRegisty;
/**
* Constructor.
*
*/
public RSENewConnectionWizardTestWizard() {
super();
fWizardRegisty = new RSENewConnectionWizardRegistry();
setNeedsProgressMonitor(false);
setForcePreviousAndNextButtons(true);
}
/**
* Returns the RSE new connection wizard registry instance.
*
* @return The new connection wizard registry.
*/
public RSENewConnectionWizardRegistry getWizardRegistry() {
return fWizardRegisty;
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
public void addPages() {
addPage(new RSENewConnectionWizardTestSimpleWizardPage(getWizardRegistry(), "Simple Selection Page")); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
public boolean performFinish() {
return true;
}
}