# HG changeset patch # User Ed Swartz # Date 1263999938 21600 # Node ID 8c7fa6db96c0ac483159f339c2869272fb1ba903 # Parent 14f323806705d2e15a2d455455134a47de43761c# Parent 43d328ced5343d9943b105f73b16030e59c0c051 Merge commit diff -r 14f323806705 -r 8c7fa6db96c0 connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/registry/Registry.java --- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/registry/Registry.java Tue Jan 19 11:20:59 2010 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/registry/Registry.java Wed Jan 20 09:05:38 2010 -0600 @@ -40,11 +40,18 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.IFilter; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; import com.nokia.carbide.remoteconnections.Messages; import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator; -import com.nokia.carbide.remoteconnections.interfaces.AbstractConnection.ConnectionStatus; import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI; import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2; import com.nokia.carbide.remoteconnections.interfaces.IConnectedService; @@ -55,16 +62,19 @@ import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager; import com.nokia.carbide.remoteconnections.interfaces.IExtensionFilter; import com.nokia.carbide.remoteconnections.interfaces.IService; +import com.nokia.carbide.remoteconnections.interfaces.AbstractConnection.ConnectionStatus; +import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2.IListener; import com.nokia.carbide.remoteconnections.internal.api.IConnection2; import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus; +import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatusChangedListener; import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus.EConnectionStatus; -import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatusChangedListener; import com.nokia.carbide.remoteconnections.internal.ui.ClientServiceSiteUI2; import com.nokia.carbide.remoteconnections.internal.ui.ConnectionUIUtils; import com.nokia.carbide.remoteconnections.ui.ClientServiceSiteUI; import com.nokia.cpp.internal.api.utils.core.Check; import com.nokia.cpp.internal.api.utils.core.ListenerList; import com.nokia.cpp.internal.api.utils.core.Logging; +import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils; /** * A registry of connection type and service extensions @@ -509,14 +519,84 @@ Check.checkArg(service); IConnection connection = findConnection(id); if (!isCompatibleConnection(connection, service)) { - // TODO ask user to connect a device or cancel - throw new CoreException( - Logging.newStatus(RemoteConnectionsActivator.getDefault(), IStatus.ERROR, - Messages.getString("Registry.NoCompatibleConnectionMsg"))); //$NON-NLS-1$ + connection = getCompatibleConnectionFromUser(service); + if (connection == null) { + throw new CoreException( + Logging.newStatus(RemoteConnectionsActivator.getDefault(), IStatus.ERROR, + Messages.getString("Registry.NoCompatibleConnectionMsg"))); //$NON-NLS-1$ + } } return connection; } + private IConnection getCompatibleConnectionFromUser(final IService service) { + final IConnection[] connectionHolder = { null }; + if (!WorkbenchUtils.isJUnitRunning()) { + Display.getDefault().syncExec(new Runnable() { + public void run() { + final IClientServiceSiteUI2 ui = getClientSiteUI2(service); + final TitleAreaDialog dialog = new TitleAreaDialog(WorkbenchUtils.getSafeShell()) { + @Override + protected Control createDialogArea(Composite parent) { + final Composite c = (Composite) super.createDialogArea(parent); + ui.createComposite(c); + ui.addListener(new IListener() { + public void connectionSelected() { + updateStatus(ui.getSelectionStatus()); + } + + }); + + return c; + } + + private void updateStatus(IStatus selectionStatus) { + setTitle(Messages.getString("Registry.EnsureConnection.TitleLabel")); //$NON-NLS-1$ + setMessage(Messages.getString("Registry.EnsureConnection.Description")); //$NON-NLS-1$ + switch (selectionStatus.getSeverity()) { + case IStatus.ERROR: + setMessage(selectionStatus.getMessage(), IMessageProvider.ERROR); + getButton(IDialogConstants.OK_ID).setEnabled(false); + break; + case IStatus.WARNING: + setMessage(selectionStatus.getMessage(), IMessageProvider.WARNING); + getButton(IDialogConstants.OK_ID).setEnabled(true); + break; + case IStatus.INFO: + setMessage(selectionStatus.getMessage(), IMessageProvider.INFORMATION); + getButton(IDialogConstants.OK_ID).setEnabled(true); + break; + default: + getButton(IDialogConstants.OK_ID).setEnabled(true); + } + } + + @Override + public void create() { + super.create(); + updateStatus(ui.getSelectionStatus()); + } + + @Override + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText(Messages.getString("Registry.EnsureConnection.DialogTitle")); //$NON-NLS-1$ + } + + @Override + protected boolean isResizable() { + return true; + } + }; + dialog.setBlockOnOpen(true); + if (dialog.open() == Dialog.OK) + connectionHolder[0] = findConnection(ui.getSelectedConnection()); + } + }); + } + return connectionHolder[0]; + } + private boolean isCompatibleConnection(IConnection connection, IService service) { if (connection == null) return false; diff -r 14f323806705 -r 8c7fa6db96c0 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 Tue Jan 19 11:20:59 2010 -0600 +++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties Wed Jan 20 09:05:38 2010 -0600 @@ -112,6 +112,9 @@ Registry.ConnectionStoreError=Could not store connections Registry.FilterExtensionLoadError=Could not load filter extensions Registry.ConnectionTypeExtensionLoadError=Could not load connection type extensions +Registry.EnsureConnection.DialogTitle=Invalid Connection Stored +Registry.EnsureConnection.TitleLabel=Select a connection to use +Registry.EnsureConnection.Description=Select a connection, create a new one or attach a device Registry.NoCompatibleConnectionMsg=No compatible connection found for this id Registry.ServiceExtensionLoadError=Could not load service extensions Registry.ServiceListUnknownConnectionTypeError=Service ''{0}'' lists unknown connection type ''{1}'' as compatible