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; |