# HG changeset patch # User Ed Swartz # Date 1262195023 21600 # Node ID 8ecd45ef360e78c1e4251960784c4435872667a2 # Parent 477762bc3b317d869ecfcc8b3cb12654043fdca8 Fix up some issues found when using the random connected service provider. Also, move validation checks of IClientServiceSiteUI2 into a method of that interface, since we need to handle the case where the default connection is currently incompatible. diff -r 477762bc3b31 -r 8ecd45ef360e connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/interfaces/IClientServiceSiteUI2.java --- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/interfaces/IClientServiceSiteUI2.java Wed Dec 30 09:59:34 2009 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/interfaces/IClientServiceSiteUI2.java Wed Dec 30 11:43:43 2009 -0600 @@ -18,6 +18,7 @@ package com.nokia.carbide.remoteconnections.interfaces; +import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.widgets.Composite; /** @@ -81,4 +82,21 @@ * @param listener IListener */ void removeListener(IListener listener); + + /** + * Validate the selected connection and return a status. + *

+ * @return IStatus for the state of the selection: + *

    + *
  1. If a connection is selected and it's compatible, return OK. + *
  2. If no connection is selected, return ERROR. + *
  3. If selected connection is a default, but the current default is incompatible, + * return WARNING. + * (Normally, the concrete connections are already filtered to show only + * compatible ones, but the default may be anything.) This is only a warning + * because the default connection can be changed externally to this UI, thus + * isn't a fatal error. + *
+ */ + IStatus getSelectionStatus(); } diff -r 477762bc3b31 -r 8ecd45ef360e connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ClientServiceSiteUI2.java --- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ClientServiceSiteUI2.java Wed Dec 30 09:59:34 2009 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ClientServiceSiteUI2.java Wed Dec 30 11:43:43 2009 -0600 @@ -28,6 +28,8 @@ import com.nokia.cpp.internal.api.utils.core.Check; import com.nokia.cpp.internal.api.utils.core.ListenerList; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; @@ -71,7 +73,7 @@ public void createComposite(Composite parent) { initializeDialogUnits(parent); Group group = new Group(parent, SWT.NONE); - group.setText(Messages.getString("ClientServiceSiteUI.UseConnectionGroupLabel")); //$NON-NLS-1$ + group.setText(Messages.getString("ClientServiceSiteUI2.UseConnectionGroupLabel")); //$NON-NLS-1$ group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); group.setData(UID, "useConnectionGroup"); //$NON-NLS-1$ @@ -114,7 +116,7 @@ composite.setFont(parent.getFont()); newButton = new Button(composite, SWT.PUSH); - newButton.setText(Messages.getString("ClientServiceSiteUI.NewButtonLabel")); //$NON-NLS-1$ + newButton.setText(Messages.getString("ClientServiceSiteUI2.NewButtonLabel")); //$NON-NLS-1$ newButton.setFont(JFaceResources.getDialogFont()); gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); int widthHint = Dialog.convertHorizontalDLUsToPixels(fm, IDialogConstants.BUTTON_WIDTH); @@ -136,7 +138,7 @@ }); editButton = new Button(composite, SWT.PUSH); - editButton.setText(Messages.getString("ClientServiceSiteUI.EditButtonLabel")); //$NON-NLS-1$ + editButton.setText(Messages.getString("ClientServiceSiteUI2.EditButtonLabel")); //$NON-NLS-1$ editButton.setFont(JFaceResources.getDialogFont()); gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); widthHint = Dialog.convertHorizontalDLUsToPixels(fm, IDialogConstants.BUTTON_WIDTH); @@ -183,6 +185,9 @@ * @return {@link IConnection} or null */ protected IConnection getActualConnection(String id) { + if (id == null) { + return null; + } if (id.equals(Registry.DEFAULT_CONNECTION_ID)) { return RemoteConnectionsActivator.getConnectionsManager().getDefaultConnection(); } @@ -225,12 +230,29 @@ selectConnection(connection.getIdentifier()); } editButton.setEnabled(!viewer.getSelection().isEmpty()); + + // fire listener in case we selected anew or the default connection changed + fireConnectionSelected(); } private void refreshUI() { Display.getDefault().syncExec(new Runnable() { public void run() { - setViewerInput(null); + if (viewer != null && viewer.getContentProvider() != null) { + + // try to preserve the currently selected item, if it's a concrete + // connection; if it's default, allow for the new default to be chosen. + IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); + Object value = selection.getFirstElement(); + String current = null; + if (value instanceof String) { + current = (String) value; + } + if (Registry.DEFAULT_CONNECTION_ID.equals(current)) { + current = null; + } + setViewerInput(getActualConnection(current)); + } } }); } @@ -285,6 +307,56 @@ return connection; } + public IStatus getSelectionStatus() { + // no selection yet...? + if (connection == null) { + return new Status(IStatus.ERROR, RemoteConnectionsActivator.PLUGIN_ID, + Messages.getString("ClientServiceSiteUI2.NoConnectionError")); + } + + // check whether the default is compatible with the service and connection type + if (Registry.DEFAULT_CONNECTION_ID.equals(connection)) { + IConnection actual = getActualConnection(connection); + if (actual != null) { + // is the service supported? + boolean found = false; + for (IConnectedService aService : Registry.instance().getConnectedServices(actual)) { + if (service.getIdentifier().equals(aService.getService().getIdentifier())) { + found = true; + break; + } + } + if (!found) { + return new Status(IStatus.WARNING, RemoteConnectionsActivator.PLUGIN_ID, + MessageFormat.format( + Messages.getString("ClientServiceSiteUI2.IncompatibleDefaultConnectionService"), + actual.getDisplayName(), + service.getDisplayName())); + } + + // is the hardware type supported by the service? + if (!isCompatibleConnection(actual)) { + String requiredConnectionTypes = ""; + for (IConnectionType type : compatibleConnectionTypes) { + if (requiredConnectionTypes.length() > 0) + requiredConnectionTypes += ", "; + requiredConnectionTypes += type.getDisplayName(); + } + return new Status(IStatus.WARNING, RemoteConnectionsActivator.PLUGIN_ID, + MessageFormat.format( + Messages.getString("ClientServiceSiteUI2.IncompatibleDefaultConnectionType"), + actual.getDisplayName(), + requiredConnectionTypes)); + + } + + } + } + + // otherwise, it's okay! + return Status.OK_STATUS; + } + /* (non-Javadoc) * @see com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2#getConnectionDisplayName(java.lang.String) */ diff -r 477762bc3b31 -r 8ecd45ef360e connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ConnectionStatusSelectorContribution.java --- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ConnectionStatusSelectorContribution.java Wed Dec 30 09:59:34 2009 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/ConnectionStatusSelectorContribution.java Wed Dec 30 11:43:43 2009 -0600 @@ -355,7 +355,7 @@ item.setSelection(isDefault); - item.setText("&" + number + " - " + connection.getDisplayName()); + item.setText(MessageFormat.format("&{0} - {1}", number, connection.getDisplayName())); //$NON-NLS-1$ item.addSelectionListener(new SelectionAdapter() { @Override @@ -466,7 +466,7 @@ * @param status */ private void updateConnectionStatus(final IConnectionStatus status) { - Display.getDefault().syncExec(new Runnable() { + Display.getDefault().asyncExec(new Runnable() { public void run() { if (connectionIcon == null || connectionIcon.isDisposed()) return; @@ -481,7 +481,7 @@ String tip = createConnectionStatusTooltip(defaultConnection, status); connectionInfo.setToolTipText(tip); - String preamble = "Click to open the Remote Connections View.\n\n"; + String preamble = Messages.getString("ConnectionStatusSelectorContribution.IconTooltipPrefixMessage"); //$NON-NLS-1$ connectionIcon.setToolTipText(preamble + tip); } }); diff -r 477762bc3b31 -r 8ecd45ef360e connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties --- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties Wed Dec 30 09:59:34 2009 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties Wed Dec 30 11:43:43 2009 -0600 @@ -7,6 +7,12 @@ ClientServiceSiteUI.EditButtonLabel=Edit... ClientServiceSiteUI.NewButtonLabel=New... ClientServiceSiteUI.UseConnectionGroupLabel=Use connection +ClientServiceSiteUI2.EditButtonLabel=Edit... +ClientServiceSiteUI2.NewButtonLabel=New... +ClientServiceSiteUI2.UseConnectionGroupLabel=Use connection +ClientServiceSiteUI2.NoConnectionError=A valid remote connection must be selected. If none exist, create a new one. +ClientServiceSiteUI2.IncompatibleDefaultConnectionType=The default connection ''{0}'' does not support connection type: ''{1}''.\nEnsure you have selected a suitable default before launching. +ClientServiceSiteUI2.IncompatibleDefaultConnectionService=The default connection ''{0}'' does not support the service: ''{1}''.\nEnsure you have selected a suitable default before launching. ConnectionSettingsPage.AgentTestTabLabel=Set Connection Settings ConnectionSettingsPage.ConnectionSettingsGroupLabel=Connection Settings ConnectionSettingsPage.DeviceOSComboToolTip=Used to determine which installer version to compare against the version reported by the remote agent @@ -57,6 +63,7 @@ ConnectionStatusSelectorContribution_NoDefaultConnectionMessage=No default connection ConnectionStatusSelectorContribution_SelectTheDefaultConnectionMessage=Select the default connection: ConnectionStatusSelectorContribution.ConnectionStatusFormat={0}: {1} +ConnectionStatusSelectorContribution.IconTooltipPrefixMessage=Click to open the Remote Connections View.\n\n ConnectionStatusSelectorContribution.InUse=In use ConnectionStatusSelectorContribution.NoConnectionsDefinedOrDetected=No connections defined or detected ConnectionStatusSelectorContribution.NoDynamicOrManualConnectionsTooltip=No default connection selected. diff -r 477762bc3b31 -r 8ecd45ef360e debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/AttachMainTab.java --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/AttachMainTab.java Wed Dec 30 09:59:34 2009 -0600 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/AttachMainTab.java Wed Dec 30 11:43:43 2009 -0600 @@ -23,6 +23,7 @@ import com.nokia.cdt.internal.debug.launch.LaunchPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.swt.SWT; @@ -109,10 +110,11 @@ public boolean isValid(ILaunchConfiguration config) { boolean result = super.isValid(config); if (result) { - connection = clientSiteUI.getSelectedConnection(); - if (connection == null) { - setErrorMessage(Messages.getString("AttachMainTab.NoConnectionError")); //$NON-NLS-1$ - result = false; + IStatus status = clientSiteUI.getSelectionStatus(); + if (!status.isOK()) { + // unfortunately, no way to display a warning here... + setErrorMessage(status.getMessage()); + result = status.getSeverity() != IStatus.ERROR; } } return result; diff -r 477762bc3b31 -r 8ecd45ef360e debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RunModeMainTab.java --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RunModeMainTab.java Wed Dec 30 09:59:34 2009 -0600 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RunModeMainTab.java Wed Dec 30 11:43:43 2009 -0600 @@ -23,6 +23,7 @@ import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; @@ -236,10 +237,11 @@ else { if (clientSiteUI != null) { - connection = clientSiteUI.getSelectedConnection(); - if (connection == null) { - setErrorMessage(Messages.getString("RunModeMainTab.NoConnectionError")); //$NON-NLS-1$ - result = false; + IStatus status = clientSiteUI.getSelectionStatus(); + if (!status.isOK()) { + // unfortunately, no way to display a warning here... + setErrorMessage(status.getMessage()); + result = status.getSeverity() != IStatus.ERROR; } } } diff -r 477762bc3b31 -r 8ecd45ef360e debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/messages.properties --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/messages.properties Wed Dec 30 09:59:34 2009 -0600 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/messages.properties Wed Dec 30 11:43:43 2009 -0600 @@ -10,7 +10,6 @@ AddEditFileToTransferDialog.7=File to transfer does not exist AddEditFileToTransferDialog.8=No file to transfer specified AddEditFileToTransferDialog.9=Invalid target path specified -AttachMainTab.NoConnectionError=A valid remote connection must be selected ChooseProcessDialog.IDLabel=ID ChooseProcessDialog.Message=Choose a process to attach ChooseProcessDialog.NameLabel=Name @@ -175,7 +174,6 @@ RunModeMainTab.6=Remote process to launch not specified. RunModeMainTab.7=Remote process to launch must be an absolute path. RunModeMainTab.8=The project associated with this launch configuration. -RunModeMainTab.NoConnectionError=A valid remote connection must be selected. If none exist, create a new one. SophiaTargetInterfaceTab.0=Sophia Target Interface (WTI.dll) location SophiaTargetInterfaceTab.1=Browse SophiaTargetInterfaceTab.10=The absolute path on your PC of the Carbide C++ interface to Sophia JTAG emulator (wti.dll) diff -r 477762bc3b31 -r 8ecd45ef360e debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/TRKConnectionWizardPage.java --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/TRKConnectionWizardPage.java Wed Dec 30 09:59:34 2009 -0600 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/TRKConnectionWizardPage.java Wed Dec 30 11:43:43 2009 -0600 @@ -23,6 +23,7 @@ import com.nokia.cdt.internal.debug.launch.LaunchPlugin; import com.nokia.cpp.internal.api.utils.core.Check; +import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.wizard.WizardPage; @@ -87,11 +88,17 @@ protected void validatePage() { setErrorMessage(null); + setMessage(null); setPageComplete(true); - connection = clientSiteUI.getSelectedConnection(); - if (connection == null) { - setErrorMessage(Messages.getString("TRKConnectionWizardPage.NoConnectionError")); //$NON-NLS-1$ - setPageComplete(false); + IStatus status = clientSiteUI.getSelectionStatus(); + if (!status.isOK()) { + if (status.getSeverity() == IStatus.ERROR) { + setErrorMessage(status.getMessage()); + setPageComplete(false); + } else { + setMessage(status.getMessage(), + status.getSeverity() == IStatus.WARNING ? WARNING : INFORMATION); + } } }