### Eclipse Workspace Patch 1.0
#P org.eclipse.rse.ui
Index: UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java,v
retrieving revision 1.20
diff -u -r1.20 RSEMainNewConnectionWizard.java
--- UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java 29 May 2008 21:50:24 -0000 1.20
+++ UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java 3 Jun 2008 08:53:16 -0000
@@ -7,16 +7,17 @@
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
- * component that contains this file: David McKnight, Kushal Munir,
- * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
+ * component that contains this file: David McKnight, Kushal Munir,
+ * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
- *
+ *
* Contributors:
* Javier Montalvo OrĂºs (Symbian) - Bug 158555 - newConnectionWizardDelegates can only be used once
* Uwe Stieber (Wind River) - Reworked new connection wizard extension point.
- * Martin Oberhuber (Wind River) - [175262] IHost.getSystemType() should return IRSESystemType
+ * Martin Oberhuber (Wind River) - [175262] IHost.getSystemType() should return IRSESystemType
* Martin Oberhuber (Wind River) - [177523] Unify singleton getter methods
* Uwe Stieber (Wind River) - [189426] System File/Folder Dialogs - New Connection Not Added to Drop Down
+ * Martin Oberhuber (Wind River) - [235197][api] Unusable wizard after cancelling on first page
*******************************************************************************/
package org.eclipse.rse.ui.wizards.newconnection;
@@ -49,7 +50,7 @@
/**
* The New Connection wizard. This wizard allows users to create new RSE connections.
- *
+ *
* @noextend This class is not intended to be subclassed by clients.
*/
public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, ISelectionProvider {
@@ -57,7 +58,7 @@
* Dialog settings slot id: Last selected system type id within the wizard.
*/
public static final String LAST_SELECTED_SYSTEM_TYPE_ID = "lastSelectedSystemTypeId"; //$NON-NLS-1$
-
+
// The selected context as passed in from the invoking class.
// Just pass on to the wizards. Do not interpret here!
// @see #setSelectedContext(ISelection).
@@ -65,18 +66,19 @@
// The connection context as determined from the invoking class
// @see #setConnectionContext(IHost)
private IHost connectionContext;
-
+
+ private RSENewConnectionWizardRegistry wizardRegistry;
private IWizard selectedWizard;
private IRSESystemType selectedSystemType;
private boolean selectedWizardCanFinishEarly;
-
+
private RSENewConnectionWizardSelectionPage mainPage;
private final List initializedWizards = new LinkedList();
private final List selectionChangedListener = new LinkedList();
-
+
private IRSESystemType[] restrictedSystemTypes;
private boolean onlySystemType;
-
+
/**
* Constructor.
*/
@@ -91,10 +93,11 @@
String sectionName = this.getClass().getName();
if (settings.getSection(sectionName) == null) settings.addNewSection(sectionName);
setDialogSettings(settings.getSection(sectionName));
-
+
+ wizardRegistry = new RSENewConnectionWizardRegistry();
selectedContext = null;
selectedWizard = null;
- mainPage = new RSENewConnectionWizardSelectionPage();
+ mainPage = new RSENewConnectionWizardSelectionPage(wizardRegistry);
initializedWizards.clear();
selectionChangedListener.clear();
}
@@ -104,7 +107,7 @@
*/
public void dispose() {
super.dispose();
-
+
selectedContext = null;
selectedSystemType = null;
selectedWizardCanFinishEarly = false;
@@ -125,7 +128,7 @@
/**
* Restrict to a single system type. Users will not be shown the system type selection page in
* the wizard.
- *
+ *
* @param systemType the system type to restrict to.
*/
public void restrictToSystemType(IRSESystemType systemType) {
@@ -134,12 +137,12 @@
/**
* Restrict system types. Users will only be able to choose from the given system types.
- *
+ *
* @param systemTypes the system types to restrict to.
*/
public void restrictToSystemTypes(IRSESystemType[] systemTypes) {
assert systemTypes != null;
-
+
restrictedSystemTypes = systemTypes;
onlySystemType = restrictedSystemTypes.length == 1;
mainPage.restrictToSystemTypes(restrictedSystemTypes);
@@ -149,13 +152,13 @@
/**
* Returns if or if not the main new connection wizard has been restricted to only
* one system type.
- *
+ *
* @return True
if the wizard is restricted to only one system type, false
otherwise.
*/
public final boolean isRestrictedToSingleSystemType() {
return onlySystemType;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
*/
@@ -177,7 +180,7 @@
*/
private void fireSelectionChanged() {
if (getSelection() == null) return;
-
+
SelectionChangedEvent event = new SelectionChangedEvent(this, getSelection());
Iterator iterator = selectionChangedListener.iterator();
while (iterator.hasNext()) {
@@ -185,7 +188,7 @@
listener.selectionChanged(event);
}
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
*/
@@ -203,11 +206,11 @@
if (selectedContext != null) {
selectionElements.add(selectedContext);
}
-
+
// construct the selection now
selection = new StructuredSelection(selectionElements);
}
-
+
return selection;
}
@@ -223,7 +226,7 @@
} else {
selectedSystemType = null;
}
-
+
// signal the system type change
onSelectedSystemTypeChanged();
}
@@ -233,7 +236,7 @@
* Sets the currently selected context for the wizard as know by the caller
* of this method. The selected context is not interpreted by the main wizard,
* the selection is passed on as is to the nested wizards.
- *
+ *
* @param selectedContext The selected context or null
.
*/
public void setSelectedContext(ISelection selectedContext) {
@@ -246,7 +249,7 @@
* the connections context system type and invoke
* setSelection(...)
to apply the system type as the selected
* one.
- *
+ *
* @param connectionContext The connection context or null
.
*/
public void setConnectionContext(IHost connectionContext) {
@@ -259,7 +262,7 @@
if (systemType != null) setSelection(new StructuredSelection(systemType));
}
}
-
+
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
*/
@@ -269,7 +272,7 @@
/**
* Returns the wizard for the currently selected system type.
- *
+ *
* @return The wizard for the currently selected system type. Must be never null
.
*/
public IWizard getSelectedWizard() {
@@ -284,9 +287,11 @@
protected void onSelectedSystemTypeChanged() {
// unregister the previous selected wizard as selection changed listener
if (selectedWizard instanceof ISelectionChangedListener) removeSelectionChangedListener((ISelectionChangedListener)selectedWizard);
-
+
// Check if a wizard is registered for the selected system type
- IRSENewConnectionWizardDescriptor descriptor = getSelection() != null ? RSENewConnectionWizardRegistry.getInstance().getWizardForSelection((IStructuredSelection)getSelection()) : null;
+ IRSENewConnectionWizardDescriptor descriptor = getSelection() != null ?
+ wizardRegistry.getWizardForSelection((IStructuredSelection) getSelection())
+ : null;
if (descriptor != null) {
selectedWizard = descriptor.getWizard();
selectedWizardCanFinishEarly = descriptor.canFinishEarly();
@@ -294,7 +299,7 @@
selectedWizard = null;
selectedWizardCanFinishEarly = false;
}
-
+
// Check on the container association of the selected wizard.
if (getContainer() != null && selectedWizard != null && !getContainer().equals(selectedWizard.getContainer())) {
selectedWizard.setContainer(getContainer());
@@ -302,23 +307,23 @@
// Check if the wizard defines it's own window title. If not, make sure to pass the
// main wizards window title.
- if (selectedWizard instanceof Wizard
+ if (selectedWizard instanceof Wizard
&& (selectedWizard.getWindowTitle() == null || "".equals(selectedWizard.getWindowTitle()))) { //$NON-NLS-1$
((Wizard)selectedWizard).setWindowTitle(getWindowTitle());
}
-
+
// if the newly selected wizard is the default RSE new connection wizard
// and the selected context is non-null, set the selected context to the
// default RSE new connection wizard.
if (selectedWizard instanceof RSEDefaultNewConnectionWizard) {
((RSEDefaultNewConnectionWizard)selectedWizard).setSelectedContext(connectionContext);
}
-
+
// register the newly selected wizard as selection changed listener
if (selectedWizard instanceof ISelectionChangedListener) {
addSelectionChangedListener((ISelectionChangedListener)selectedWizard);
}
-
+
// Initialize the wizard pages and remember which wizard we have initialized already.
// 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
@@ -360,10 +365,10 @@
saveWidgetValues();
if (getSelectedWizard() != null) nextPage = getSelectedWizard().getStartingPage();
}
-
+
if (nextPage == null) super.getNextPage(page);
if (nextPage != null) nextPage.setPreviousPage(page);
-
+
return nextPage;
}
@@ -375,16 +380,16 @@
// wizard can finish early
return selectedWizardCanFinishEarly;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.rse.ui.wizards.AbstractSystemWizard#performFinish()
*/
public boolean performFinish() {
// Save the current selection to the dialog settings
saveWidgetValues();
-
+
if (mainPage != null) mainPage.saveWidgetValues();
-
+
return true;
}
@@ -402,7 +407,7 @@
}
}
}
-
+
/**
* Restore the persistent saved wizard state. This method
* is called from the wizards constructor.
Index: UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java,v
retrieving revision 1.12
diff -u -r1.12 RSENewConnectionWizardSelectionPage.java
--- UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java 29 May 2008 22:16:42 -0000 1.12
+++ UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java 3 Jun 2008 08:53:16 -0000
@@ -1,14 +1,15 @@
/*******************************************************************************
* Copyright (c) 2007, 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:
+ * 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.
* Martin Oberhuber (Wind River) - [186779] Fix IRSESystemType.getAdapter()
* Uwe Stieber (Wind River) - [209193] RSE new connection wizard shows empty categories if typing something into the filter
+ * Martin Oberhuber (Wind River) - [235197][api] Unusable wizard after cancelling on first page
*******************************************************************************/
package org.eclipse.rse.ui.wizards.newconnection;
@@ -67,23 +68,24 @@
*/
public class RSENewConnectionWizardSelectionPage extends WizardPage {
private final String helpId = RSEUIPlugin.HELPPREFIX + "wncc0000"; //$NON-NLS-1$;
-
+
private static final String EXPANDED_CATEGORIES_SETTINGS_ID = "filteredTree.expandedCatogryIds"; //$NON-NLS-1$
private static final String[] DEFAULT_EXPANDED_CATEGORY_IDS = new String[] { "org.eclipse.rse.ui.wizards.newconnection.default.category" }; //$NON-NLS-1$
-
+
private IRSESystemType[] restrictedSystemTypes;
+ private RSENewConnectionWizardRegistry wizardRegistry;
private FilteredTree filteredTree;
private PatternFilter filteredTreeFilter;
private ViewerFilter filteredTreeWizardStateFilter;
private RSENewConnectionWizardSelectionTreeDataManager filteredTreeDataManager;
-
+
/**
* Internal class. The wizard state filter is responsible to filter
- * out any not enabled or filtered wizard from the tree.
+ * out any not enabled or filtered wizard from the tree.
*/
private class NewConnectionWizardStateFilter extends ViewerFilter {
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@@ -92,18 +94,18 @@
if (children.length > 0) {
return filter(viewer, element, children).length > 0;
}
-
+
if (element instanceof RSENewConnectionWizardSelectionTreeElement) {
// the system type must be enabled, otherwise it is filtered out
IRSESystemType systemType = ((RSENewConnectionWizardSelectionTreeElement)element).getSystemType();
if (systemType == null) return false;
-
+
// if the page is restricted to a set of system types, check on them first
IRSESystemType[] restricted = getRestrictToSystemTypes();
if (restricted != null && restricted.length > 0) {
if (!Arrays.asList(restricted).contains(systemType)) return false;
}
-
+
// First, adapt the system type to a viewer filter and pass on the select request
// to the viewer filter adapter if available
ViewerFilter filter = (ViewerFilter)(systemType.getAdapter(ViewerFilter.class));
@@ -114,19 +116,19 @@
// Second, double check if the system type passed the viewer filter but is disabled.
if (!systemType.isEnabled()) return false;
}
-
+
// In all other cases, the element passes the filter
return true;
}
}
-
+
/**
* Internal class. The wizard viewer comparator is responsible for
* the sorting in the tree. Current implementation is not prioritizing
* categories.
*/
private class NewConnectionWizardViewerComparator extends ViewerComparator {
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ViewerComparator#isSorterProperty(java.lang.Object, java.lang.String)
*/
@@ -135,28 +137,41 @@
return property.equals(IBasicPropertyConstants.P_TEXT);
}
}
-
+
/**
* Constructor.
+ * @since org.eclipse.rse.ui 3.0
*/
- public RSENewConnectionWizardSelectionPage() {
+ public RSENewConnectionWizardSelectionPage(RSENewConnectionWizardRegistry wizardRegistry) {
super("RSENewConnectionWizardSelectionPage"); //$NON-NLS-1$
setTitle(getDefaultTitle());
setDescription(getDefaultDescription());
+ this.wizardRegistry = wizardRegistry;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @deprecated Use
+ * {@link #RSENewConnectionWizardSelectionPage(RSENewConnectionWizardRegistry)}
+ * to control the lifetime of the wizard registry
+ */
+ public RSENewConnectionWizardSelectionPage() {
+ this(RSENewConnectionWizardRegistry.getInstance());
}
/**
* Returns the default page title.
- *
+ *
* @return The default page title. Must be never null
.
*/
protected String getDefaultTitle() {
return SystemResources.RESID_NEWCONN_MAIN_PAGE_TITLE;
}
-
+
/**
* Returns the default page description.
- *
+ *
* @return The default page description. Must be never null
.
*/
protected String getDefaultDescription() {
@@ -165,16 +180,16 @@
/**
* Restrict the selectable wizards to the given set of system types.
- *
+ *
* @param systemTypes The list of the system types to restrict the page to or null
.
*/
public void restrictToSystemTypes(IRSESystemType[] systemTypes) {
this.restrictedSystemTypes = systemTypes;
}
-
+
/**
* Returns the list of system types the page is restricted to.
- *
+ *
* @return The list of system types the page is restricted to or null
.
*/
public IRSESystemType[] getRestrictToSystemTypes() {
@@ -188,22 +203,22 @@
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- Label label = new Label(composite, SWT.NONE);
- label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- label.setText(SystemResources.RESID_CONNECTION_SYSTEMTYPE_LABEL + ":"); //$NON-NLS-1$
- label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- filteredTreeFilter = new RSEWizardSelectionTreePatternFilter();
- filteredTree = new FilteredTree(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, filteredTreeFilter);
+ Label label = new Label(composite, SWT.NONE);
+ label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ label.setText(SystemResources.RESID_CONNECTION_SYSTEMTYPE_LABEL + ":"); //$NON-NLS-1$
+ label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ filteredTreeFilter = new RSEWizardSelectionTreePatternFilter();
+ filteredTree = new FilteredTree(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, filteredTreeFilter);
filteredTree.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.heightHint = 325; layoutData.widthHint = 450;
filteredTree.setLayoutData(layoutData);
-
- final TreeViewer treeViewer = filteredTree.getViewer();
- treeViewer.setContentProvider(new RSEWizardSelectionTreeContentProvider());
- // Explicitly allow the tree items to get decorated!!!
+
+ final TreeViewer treeViewer = filteredTree.getViewer();
+ treeViewer.setContentProvider(new RSEWizardSelectionTreeContentProvider());
+ // Explicitly allow the tree items to get decorated!!!
treeViewer.setLabelProvider(new DecoratingLabelProvider(new RSEWizardSelectionTreeLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
treeViewer.setComparator(new NewConnectionWizardViewerComparator());
@@ -234,19 +249,19 @@
}
}
});
-
- filteredTreeDataManager = new RSENewConnectionWizardSelectionTreeDataManager();
+
+ filteredTreeDataManager = new RSENewConnectionWizardSelectionTreeDataManager(wizardRegistry);
treeViewer.setInput(filteredTreeDataManager);
-
+
// apply the standard dialog font
Dialog.applyDialogFont(composite);
-
+
setControl(composite);
-
+
// Restore the expanded state of the category items within the tree
// before initializing the selection.
restoreWidgetValues();
-
+
// Initialize the selection in the tree
if (getWizard() instanceof ISelectionProvider) {
ISelectionProvider selectionProvider = (ISelectionProvider)getWizard();
@@ -259,10 +274,10 @@
}
}
}
-
+
// we put the initial focus into the filter field
filteredTree.getFilterControl().setFocus();
-
+
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), helpId);
}
@@ -288,7 +303,7 @@
selectionProvider.setSelection(null);
}
}
-
+
// Update the wizard container UI elements
IWizardContainer container = getContainer();
if (container != null && container.getCurrentPage() != null) {
@@ -313,7 +328,7 @@
return settings;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
*/
@@ -338,36 +353,36 @@
for (int i = 0; i < expandedCategories.length; i++) {
String categoryId = expandedCategories[i];
if (categoryId != null && !"".equals(categoryId.trim())) { //$NON-NLS-1$
- IRSEWizardRegistryElement registryElement = RSENewConnectionWizardRegistry.getInstance().findElementById(categoryId);
+ IRSEWizardRegistryElement registryElement = wizardRegistry.findElementById(categoryId);
if (registryElement instanceof IRSEWizardCategory) {
RSEWizardSelectionTreeElement treeElement = filteredTreeDataManager.getTreeElementForCategory((IRSEWizardCategory)registryElement);
if (treeElement != null) expanded.add(treeElement);
}
}
}
-
+
if (expanded.size() > 0) filteredTree.getViewer().setExpandedElements(expanded.toArray());
}
}
}
-
+
/**
* Saves the tree state to the dialog settings.
*/
public void saveWidgetValues() {
IDialogSettings settings = getDialogSettings();
if (settings != null) {
- List expandedCategories = new ArrayList();
+ List expandedCategories = new ArrayList();
Object[] expanded = filteredTree.getViewer().getVisibleExpandedElements();
- for (int i = 0; i < expanded.length; i++) {
- if (expanded[i] instanceof RSEWizardSelectionTreeElement) {
- IRSEWizardRegistryElement registryElement = ((RSEWizardSelectionTreeElement)expanded[i]).getWizardRegistryElement();
- if (registryElement instanceof IRSEWizardCategory) {
- expandedCategories.add(((IRSEWizardCategory)registryElement).getId());
- }
- }
- }
- settings.put(EXPANDED_CATEGORIES_SETTINGS_ID, (String[])expandedCategories.toArray(new String[expandedCategories.size()]));
+ for (int i = 0; i < expanded.length; i++) {
+ if (expanded[i] instanceof RSEWizardSelectionTreeElement) {
+ IRSEWizardRegistryElement registryElement = ((RSEWizardSelectionTreeElement)expanded[i]).getWizardRegistryElement();
+ if (registryElement instanceof IRSEWizardCategory) {
+ expandedCategories.add(((IRSEWizardCategory)registryElement).getId());
+ }
+ }
+ }
+ settings.put(EXPANDED_CATEGORIES_SETTINGS_ID, (String[])expandedCategories.toArray(new String[expandedCategories.size()]));
}
}
}
\ No newline at end of file
Index: UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardRegistry.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardRegistry.java,v
retrieving revision 1.7
diff -u -r1.7 RSENewConnectionWizardRegistry.java
--- UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardRegistry.java 3 Jun 2008 08:51:37 -0000 1.7
+++ UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardRegistry.java 3 Jun 2008 08:53:16 -0000
@@ -10,6 +10,7 @@
* Javier Montalvo Orus (Symbian) - [174992] default wizard hides special ones
* David McKnight (IBM) - [216252] MessageFormat.format -> NLS.bind
* Martin Oberhuber (Wind River) - [235148] get rid of dead code for caching
+ * Martin Oberhuber (Wind River) - [235197][api] Unusable wizard after cancelling on first page
*******************************************************************************/
package org.eclipse.rse.ui.wizards.newconnection;
@@ -27,8 +28,14 @@
/**
* RSE New connection wizard registry implementation.
*
+ * Gives access to the new connection wizards contributed by users, by looking
+ * up and creating wizard instances based on search criteria like system type or
+ * wizard id. Clients should create a new wizard registry instance for each UI
+ * "session" using the registry. For instance, an invocation of the new
+ * connection wizard (which delegates to sub-wizards) should always create a new
+ * registry instance.
+ *
* @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients.
*/
public class RSENewConnectionWizardRegistry extends RSEAbstractWizardRegistry {
@@ -40,7 +47,16 @@
}
/**
- * Return the parser instance.
+ * Return the global new connection wizard registry instance. Note that
+ * using a global registry is problematic because sub-wizard state (and thus
+ * wizard instances) should not be re-used between separate invocations of a
+ * wizard by the user.
+ *
+ * @deprecated Instantiate a wizard registry yourself using
+ * {@link #RSENewConnectionWizardRegistry()} in order to control
+ * the lifetime of your wizard registry. Lifetime should be
+ * limited to the time a wizard is active. Each new wizard
+ * invocation should create a new wizard registry.
*/
public static RSENewConnectionWizardRegistry getInstance() {
return LazyInstanceHolder.instance;
@@ -48,8 +64,10 @@
/**
* Constructor.
+ *
+ * @since org.eclipse.rse.ui 3.0
*/
- protected RSENewConnectionWizardRegistry() {
+ public RSENewConnectionWizardRegistry() {
super();
}
Index: UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionTreeDataManager.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionTreeDataManager.java,v
retrieving revision 1.4
diff -u -r1.4 RSENewConnectionWizardSelectionTreeDataManager.java
--- UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionTreeDataManager.java 10 May 2007 12:39:02 -0000 1.4
+++ UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionTreeDataManager.java 3 Jun 2008 08:53:16 -0000
@@ -1,13 +1,14 @@
/*******************************************************************************
- * Copyright (c) 2007 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:
+ * Copyright (c) 2007, 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.
* Martin Oberhuber (Wind River) - [177523] Unify singleton getter methods
+ * Martin Oberhuber (Wind River) - [235197][api] Unusable wizard after cancelling on first page
*******************************************************************************/
package org.eclipse.rse.ui.wizards.newconnection;
@@ -31,21 +32,33 @@
// into RSENewConnectionWizardSelectionTreeElement object instances as the tree
// and the wizard using these different object instances in their selections!
private Map elementMap;
-
+
// The category map is doing the same as the element but for categories.
private Map categoryMap;
-
+
/**
* Constructor.
+ * @since org.eclipse.rse.ui 3.0
+ */
+ public RSENewConnectionWizardSelectionTreeDataManager(RSENewConnectionWizardRegistry wizardRegistry) {
+ super(wizardRegistry);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @deprecated Use
+ * {@link #RSENewConnectionWizardSelectionTreeDataManager(RSENewConnectionWizardRegistry)}
+ * to control the lifetime of the wizard registry
*/
public RSENewConnectionWizardSelectionTreeDataManager() {
- super();
+ this(RSENewConnectionWizardRegistry.getInstance());
}
/**
* Returns the corresponding wizard selection tree element for the specified
* system type.
- *
+ *
* @param systemType The system type. Must be not null
.
* @return The wizard selection tree element or null
.
*/
@@ -53,10 +66,10 @@
assert systemType != null;
return (RSENewConnectionWizardSelectionTreeElement)elementMap.get(systemType);
}
-
+
/**
* Returns the corresponding wizard selection tree element for the specified category.
- *
+ *
* @param category The category. Must be not null
.
* @return The wizard selection tree element or null
.
*/
@@ -64,7 +77,7 @@
assert category != null;
return (RSEWizardSelectionTreeElement)categoryMap.get(category);
}
-
+
/* (non-Javadoc)
* @see org.eclipse.rse.ui.internal.wizards.newconnection.RSEAbstractWizardSelectionTreeDataManager#initialize(java.util.Set)
*/
@@ -74,17 +87,17 @@
// from the base classes constructor!
if (elementMap == null) elementMap = new HashMap();
elementMap.clear();
-
+
if (categoryMap == null) categoryMap = new HashMap();
categoryMap.clear();
-
+
// The new connection wizard selection is combining system types
// with registered new connection wizard.
IRSESystemType[] systemTypes = RSECorePlugin.getTheCoreRegistry().getSystemTypes();
for (int i = 0; i < systemTypes.length; i++) {
IRSESystemType systemType = systemTypes[i];
// for the system type, lookup the corresponding wizard descriptor
- IRSENewConnectionWizardDescriptor descriptor = RSENewConnectionWizardRegistry.getInstance().getWizardForSystemType(systemType);
+ IRSENewConnectionWizardDescriptor descriptor = ((RSENewConnectionWizardRegistry)getWizardRegistry()).getWizardForSystemType(systemType);
if (descriptor == null) {
// a system type without even the default RSE new connection wizard associated
// is bad and should never happen. Drop a warning and skip the system type.
@@ -92,19 +105,19 @@
RSEUIPlugin.getDefault().getLogger().logWarning(message);
continue;
}
-
+
// ok, we have wizard for the current system type. Create the wizard selection tree element
// and categorise the wizard.
RSENewConnectionWizardSelectionTreeElement wizardElement = new RSENewConnectionWizardSelectionTreeElement(systemType, descriptor);
wizardElement.setParentElement(null);
elementMap.put(systemType, wizardElement);
-
+
String categoryId = descriptor.getCategoryId();
// if the wizard is of type IRSEDynamicNewConnectionWizard, call validateCategoryId!
if (descriptor.getWizard() instanceof IRSEDynamicNewConnectionWizard) {
categoryId = ((IRSEDynamicNewConnectionWizard)descriptor.getWizard()).validateCategoryId(systemType, categoryId);
}
-
+
// if the category id is null, the wizard will be sorted in as root element
if (categoryId == null) {
rootElement.add(wizardElement);
@@ -112,14 +125,14 @@
}
// get the category. If failing, the wizard will end up as root element
- IRSEWizardRegistryElement candidate = RSENewConnectionWizardRegistry.getInstance().findElementById(categoryId);
+ IRSEWizardRegistryElement candidate = getWizardRegistry().findElementById(categoryId);
if (!(candidate instanceof IRSEWizardCategory)) {
rootElement.add(wizardElement);
continue;
}
-
+
IRSEWizardCategory category = (IRSEWizardCategory)candidate;
-
+
// if the category id is not null, check if we have accessed the category
// already once.
RSEWizardSelectionTreeElement categoryElement = (RSEWizardSelectionTreeElement)categoryMap.get(category);
@@ -130,23 +143,23 @@
}
categoryElement.add(wizardElement);
wizardElement.setParentElement(categoryElement);
-
+
// The category itself does not have a parent category, the category is a root element
String parentCategoryId = category.getParentCategoryId();
if (parentCategoryId == null) {
rootElement.add(categoryElement);
continue;
}
-
+
while (parentCategoryId != null) {
- candidate = RSENewConnectionWizardRegistry.getInstance().findElementById(parentCategoryId);
+ candidate = getWizardRegistry().findElementById(parentCategoryId);
if (!(candidate instanceof IRSEWizardCategory)) {
rootElement.add(categoryElement);
break;
}
-
+
category = (IRSEWizardCategory)candidate;
-
+
RSEWizardSelectionTreeElement parentElement = (RSEWizardSelectionTreeElement)categoryMap.get(category);
if (parentElement == null) {
parentElement = new RSEWizardSelectionTreeElement(category);
@@ -155,7 +168,7 @@
}
parentElement.add(categoryElement);
categoryElement.setParentElement(parentElement);
-
+
categoryElement = parentElement;
parentCategoryId = category.getParentCategoryId();
}
Index: UI/org/eclipse/rse/ui/wizards/registries/RSEAbstractWizardSelectionTreeDataManager.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEAbstractWizardSelectionTreeDataManager.java,v
retrieving revision 1.1
diff -u -r1.1 RSEAbstractWizardSelectionTreeDataManager.java
--- UI/org/eclipse/rse/ui/wizards/registries/RSEAbstractWizardSelectionTreeDataManager.java 19 Feb 2007 16:43:20 -0000 1.1
+++ UI/org/eclipse/rse/ui/wizards/registries/RSEAbstractWizardSelectionTreeDataManager.java 3 Jun 2008 08:53:16 -0000
@@ -1,12 +1,13 @@
/*******************************************************************************
- * Copyright (c) 2007 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:
+ * Copyright (c) 2007, 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.
+ * Martin Oberhuber (Wind River) - [235197][api] Unusable wizard after cancelling on first page
*******************************************************************************/
package org.eclipse.rse.ui.wizards.registries;
@@ -19,20 +20,46 @@
*/
public abstract class RSEAbstractWizardSelectionTreeDataManager {
private final Set rootElement = new HashSet();
-
+ private RSEAbstractWizardRegistry wizardRegistry;
+
/**
* Constructor.
+ * @since org.eclipse.rse.ui 3.0
*/
- public RSEAbstractWizardSelectionTreeDataManager() {
+ public RSEAbstractWizardSelectionTreeDataManager(RSEAbstractWizardRegistry wizardRegistry) {
+ this.wizardRegistry = wizardRegistry;
rootElement.clear();
-
+
// start the initialization of the data tree.
initialize(rootElement);
}
-
+
/**
- * Returns the children of this wizard selection tree element.
+ * Constructor.
*
+ * @deprecated Use
+ * {@link #RSEAbstractWizardSelectionTreeDataManager(RSEAbstractWizardRegistry)}
+ * to control the lifetime of the wizard registry
+ */
+ public RSEAbstractWizardSelectionTreeDataManager() {
+ this(null);
+ }
+
+ /**
+ * Returns the currently active wizard registry, which allows looking up
+ * wizard instances by various search keys. The wizard registry is valid as
+ * long as a particular wizard is open.
+ *
+ * @return the current wizard registry
+ * @since org.eclipse.rse.ui 3.0
+ */
+ protected RSEAbstractWizardRegistry getWizardRegistry() {
+ return wizardRegistry;
+ }
+
+ /**
+ * Returns the children of this wizard selection tree element.
+ *
* @return The list of children, May be empty but never null
.
*/
public RSEWizardSelectionTreeElement[] getChildren() {
@@ -41,7 +68,7 @@
/**
* Initialize the data tree.
- *
+ *
* @param rootElement The root element which is the container for all user visible tree root elements. Must be not null
.
*/
protected abstract void initialize(Set rootElement);