connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/registry/Registry.java
changeset 790 6c8eba9e19ea
parent 765 beb2e296a8b7
child 791 43d328ced534
equal deleted inserted replaced
789:e7530a339238 790:6c8eba9e19ea
    38 import java.util.regex.Pattern;
    38 import java.util.regex.Pattern;
    39 
    39 
    40 import org.eclipse.core.runtime.CoreException;
    40 import org.eclipse.core.runtime.CoreException;
    41 import org.eclipse.core.runtime.IPath;
    41 import org.eclipse.core.runtime.IPath;
    42 import org.eclipse.core.runtime.IStatus;
    42 import org.eclipse.core.runtime.IStatus;
       
    43 import org.eclipse.core.runtime.Status;
       
    44 import org.eclipse.jface.dialogs.Dialog;
       
    45 import org.eclipse.jface.dialogs.IDialogConstants;
       
    46 import org.eclipse.jface.dialogs.IMessageProvider;
       
    47 import org.eclipse.jface.dialogs.TitleAreaDialog;
    43 import org.eclipse.jface.viewers.IFilter;
    48 import org.eclipse.jface.viewers.IFilter;
       
    49 import org.eclipse.swt.widgets.Composite;
       
    50 import org.eclipse.swt.widgets.Control;
       
    51 import org.eclipse.swt.widgets.Display;
       
    52 import org.eclipse.swt.widgets.Shell;
    44 
    53 
    45 import com.nokia.carbide.remoteconnections.Messages;
    54 import com.nokia.carbide.remoteconnections.Messages;
    46 import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
    55 import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
    47 import com.nokia.carbide.remoteconnections.interfaces.AbstractConnection.ConnectionStatus;
       
    48 import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI;
    56 import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI;
    49 import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2;
    57 import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2;
    50 import com.nokia.carbide.remoteconnections.interfaces.IConnectedService;
    58 import com.nokia.carbide.remoteconnections.interfaces.IConnectedService;
    51 import com.nokia.carbide.remoteconnections.interfaces.IConnectedServiceFactory;
    59 import com.nokia.carbide.remoteconnections.interfaces.IConnectedServiceFactory;
    52 import com.nokia.carbide.remoteconnections.interfaces.IConnection;
    60 import com.nokia.carbide.remoteconnections.interfaces.IConnection;
    53 import com.nokia.carbide.remoteconnections.interfaces.IConnectionType;
    61 import com.nokia.carbide.remoteconnections.interfaces.IConnectionType;
    54 import com.nokia.carbide.remoteconnections.interfaces.IConnectionTypeProvider;
    62 import com.nokia.carbide.remoteconnections.interfaces.IConnectionTypeProvider;
    55 import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager;
    63 import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager;
    56 import com.nokia.carbide.remoteconnections.interfaces.IExtensionFilter;
    64 import com.nokia.carbide.remoteconnections.interfaces.IExtensionFilter;
    57 import com.nokia.carbide.remoteconnections.interfaces.IService;
    65 import com.nokia.carbide.remoteconnections.interfaces.IService;
       
    66 import com.nokia.carbide.remoteconnections.interfaces.AbstractConnection.ConnectionStatus;
       
    67 import com.nokia.carbide.remoteconnections.interfaces.IClientServiceSiteUI2.IListener;
    58 import com.nokia.carbide.remoteconnections.internal.api.IConnection2;
    68 import com.nokia.carbide.remoteconnections.internal.api.IConnection2;
    59 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus;
    69 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus;
       
    70 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatusChangedListener;
    60 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus.EConnectionStatus;
    71 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatus.EConnectionStatus;
    61 import com.nokia.carbide.remoteconnections.internal.api.IConnection2.IConnectionStatusChangedListener;
       
    62 import com.nokia.carbide.remoteconnections.internal.ui.ClientServiceSiteUI2;
    72 import com.nokia.carbide.remoteconnections.internal.ui.ClientServiceSiteUI2;
    63 import com.nokia.carbide.remoteconnections.internal.ui.ConnectionUIUtils;
    73 import com.nokia.carbide.remoteconnections.internal.ui.ConnectionUIUtils;
    64 import com.nokia.carbide.remoteconnections.ui.ClientServiceSiteUI;
    74 import com.nokia.carbide.remoteconnections.ui.ClientServiceSiteUI;
    65 import com.nokia.cpp.internal.api.utils.core.Check;
    75 import com.nokia.cpp.internal.api.utils.core.Check;
    66 import com.nokia.cpp.internal.api.utils.core.ListenerList;
    76 import com.nokia.cpp.internal.api.utils.core.ListenerList;
    67 import com.nokia.cpp.internal.api.utils.core.Logging;
    77 import com.nokia.cpp.internal.api.utils.core.Logging;
       
    78 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
    68 
    79 
    69 /**
    80 /**
    70  * A registry of connection type and service extensions
    81  * A registry of connection type and service extensions
    71  */
    82  */
    72 @SuppressWarnings("deprecation")
    83 @SuppressWarnings("deprecation")
   507 	
   518 	
   508 	public IConnection ensureConnection(String id, IService service) throws CoreException {
   519 	public IConnection ensureConnection(String id, IService service) throws CoreException {
   509 		Check.checkArg(service);
   520 		Check.checkArg(service);
   510 		IConnection connection = findConnection(id);
   521 		IConnection connection = findConnection(id);
   511 		if (!isCompatibleConnection(connection, service)) {
   522 		if (!isCompatibleConnection(connection, service)) {
   512 			// TODO ask user to connect a device or cancel
   523 			connection = getCompatibleConnectionFromUser(service);
   513 			throw new CoreException(
   524 			if (connection == null) {
   514 					Logging.newStatus(RemoteConnectionsActivator.getDefault(), IStatus.ERROR, 
   525 				throw new CoreException(
   515 							Messages.getString("Registry.NoCompatibleConnectionMsg"))); //$NON-NLS-1$
   526 						Logging.newStatus(RemoteConnectionsActivator.getDefault(), IStatus.ERROR, 
       
   527 								Messages.getString("Registry.NoCompatibleConnectionMsg"))); //$NON-NLS-1$
       
   528 			}
   516 		}
   529 		}
   517 		return connection;
   530 		return connection;
       
   531 	}
       
   532 
       
   533 	private IConnection getCompatibleConnectionFromUser(final IService service) {
       
   534 		final IConnection[] connectionHolder = { null };
       
   535 		if (!WorkbenchUtils.isJUnitRunning()) {
       
   536 			Display.getDefault().syncExec(new Runnable() {
       
   537 				public void run() {
       
   538 					final IClientServiceSiteUI2 ui = getClientSiteUI2(service);
       
   539 					final TitleAreaDialog dialog = new TitleAreaDialog(WorkbenchUtils.getSafeShell()) {
       
   540 						@Override
       
   541 						protected Control createDialogArea(Composite parent) {
       
   542 							final Composite c = (Composite) super.createDialogArea(parent);
       
   543 							ui.createComposite(c);
       
   544 							ui.addListener(new IListener() {
       
   545 								public void connectionSelected() {
       
   546 									IStatus selectionStatus = ui.getSelectionStatus();
       
   547 									updateStatus(selectionStatus);
       
   548 								}
       
   549 
       
   550 							});
       
   551 							
       
   552 							return c;
       
   553 						}
       
   554 
       
   555 						private void updateStatus(IStatus selectionStatus) {
       
   556 							setTitle(Messages.getString("Registry.EnsureConnection.TitleLabel")); //$NON-NLS-1$
       
   557 							switch (selectionStatus.getSeverity()) {
       
   558 							case IStatus.ERROR:
       
   559 								setMessage(selectionStatus.getMessage(), IMessageProvider.ERROR);
       
   560 								getButton(IDialogConstants.OK_ID).setEnabled(false);
       
   561 								break;
       
   562 							case IStatus.WARNING:
       
   563 								setMessage(selectionStatus.getMessage(), IMessageProvider.WARNING);
       
   564 								getButton(IDialogConstants.OK_ID).setEnabled(true);
       
   565 								break;
       
   566 							case IStatus.INFO:
       
   567 								setMessage(selectionStatus.getMessage(), IMessageProvider.INFORMATION);
       
   568 								getButton(IDialogConstants.OK_ID).setEnabled(true);
       
   569 								break;
       
   570 							default:
       
   571 								setMessage(null, IMessageProvider.NONE);
       
   572 								getButton(IDialogConstants.OK_ID).setEnabled(true);
       
   573 							}
       
   574 						}
       
   575 						
       
   576 						@Override
       
   577 						public void create() {
       
   578 							super.create();
       
   579 							updateStatus(new Status(IStatus.ERROR, RemoteConnectionsActivator.PLUGIN_ID, 
       
   580 									Messages.getString("Registry.EnsureConnection.InitialStatusMessage"))); //$NON-NLS-1$
       
   581 						}
       
   582 						
       
   583 						@Override
       
   584 						protected void configureShell(Shell newShell) {
       
   585 							super.configureShell(newShell);
       
   586 							newShell.setText(Messages.getString("Registry.EnsureConnection.DialogTitle")); //$NON-NLS-1$
       
   587 						}
       
   588 						
       
   589 						@Override
       
   590 						protected boolean isResizable() {
       
   591 							return true;
       
   592 						}
       
   593 					};
       
   594 					dialog.setBlockOnOpen(true);
       
   595 					if (dialog.open() == Dialog.OK)
       
   596 						connectionHolder[0] = findConnection(ui.getSelectedConnection());
       
   597 				}
       
   598 			});
       
   599 		}
       
   600 		return connectionHolder[0];
   518 	}
   601 	}
   519 
   602 
   520 	private boolean isCompatibleConnection(IConnection connection, IService service) {
   603 	private boolean isCompatibleConnection(IConnection connection, IService service) {
   521 		if (connection == null)
   604 		if (connection == null)
   522 			return false;
   605 			return false;