diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemNewConnectionAction.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemNewConnectionAction.java index 59beac6d410..c10b814f688 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemNewConnectionAction.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemNewConnectionAction.java @@ -48,7 +48,7 @@ public class SystemNewConnectionAction extends SystemBaseWizardAction { private boolean fromPopupMenu = true; private ISelectionProvider sp; private String[] restrictSystemTypesTo; - private String systemTypeFromSelectedContext; + private IHost selectedContext; /** * Constructor. @@ -105,7 +105,7 @@ public class SystemNewConnectionAction extends SystemBaseWizardAction { */ protected IWizard createWizard() { RSEMainNewConnectionWizard newConnWizard = new RSEMainNewConnectionWizard(); - if (!fromPopupMenu && (sp != null)) { + if (!fromPopupMenu && sp != null) { setSelection(sp.getSelection()); } @@ -121,8 +121,9 @@ public class SystemNewConnectionAction extends SystemBaseWizardAction { // if there is a system type available from the current context, this system type // is selected by default - if (systemTypeFromSelectedContext != null && RSECorePlugin.getDefault().getRegistry().getSystemType(systemTypeFromSelectedContext) != null) { - newConnWizard.setSelection(new StructuredSelection(RSECorePlugin.getDefault().getRegistry().getSystemType(systemTypeFromSelectedContext))); + if (selectedContext != null){ + // send a selection changed event to the wizard with the selected context. + newConnWizard.setSelection(new StructuredSelection(selectedContext)); } return newConnWizard; @@ -202,7 +203,7 @@ public class SystemNewConnectionAction extends SystemBaseWizardAction { } } - systemTypeFromSelectedContext = conn != null ? conn.getSystemType() : null; + selectedContext = conn; } return enable; } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java index f8b3df177d3..1c4275faa00 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java @@ -19,6 +19,7 @@ package org.eclipse.rse.ui.wizards.newconnection; import java.util.ArrayList; import java.util.Arrays; import java.util.Hashtable; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Vector; @@ -27,7 +28,6 @@ import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.rse.core.IRSESystemType; -import org.eclipse.rse.core.RSEPreferencesManager; import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.ISystemNewConnectionWizardPage; @@ -61,14 +61,20 @@ public class RSEDefaultNewConnectionWizard extends RSEAbstractNewConnectionWizar private String[] activeProfileNames = null; private int privateProfileIndex = -1; private ISystemProfile privateProfile = null; - private IHost currentlySelectedConnection = null; + private IHost selectedContext = null; private static String lastProfile = null; /** * Constructor. */ public RSEDefaultNewConnectionWizard() { - activeProfileNames = SystemStartHere.getSystemProfileManager().getActiveSystemProfileNames(); + String[] profiles = SystemStartHere.getSystemProfileManager().getActiveSystemProfileNames(); + // normalize the profiles by sorting our null or empty profile names + List normalized = new LinkedList(); + for (int i = 0; i < profiles.length; i++) { + if (profiles[i] != null && !"".equals(profiles[i].trim())) normalized.add(profiles[i]); //$NON-NLS-1$ + } + activeProfileNames = (String[])normalized.toArray(new String[normalized.size()]); } /* (non-Javadoc) @@ -86,7 +92,7 @@ public class RSEDefaultNewConnectionWizard extends RSEAbstractNewConnectionWizar activeProfileNames = null; privateProfileIndex = -1; privateProfile = null; - currentlySelectedConnection = null; + selectedContext = null; } /* (non-Javadoc) @@ -109,51 +115,15 @@ public class RSEDefaultNewConnectionWizard extends RSEAbstractNewConnectionWizar try { mainPage = createMainPage(getSystemType()); mainPage.setConnectionNameValidators(SystemConnectionForm.getConnectionNameValidators()); - mainPage.setCurrentlySelectedConnection(currentlySelectedConnection); + mainPage.setCurrentlySelectedConnection(selectedContext); - if (defaultUserId != null) - mainPage.setUserId(defaultUserId); - if (defaultConnectionName != null) - mainPage.setConnectionName(defaultConnectionName); - if (defaultHostName != null) - mainPage.setHostName(defaultHostName); + if (defaultUserId != null) mainPage.setUserId(defaultUserId); + if (defaultConnectionName != null) mainPage.setConnectionName(defaultConnectionName); + if (defaultHostName != null) mainPage.setHostName(defaultHostName); - if (mainPage != null && getSystemType() != null) - mainPage.setSystemType(getSystemType()); + if (mainPage != null && getSystemType() != null) mainPage.setSystemType(getSystemType()); - // If the team profile is available and active, then we default to the team profile. - // If the team profile is not available or inactive, the default private system profile - // is used (if available). - List profileNames = activeProfileNames != null ? Arrays.asList(activeProfileNames) : new ArrayList(); - - String defaultProfileName = RSEPreferencesManager.getDefaultTeamProfileName(); - if (!profileNames.contains(defaultProfileName)) { - ISystemProfile defaultPrivateProfile = RSEUIPlugin.getDefault().getSystemRegistry().getSystemProfileManager().getDefaultPrivateSystemProfile(); - if (defaultPrivateProfile != null) defaultProfileName = defaultPrivateProfile.getName(); - } - - mainPage.setProfileNames(activeProfileNames); - // if there is no connection currently selected, default the profile to - // place the new connection into to be the first of: - // 1. the profile the last connection was created in, in this session - // 3. the default profile. - if (currentlySelectedConnection == null) { - if (lastProfile != null && "".equals(lastProfile)) lastProfile = null; //$NON-NLS-1$ - if (lastProfile == null && activeProfileNames != null) { - if (defaultProfileName != null && profileNames.contains(defaultProfileName)) - lastProfile = defaultProfileName; - - // find the first non empty profile if any. - for (int i = 0; i < activeProfileNames.length && lastProfile == null; i++) { - if (!"".equals(activeProfileNames[i])) { //$NON-NLS-1$ - lastProfile = activeProfileNames[i]; - } - } - } - - if (lastProfile != null) - mainPage.setProfileNamePreSelection(lastProfile); - } + updateDefaultSelectedProfile(); addPage(mainPage); } catch (Exception exc) { @@ -190,10 +160,63 @@ public class RSEDefaultNewConnectionWizard extends RSEAbstractNewConnectionWizar } /** - * Set the currently selected connection. Used to better default entry fields. + * Calculates the default profile name to propose on the default new + * connection wizard main page. + * + * Expected order of default profile selection: + * 1. If a connection is selected, the default profile is the one from the connection. + * 2. If the wizard is invoked the 1st time, the default private system profile is the + * default profile. + * 3. If the wizard is invoked the 2nd time and a last profile is remembered, the last + * profile is the default profile. + * 4. The first non-empty profile from the list of active profiles is the default profile. + * + * In case a profile name is not in the list of currently active profiles, the logic will + * fall trough to the next lower level. */ - public void setCurrentlySelectedConnection(IHost conn) { - this.currentlySelectedConnection = conn; + protected void updateDefaultSelectedProfile() { + if (mainPage == null) return; + + List profileNames = activeProfileNames != null ? Arrays.asList(activeProfileNames) : new ArrayList(); + mainPage.setProfileNames(activeProfileNames); + + // 1. If a connection is selected, the default profile is the one from the connection. + String defaultProfileName = selectedContext != null ? selectedContext.getSystemProfileName() : null; + if (defaultProfileName == null || !profileNames.contains(defaultProfileName)) { + // 3. If the wizard is invoked the 2nd time and a last profile is remembered, the last + // profile is the default profile. + if (lastProfile != null && "".equals(lastProfile)) lastProfile = null; //$NON-NLS-1$ + defaultProfileName = lastProfile; + if (defaultProfileName == null || !profileNames.contains(defaultProfileName)) { + // 2. If the wizard is invoked the 1st time, the default private system profile is the + // default profile. + ISystemProfile defaultPrivateProfile = RSEUIPlugin.getDefault().getSystemRegistry().getSystemProfileManager().getDefaultPrivateSystemProfile(); + if (defaultPrivateProfile != null) defaultProfileName = defaultPrivateProfile.getName(); + if (defaultProfileName == null || !profileNames.contains(defaultProfileName)) { + // 4. The first non-empty profile from the list of active profiles is the default profile. + // Note: The profile names get normalized within the constructor. + if (activeProfileNames.length > 0) defaultProfileName = activeProfileNames[0]; + } + } + } + + // set the default profile to the page and remember it. + if (defaultProfileName != null) { + mainPage.setProfileNamePreSelection(defaultProfileName); + // do not update the last selected profile marker if the default profile + // name came for the selected context. + if (selectedContext == null || !defaultProfileName.equals(selectedContext.getSystemProfileName())) + lastProfile = defaultProfileName; + } + + } + + /** + * Set the currently selected context. Used to better default entry fields. + */ + public void setSelectedContext(IHost selectedContext) { + this.selectedContext = selectedContext; + updateDefaultSelectedProfile(); } /** diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java index 7b9e695beef..0d58358d0aa 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java @@ -34,6 +34,7 @@ import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.rse.core.IRSESystemType; import org.eclipse.rse.core.RSECorePlugin; +import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.ui.ISystemIconConstants; import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.SystemResources; @@ -47,6 +48,8 @@ import org.eclipse.ui.IWorkbench; public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, ISelectionProvider { protected static final String LAST_SELECTED_SYSTEM_TYPE_ID = "lastSelectedSystemTypeId"; //$NON-NLS-1$ + private IHost selectedContext; + private IWizard selectedWizard; private IRSESystemType selectedSystemType; private boolean selectedWizardCanFinishEarly; @@ -73,6 +76,7 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS if (settings.getSection(sectionName) == null) settings.addNewSection(sectionName); setDialogSettings(settings.getSection(sectionName)); + selectedContext = null; mainPage = new RSENewConnectionWizardSelectionPage(); initializedWizards.clear(); selectionChangedListener.clear(); @@ -87,6 +91,7 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS public void dispose() { super.dispose(); + selectedContext = null; selectedWizard = null; selectedSystemType = null; selectedWizardCanFinishEarly = false; @@ -170,13 +175,24 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) */ public void setSelection(ISelection selection) { - if (selection instanceof IStructuredSelection - && ((IStructuredSelection)selection).getFirstElement() instanceof IRSESystemType) { - selectedSystemType = (IRSESystemType)((IStructuredSelection)selection).getFirstElement(); - } else { - selectedSystemType = null; + if (selection instanceof IStructuredSelection) { + IStructuredSelection sel = (IStructuredSelection)selection; + if (sel.getFirstElement() instanceof IRSESystemType) { + selectedSystemType = (IRSESystemType)((IStructuredSelection)selection).getFirstElement(); + } else if (sel.getFirstElement() instanceof IHost) { + selectedContext = (IHost)sel.getFirstElement(); + if (selectedContext.getSystemType() != null) { + String systemTypeName = selectedContext.getSystemType(); + IRSESystemType systemType = RSECorePlugin.getDefault().getRegistry().getSystemType(systemTypeName); + if (systemType != null) { + selectedSystemType = systemType; + } + } + } else { + selectedSystemType = null; + } + onSelectedSystemTypeChanged(); } - onSelectedSystemTypeChanged(); } /* (non-Javadoc) @@ -214,6 +230,13 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS selectedWizardCanFinishEarly = false; } + // 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(selectedContext); + } + // register the newly selected wizard as selection changed listener if (selectedWizard instanceof ISelectionChangedListener) { addSelectionChangedListener((ISelectionChangedListener)selectedWizard); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java index b821f43d154..b4fdd0b9cc4 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSENewConnectionWizardSelectionPage.java @@ -176,7 +176,7 @@ public class RSENewConnectionWizardSelectionPage extends WizardPage { 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 = 275; layoutData.widthHint = 450; + layoutData.heightHint = 325; layoutData.widthHint = 450; filteredTree.setLayoutData(layoutData); final TreeViewer treeViewer = filteredTree.getViewer(); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java index 2a12da099a5..14c74826131 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java @@ -53,7 +53,7 @@ public class RSEWizardDescriptor extends RSEWizardRegistryElement implements IRS wizard = (IWizard)element.createExecutableExtension("class"); //$NON-NLS-1$ } catch (CoreException e) { String message = "RSE new connection wizard failed creation (plugin: {0}, id: {1})."; //$NON-NLS-1$ - message = MessageFormat.format(message, new Object[] { element.getContributor().getName(), element.getDeclaringExtension().getSimpleIdentifier()}); + message = MessageFormat.format(message, new Object[] { element.getContributor().getName(), element.getAttribute("id")}); //$NON-NLS-1$ RSECorePlugin.getDefault().getLogger().logError(message, e); } }