lttng-control: Fix creation of snapshot sessions
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.control.ui / src / org / eclipse / linuxtools / internal / lttng2 / control / ui / views / dialogs / CreateSessionDialog.java
1 /**********************************************************************
2 * Copyright (c) 2012, 2013 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 * Bernd Hufmann - Updated for support of LTTng Tools 2.1
12 **********************************************************************/
13
14 package org.eclipse.linuxtools.internal.lttng2.control.ui.views.dialogs;
15
16 import org.eclipse.core.runtime.NullProgressMonitor;
17 import org.eclipse.jface.dialogs.IDialogConstants;
18 import org.eclipse.jface.dialogs.TitleAreaDialog;
19 import org.eclipse.linuxtools.internal.lttng2.control.core.model.ISessionInfo;
20 import org.eclipse.linuxtools.internal.lttng2.control.core.model.impl.SessionInfo;
21 import org.eclipse.linuxtools.internal.lttng2.control.ui.Activator;
22 import org.eclipse.linuxtools.internal.lttng2.control.ui.views.messages.Messages;
23 import org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl.TargetNodeComponent;
24 import org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl.TraceSessionGroup;
25 import org.eclipse.linuxtools.internal.lttng2.control.ui.views.remote.IRemoteSystemProxy;
26 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
27 import org.eclipse.rse.subsystems.files.core.servicesubsystem.IFileServiceSubSystem;
28 import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
29 import org.eclipse.swt.SWT;
30 import org.eclipse.swt.custom.CCombo;
31 import org.eclipse.swt.events.ModifyEvent;
32 import org.eclipse.swt.events.ModifyListener;
33 import org.eclipse.swt.events.SelectionAdapter;
34 import org.eclipse.swt.events.SelectionEvent;
35 import org.eclipse.swt.layout.GridData;
36 import org.eclipse.swt.layout.GridLayout;
37 import org.eclipse.swt.widgets.Button;
38 import org.eclipse.swt.widgets.Composite;
39 import org.eclipse.swt.widgets.Control;
40 import org.eclipse.swt.widgets.Group;
41 import org.eclipse.swt.widgets.Label;
42 import org.eclipse.swt.widgets.Shell;
43 import org.eclipse.swt.widgets.Text;
44
45 /**
46 * <p>
47 * Dialog box for collecting session creation information.
48 * </p>
49 *
50 * @author Bernd Hufmann
51 */
52 public class CreateSessionDialog extends TitleAreaDialog implements ICreateSessionDialog {
53
54 // ------------------------------------------------------------------------
55 // Constants
56 // ------------------------------------------------------------------------
57 /**
58 * The icon file for this dialog box.
59 */
60 public static final String CREATE_SESSION_ICON_FILE = "icons/elcl16/add_button.gif"; //$NON-NLS-1$
61
62 /**
63 * Supported network protocols for streaming
64 */
65 private enum StreamingProtocol {
66 /** Default network protocol for IPv4 (TCP)*/
67 net,
68 /** Default network protocol for IPv6 (TCP)*/
69 net6,
70 /** File */
71 file,
72 }
73
74 private enum StreamingProtocol2 {
75 /** Default network protocol for IPv4 (TCP)*/
76 net,
77 /** Default network protocol for IPv6 (TCP)*/
78 net6,
79 /** TCP network protocol for IPv4*/
80 tcp,
81 /** TCP network protocol for IPv6*/
82 tcp6 }
83
84 /**
85 * Index of last supported streaming protocol for common URL configuration.
86 */
87 private static final int COMMON_URL_LAST_INDEX = 1;
88 /**
89 * Index of default streaming protocol.
90 */
91 private static final int DEFAULT_URL_INDEX = 0;
92
93 // ------------------------------------------------------------------------
94 // Attributes
95 // ------------------------------------------------------------------------
96 /**
97 * The dialog composite.
98 */
99 private Composite fDialogComposite = null;
100 /**
101 * The text widget for the session name
102 */
103 private Text fSessionNameText = null;
104 /**
105 * The label widget for the session path.
106 */
107 private Label fSessionPathLabel = null;
108 /**
109 * The text widget for the session path.
110 */
111 private Text fSessionPathText = null;
112 /**
113 * The button widget to select a snapshot session
114 */
115 private Button fSnapshotButton = null;
116 /**
117 * The Group for stream configuration.
118 */
119 private Group fMainStreamingGroup = null;
120 /**
121 * The button to show streaming options.
122 */
123 private Button fConfigureStreamingButton = null;
124 /**
125 * The composite with streaming configuration parameter.
126 */
127 private Composite fStreamingComposite = null;
128 /**
129 * The text widget for the trace path.
130 */
131 private Text fTracePathText = null;
132 /**
133 * The button to link data protocol/Address with control protocol.
134 */
135 private Button fLinkDataWithControlButton = null;
136 /**
137 * The Combo box for channel protocol selection.
138 */
139 private CCombo fControlProtocolCombo = null;
140 /**
141 * A selection listener that copies the protocol from control to data when being linked.
142 */
143 private ControlProtocolSelectionListener fCopyProtocolSelectionListener;
144 /**
145 * A selection listener updates the control port text depending on the control protocol selected.
146 */
147 private ProtocolComboSelectionListener fControlProtocolSelectionListener;
148 /**
149 * A selection listener updates the data port text depending on the data protocol selected.
150 */
151 private ProtocolComboSelectionListener fDataProtocolSelectionListener;
152 /**
153 * The text box for the host/IP address of the control channel.
154 */
155 private Text fControlHostAddressText = null;
156 /**
157 * A key listener that copies the host address from control to data when being linked.
158 */
159 private CopyModifyListener fControlUrlKeyListener;
160 /**
161 * A modify listener that updates the enablement of the dialog.
162 */
163 private UpdateEnablementModifyListener fUpdateEnablementModifyListener;
164 /**
165 * The text box for the control port.
166 */
167 private Text fControlPortText = null;
168 /**
169 * The Combo box for data protocol selection.
170 */
171 private CCombo fDataProtocolCombo = null;
172 /**
173 * The text box for the host/IP address of the data channel.
174 */
175 private Text fDataHostAddressText = null;
176 /**
177 * The text box for the data port.
178 */
179 private Text fDataPortText = null;
180 /**
181 * The parent where the new node should be added.
182 */
183 private TraceSessionGroup fParent = null;
184 /**
185 * The session name string.
186 */
187 private String fSessionName = null;
188 /**
189 * The session path string.
190 */
191 private String fSessionPath = null;
192 /**
193 * Flag whether the session is snapshot or not
194 */
195 private boolean fIsSnapshot = false;
196 /**
197 * Flag whether default location (path) shall be used or not
198 */
199 private boolean fIsDefaultPath = true;
200 /**
201 * Flag whether the trace is streamed or not
202 */
203 private boolean fIsStreamedTrace = false;
204 /**
205 * The network URL in case control and data is configured together.
206 * If set, fControlUrl and fDataUrl will be null.
207 */
208 private String fNetworkUrl = null;
209 /**
210 * The control URL in case control and data is configured separately.
211 * If set, fDataUrl will be set too and fNetworkUrl will be null.
212 */
213 private String fControlUrl = null;
214 /**
215 * The data URL in case control and data is configured separately.
216 * If set, fControlUrl will be set too and fNetworkUrl will be null.
217 */
218 private String fDataUrl = null;
219 /**
220 * The trace path string.
221 */
222 private String fTracePath = null;
223
224 // ------------------------------------------------------------------------
225 // Constructors
226 // ------------------------------------------------------------------------
227 /**
228 * Constructor
229 * @param shell - a shell for the display of the dialog
230 */
231 public CreateSessionDialog(Shell shell) {
232 super(shell);
233 setShellStyle(SWT.RESIZE | getShellStyle());
234 }
235
236 // ------------------------------------------------------------------------
237 // Accessors
238 // ------------------------------------------------------------------------
239
240 @Override
241 public void initialize(TraceSessionGroup group) {
242 fParent = group;
243 fStreamingComposite = null;
244 fSessionName = null;
245 fSessionPath = null;
246 fIsSnapshot = false;
247 fIsDefaultPath = true;
248 fIsStreamedTrace = false;
249 fNetworkUrl = null;
250 fControlUrl = null;
251 fDataUrl = null;
252 }
253 // ------------------------------------------------------------------------
254 // Operations
255 // ------------------------------------------------------------------------
256
257 @Override
258 protected void configureShell(Shell newShell) {
259 super.configureShell(newShell);
260 newShell.setText(Messages.TraceControl_CreateSessionDialogTitle);
261 newShell.setImage(Activator.getDefault().loadIcon(CREATE_SESSION_ICON_FILE));
262 }
263
264 @Override
265 protected Control createDialogArea(Composite parent) {
266 Composite dialogAreaa = (Composite) super.createDialogArea(parent);
267 setTitle(Messages.TraceControl_CreateSessionDialogTitle);
268 setMessage(Messages.TraceControl_CreateSessionDialogMessage);
269
270 // Main dialog panel
271 fDialogComposite = new Composite(dialogAreaa, SWT.NONE);
272 GridLayout layout = new GridLayout(1, true);
273 fDialogComposite.setLayout(layout);
274 fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
275
276 Group sessionGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
277 sessionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
278 sessionGroup.setLayout(new GridLayout(4, true));
279
280 fUpdateEnablementModifyListener = new UpdateEnablementModifyListener();
281
282 Label sessionNameLabel = new Label(sessionGroup, SWT.RIGHT);
283 sessionNameLabel.setText(Messages.TraceControl_CreateSessionNameLabel);
284 fSessionNameText = new Text(sessionGroup, SWT.NONE);
285 fSessionNameText.setToolTipText(Messages.TraceControl_CreateSessionNameTooltip);
286 fSessionNameText.addModifyListener(fUpdateEnablementModifyListener);
287
288 fSessionPathLabel = new Label(sessionGroup, SWT.RIGHT);
289 fSessionPathLabel.setText(Messages.TraceControl_CreateSessionPathLabel);
290 fSessionPathText = new Text(sessionGroup, SWT.NONE);
291 fSessionPathText.setToolTipText(Messages.TraceControl_CreateSessionPathTooltip);
292 fSessionPathText.addModifyListener(fUpdateEnablementModifyListener);
293
294 if (fParent.isSnapshotSupported()) {
295 fSnapshotButton = new Button(sessionGroup, SWT.CHECK);
296 fSnapshotButton.setText(Messages.TraceControl_CreateSessionSnapshotLabel);
297 fSnapshotButton.setToolTipText(Messages.TraceControl_CreateSessionSnapshotTooltip);
298 GridData data = new GridData(GridData.FILL_HORIZONTAL);
299 data.horizontalSpan = 4;
300 fSnapshotButton.setLayoutData(data);
301 fSnapshotButton.addSelectionListener(new SelectionAdapter() {
302 @Override
303 public void widgetSelected(SelectionEvent e) {
304 updateEnablement();
305 }
306 });
307 }
308
309 // layout widgets
310 GridData data = new GridData(GridData.FILL_HORIZONTAL);
311 data.horizontalSpan = 3;
312
313 fSessionNameText.setLayoutData(data);
314
315 data = new GridData(GridData.FILL_HORIZONTAL);
316 data.horizontalSpan = 3;
317 fSessionPathText.setLayoutData(data);
318
319 if (fParent.isNetworkStreamingSupported()) {
320 createAdvancedOptionsComposite();
321 }
322
323 return fDialogComposite;
324 }
325
326 private void createAdvancedOptionsComposite() {
327
328 fMainStreamingGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
329 fMainStreamingGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
330 fMainStreamingGroup.setLayout(new GridLayout(1, true));
331
332 fConfigureStreamingButton = new Button(fMainStreamingGroup, SWT.PUSH);
333 fConfigureStreamingButton.setText(Messages.TraceControl_CreateSessionConfigureStreamingButtonText + " >>>"); //$NON-NLS-1$
334 fConfigureStreamingButton.setToolTipText(Messages.TraceControl_CreateSessionConfigureStreamingButtonTooltip);
335 fConfigureStreamingButton.addSelectionListener(new SelectionAdapter() {
336 @Override
337 public void widgetSelected(SelectionEvent e) {
338 if (fIsStreamedTrace) {
339 fIsStreamedTrace = false;
340 fConfigureStreamingButton.setText(">>> " + Messages.TraceControl_CreateSessionConfigureStreamingButtonText); //$NON-NLS-1$
341 fConfigureStreamingButton.setToolTipText(Messages.TraceControl_CreateSessionConfigureStreamingButtonTooltip);
342 fSessionPathText.setEnabled(true);
343 fSessionPathLabel.setText(Messages.TraceControl_CreateSessionPathLabel);
344 disposeConfigureStreamingComposite();
345 } else {
346 fIsStreamedTrace = true;
347 fConfigureStreamingButton.setText("<<< " + Messages.TraceControl_CreateSessionNoStreamingButtonText); //$NON-NLS-1$
348 fConfigureStreamingButton.setToolTipText(Messages.TraceControl_CreateSessionNoStreamingButtonTooltip);
349 fSessionPathText.setEnabled(false);
350 fSessionPathText.setText(""); //$NON-NLS-1$
351 fSessionPathLabel.setText(""); //$NON-NLS-1$
352 createConfigureStreamingComposite();
353 }
354
355 updateEnablement();
356 getShell().pack();
357 }
358 });
359 }
360
361 private void createConfigureStreamingComposite() {
362 if (fStreamingComposite == null) {
363 fStreamingComposite = new Composite(fMainStreamingGroup, SWT.NONE);
364 GridLayout layout = new GridLayout(1, true);
365 fStreamingComposite.setLayout(layout);
366 fStreamingComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
367
368 Group urlGroup = new Group(fStreamingComposite, SWT.SHADOW_NONE);
369 layout = new GridLayout(7, true);
370 urlGroup.setLayout(layout);
371 urlGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
372
373 Label tracePathLabel = new Label(urlGroup, SWT.RIGHT);
374 tracePathLabel.setText(Messages.TraceControl_CreateSessionTracePathText);
375 fTracePathText = new Text(urlGroup, SWT.NONE);
376 fTracePathText.setToolTipText(Messages.TraceControl_CreateSessionTracePathTooltip);
377
378 // layout widgets
379 GridData data = new GridData(GridData.FILL_HORIZONTAL);
380 data.horizontalSpan = 6;
381 fTracePathText.setLayoutData(data);
382 fTracePathText.addModifyListener(fUpdateEnablementModifyListener);
383
384 fLinkDataWithControlButton = new Button(urlGroup, SWT.CHECK);
385 fLinkDataWithControlButton.setText(Messages.TraceControl_CreateSessionLinkButtonText);
386 fLinkDataWithControlButton.setToolTipText(Messages.TraceControl_CreateSessionLinkButtonTooltip);
387 data = new GridData(GridData.FILL_HORIZONTAL);
388 data.horizontalSpan = 7;
389 fLinkDataWithControlButton.setLayoutData(data);
390 fLinkDataWithControlButton.setSelection(true);
391
392 Label label = new Label(urlGroup, SWT.NONE);
393 data = new GridData(GridData.FILL_HORIZONTAL);
394 data.horizontalSpan = 1;
395 label.setLayoutData(data);
396
397 label = new Label(urlGroup, SWT.NONE);
398 label.setText(Messages.TraceControl_CreateSessionProtocolLabelText);
399 data = new GridData(GridData.FILL_HORIZONTAL);
400 data.horizontalSpan = 1;
401 label.setLayoutData(data);
402
403 label = new Label(urlGroup, SWT.NONE);
404 label.setText(Messages.TraceControl_CreateSessionAddressLabelText);
405 data = new GridData(GridData.FILL_HORIZONTAL);
406 data.horizontalSpan = 4;
407 label.setLayoutData(data);
408
409 label = new Label(urlGroup, SWT.NONE);
410 label.setText(Messages.TraceControl_CreateSessionPortLabelText);
411 data = new GridData(GridData.FILL_HORIZONTAL);
412 data.horizontalSpan = 1;
413 label.setLayoutData(data);
414
415 label = new Label(urlGroup, SWT.RIGHT);
416 label.setText(Messages.TraceControl_CreateSessionControlUrlLabel);
417 data = new GridData(GridData.FILL_HORIZONTAL);
418 data.horizontalSpan = 1;
419 label.setLayoutData(data);
420
421 fControlProtocolCombo = new CCombo(urlGroup, SWT.READ_ONLY);
422 fControlProtocolCombo.setToolTipText(Messages.TraceControl_CreateSessionCommonProtocolTooltip);
423 data = new GridData(GridData.FILL_HORIZONTAL);
424 data.horizontalSpan = 1;
425 fControlProtocolCombo.setLayoutData(data);
426 fControlProtocolCombo.addModifyListener(fUpdateEnablementModifyListener);
427
428 fControlHostAddressText = new Text(urlGroup, SWT.NONE);
429 fControlHostAddressText.setToolTipText(Messages.TraceControl_CreateSessionControlAddressTooltip);
430 data = new GridData(GridData.FILL_HORIZONTAL);
431 data.horizontalSpan = 4;
432 fControlHostAddressText.setLayoutData(data);
433 fControlHostAddressText.addModifyListener(fUpdateEnablementModifyListener);
434
435 fControlPortText = new Text(urlGroup, SWT.NONE);
436 fControlPortText.setToolTipText(Messages.TraceControl_CreateSessionControlPortTooltip);
437 data = new GridData(GridData.FILL_HORIZONTAL);
438 data.horizontalSpan = 1;
439 fControlPortText.setLayoutData(data);
440 fControlPortText.addModifyListener(fUpdateEnablementModifyListener);
441
442 label = new Label(urlGroup, SWT.RIGHT);
443 label.setText(Messages.TraceControl_CreateSessionDataUrlLabel);
444 data = new GridData(GridData.FILL_HORIZONTAL);
445 data.horizontalSpan = 1;
446 label.setLayoutData(data);
447
448 fDataProtocolCombo = new CCombo(urlGroup, SWT.READ_ONLY);
449 fDataProtocolCombo.setEnabled(false);
450 fDataProtocolCombo.setToolTipText(Messages.TraceControl_CreateSessionProtocolTooltip);
451 data = new GridData(GridData.FILL_HORIZONTAL);
452 data.horizontalSpan = 1;
453 fDataProtocolCombo.setLayoutData(data);
454 fDataProtocolCombo.addModifyListener(fUpdateEnablementModifyListener);
455
456 String items[] = new String[StreamingProtocol.values().length];
457 for (int i = 0; i < items.length; i++) {
458 items[i] = StreamingProtocol.values()[i].name();
459 }
460 fControlProtocolCombo.setItems(items);
461 fDataProtocolCombo.setItems(items);
462
463 fDataHostAddressText = new Text(urlGroup, SWT.NONE);
464 fDataHostAddressText.setEnabled(false);
465 fDataHostAddressText.setToolTipText(Messages.TraceControl_CreateSessionDataAddressTooltip);
466 data = new GridData(GridData.FILL_HORIZONTAL);
467 data.horizontalSpan = 4;
468 fDataHostAddressText.setLayoutData(data);
469 fDataHostAddressText.addModifyListener(fUpdateEnablementModifyListener);
470
471 fDataPortText = new Text(urlGroup, SWT.NONE);
472 fDataPortText.setEnabled(true);
473 fDataPortText.setToolTipText(Messages.TraceControl_CreateSessionDataPortTooltip);
474 data = new GridData(GridData.FILL_HORIZONTAL);
475 data.horizontalSpan = 1;
476 fDataPortText.setLayoutData(data);
477 fDataPortText.addModifyListener(fUpdateEnablementModifyListener);
478
479 fCopyProtocolSelectionListener = new ControlProtocolSelectionListener();
480 fControlProtocolSelectionListener = new ProtocolComboSelectionListener(fControlProtocolCombo, fControlPortText);
481 fDataProtocolSelectionListener = new ProtocolComboSelectionListener(fDataProtocolCombo, fDataPortText);
482
483 fControlProtocolCombo.addSelectionListener(fCopyProtocolSelectionListener);
484
485 fControlUrlKeyListener = new CopyModifyListener(fControlHostAddressText, fDataHostAddressText);
486 fControlHostAddressText.addModifyListener(fControlUrlKeyListener);
487
488 fControlProtocolCombo.select(DEFAULT_URL_INDEX);
489 fDataProtocolCombo.select(DEFAULT_URL_INDEX);
490
491 fLinkDataWithControlButton.addSelectionListener(new SelectionAdapter() {
492 @Override
493 public void widgetSelected(SelectionEvent e) {
494 if (fLinkDataWithControlButton.getSelection()) {
495 // Set enablement control data channel inputs
496 fDataProtocolCombo.setEnabled(false);
497 fDataHostAddressText.setEnabled(false);
498 fControlPortText.setEnabled(true);
499 fDataPortText.setEnabled(true);
500
501 // Update listeners
502 fControlProtocolCombo.removeSelectionListener(fControlProtocolSelectionListener);
503 fDataProtocolCombo.removeSelectionListener(fDataProtocolSelectionListener);
504 fControlProtocolCombo.addSelectionListener(fCopyProtocolSelectionListener);
505 fControlHostAddressText.addModifyListener(fControlUrlKeyListener);
506
507 // Get previous selection and validate
508 int currentSelection = fControlProtocolCombo.getSelectionIndex() <= COMMON_URL_LAST_INDEX ?
509 fControlProtocolCombo.getSelectionIndex() : DEFAULT_URL_INDEX;
510
511 // Update combo box items
512 fControlProtocolCombo.removeAll();
513 String[] controlItems = new String[StreamingProtocol.values().length];
514 for (int i = 0; i < controlItems.length; i++) {
515 controlItems[i] = StreamingProtocol.values()[i].name();
516 }
517 fControlProtocolCombo.setItems(controlItems);
518 fDataProtocolCombo.setItems(controlItems);
519
520 // Set selection
521 fControlProtocolCombo.select(currentSelection);
522 fDataProtocolCombo.select(currentSelection);
523 fDataHostAddressText.setText(fControlHostAddressText.getText());
524
525 // Update tool tips
526 fControlProtocolCombo.setToolTipText(Messages.TraceControl_CreateSessionCommonProtocolTooltip);
527 } else {
528 // Enable data channel inputs
529 fDataProtocolCombo.setEnabled(true);
530 fDataHostAddressText.setEnabled(true);
531
532 // Update listeners
533 fControlProtocolCombo.removeSelectionListener(fCopyProtocolSelectionListener);
534 fControlProtocolCombo.addSelectionListener(fControlProtocolSelectionListener);
535 fDataProtocolCombo.addSelectionListener(fDataProtocolSelectionListener);
536 fControlHostAddressText.removeModifyListener(fControlUrlKeyListener);
537
538 // Update combo box items
539 int currentSelection = fControlProtocolCombo.getSelectionIndex();
540 fControlProtocolCombo.removeAll();
541 String[] controlItems = new String[StreamingProtocol2.values().length];
542 for (int i = 0; i < controlItems.length; i++) {
543 controlItems[i] = StreamingProtocol2.values()[i].name();
544 }
545 fControlProtocolCombo.setItems(controlItems);
546 fDataProtocolCombo.setItems(controlItems);
547
548 // Set selection
549 fControlProtocolCombo.select(currentSelection);
550 fDataProtocolCombo.select(currentSelection);
551
552 // Update tool tips
553 fDataProtocolCombo.setToolTipText(Messages.TraceControl_CreateSessionProtocolTooltip);
554 fControlProtocolCombo.setToolTipText(Messages.TraceControl_CreateSessionProtocolTooltip);
555
556 // Update control/data port enablement and input
557 if (fControlProtocolCombo.getItem(fControlProtocolCombo.getSelectionIndex()).equals(StreamingProtocol.net.name()) ||
558 fControlProtocolCombo.getItem(fControlProtocolCombo.getSelectionIndex()).equals(StreamingProtocol.net6.name())) {
559 fControlPortText.setText(""); //$NON-NLS-1$
560 fControlPortText.setEnabled(false);
561 } else {
562 fControlPortText.setEnabled(true);
563 }
564
565 if (fDataProtocolCombo.getItem(fDataProtocolCombo.getSelectionIndex()).equals(StreamingProtocol.net.name()) ||
566 fDataProtocolCombo.getItem(fDataProtocolCombo.getSelectionIndex()).equals(StreamingProtocol.net6.name())) {
567 fDataPortText.setText(""); //$NON-NLS-1$
568 fDataPortText.setEnabled(false);
569 } else {
570 fDataPortText.setEnabled(true);
571 }
572 }
573 }
574 });
575 }
576 }
577
578 private void disposeConfigureStreamingComposite() {
579 if (fStreamingComposite != null) {
580 fStreamingComposite.dispose();
581 fStreamingComposite = null;
582 }
583 }
584
585 @Override
586 protected void createButtonsForButtonBar(Composite parent) {
587 createButton(parent, IDialogConstants.CANCEL_ID, "&Cancel", true); //$NON-NLS-1$
588 createButton(parent, IDialogConstants.OK_ID, "&Ok", true); //$NON-NLS-1$
589 }
590
591 private void updateEnablement() {
592 validate();
593 getButton(IDialogConstants.OK_ID).setEnabled(getErrorMessage() == null);
594 }
595
596 private void validate() {
597 // Validate input data
598 fSessionName = fSessionNameText.getText();
599 fSessionPath = fSessionPathText.getText();
600 setErrorMessage(null);
601
602 if (!"".equals(fSessionPath)) { //$NON-NLS-1$
603 // validate sessionPath
604 if (!fIsStreamedTrace) {
605 TargetNodeComponent node = (TargetNodeComponent)fParent.getParent();
606 IRemoteSystemProxy proxy = node.getRemoteSystemProxy();
607 IFileServiceSubSystem fsss = proxy.getFileServiceSubSystem();
608 if (fsss != null) {
609 try {
610 IRemoteFile remoteFolder = fsss.getRemoteFileObject(fSessionPath, new NullProgressMonitor());
611
612 if (remoteFolder == null) {
613 setErrorMessage(Messages.TraceControl_InvalidSessionPathError + " (" + fSessionPath + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
614 return;
615 }
616
617 if (remoteFolder.exists()) {
618 setErrorMessage(Messages.TraceControl_SessionPathAlreadyExistsError + " (" + fSessionPath + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
619 return;
620 }
621 } catch (SystemMessageException e) {
622 setErrorMessage(Messages.TraceControl_FileSubSystemError + "\n" + e); //$NON-NLS-1$
623 return;
624 }
625 }
626 }
627 fIsDefaultPath = false;
628 }
629
630 if (fParent.isSnapshotSupported()) {
631 fIsSnapshot = fSnapshotButton.getSelection();
632 }
633
634 fNetworkUrl = null;
635 fControlUrl = null;
636 fDataUrl = null;
637
638 if (fIsStreamedTrace && fStreamingComposite != null) {
639 // Validate input data
640 fTracePath = fTracePathText.getText();
641
642 if (fControlProtocolCombo.getSelectionIndex() < 0) {
643 setErrorMessage("Control Protocol Text is empty\n"); //$NON-NLS-1$
644 return;
645 }
646
647 if ("".equals(fControlHostAddressText.getText())) { //$NON-NLS-1$
648 setErrorMessage("Control Address Text is empty\n"); //$NON-NLS-1$
649 return;
650 }
651
652 if (!fLinkDataWithControlButton.getSelection()) {
653 if (fDataProtocolCombo.getSelectionIndex() < 0) {
654 setErrorMessage("Data Protocol Text is empty\n"); //$NON-NLS-1$
655 return;
656 }
657
658 if ("".equals(fDataHostAddressText.getText())) { //$NON-NLS-1$
659 setErrorMessage("Data Address Text is empty\n"); //$NON-NLS-1$
660 return;
661 }
662
663 fControlUrl = getUrlString(fControlProtocolCombo.getItem(fControlProtocolCombo.getSelectionIndex()),
664 fControlHostAddressText.getText(),
665 fControlPortText.getText(),
666 null,
667 fTracePath);
668
669 fDataUrl = getUrlString(fDataProtocolCombo.getItem(fDataProtocolCombo.getSelectionIndex()),
670 fDataHostAddressText.getText(),
671 null,
672 fDataPortText.getText(),
673 fTracePath);
674 } else {
675 fNetworkUrl = getUrlString(fControlProtocolCombo.getItem(fControlProtocolCombo.getSelectionIndex()),
676 fControlHostAddressText.getText(),
677 fControlPortText.getText(),
678 fDataPortText.getText(),
679 fTracePath);
680 }
681 }
682
683 // Check for invalid names
684 if (!"".equals(fSessionName) && !fSessionName.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ //$NON-NLS-2$
685 setErrorMessage(Messages.TraceControl_InvalidSessionNameError + " (" + fSessionName + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
686 return;
687 }
688
689 // Check if node with name already exists in parent
690 if(fParent.containsChild(fSessionName)) {
691 setErrorMessage(Messages.TraceControl_SessionAlreadyExistsError + " (" + fSessionName + ")"); //$NON-NLS-1$ //$NON-NLS-2$
692 return;
693 }
694 }
695
696 private static String getUrlString(String proto, String host, String ctrlPort, String dataPort, String sessionPath) {
697 //proto://[HOST|IP][:PORT1[:PORT2]][/TRACE_PATH]
698 StringBuilder stringBuilder = new StringBuilder();
699 stringBuilder.append(proto);
700 stringBuilder.append("://"); //$NON-NLS-1$
701 stringBuilder.append(host);
702
703 if ((ctrlPort != null) && (!"".equals(ctrlPort))) { //$NON-NLS-1$
704 stringBuilder.append(":"); //$NON-NLS-1$
705 stringBuilder.append(ctrlPort);
706 }
707
708 if ((dataPort != null) && (!"".equals(dataPort))) { //$NON-NLS-1$
709 stringBuilder.append(":"); //$NON-NLS-1$
710 stringBuilder.append(dataPort);
711 }
712
713 if ((sessionPath != null) && (!"".equals(sessionPath))) { //$NON-NLS-1$
714 stringBuilder.append("/"); //$NON-NLS-1$
715 stringBuilder.append(sessionPath);
716 }
717 return stringBuilder.toString();
718 }
719
720 private static class CopyModifyListener implements ModifyListener {
721 private Text fSource;
722 private Text fDestination;
723
724 public CopyModifyListener(Text source, Text destination) {
725 fSource = source;
726 fDestination = destination;
727 }
728
729 @Override
730 public void modifyText(ModifyEvent e) {
731 fDestination.setText(fSource.getText());
732 }
733 }
734
735 private class ControlProtocolSelectionListener extends SelectionAdapter {
736
737 @Override
738 public void widgetSelected(SelectionEvent e) {
739 fDataProtocolCombo.select(fControlProtocolCombo.getSelectionIndex());
740 if (fControlProtocolCombo.getItem(fControlProtocolCombo.getSelectionIndex()).equals(StreamingProtocol.file.name())) {
741 fControlPortText.setText(""); //$NON-NLS-1$
742 fDataPortText.setText(""); //$NON-NLS-1$
743 fControlPortText.setEnabled(false);
744 fDataPortText.setEnabled(false);
745 } else {
746 fControlPortText.setEnabled(true);
747 fDataPortText.setEnabled(true);
748 }
749 }
750 }
751
752 private class ProtocolComboSelectionListener extends SelectionAdapter {
753
754 private CCombo fCombo;
755 private Text fPortText;
756
757 public ProtocolComboSelectionListener(CCombo combo, Text portText) {
758 fCombo = combo;
759 fPortText = portText;
760 }
761
762 @Override
763 public void widgetSelected(SelectionEvent e) {
764 if (fCombo.getItem(fCombo.getSelectionIndex()).equals(StreamingProtocol.net.name()) ||
765 fCombo.getItem(fCombo.getSelectionIndex()).equals(StreamingProtocol.net6.name())) {
766 fPortText.setText(""); //$NON-NLS-1$
767 fPortText.setEnabled(false);
768 } else {
769 fPortText.setEnabled(true);
770 }
771 }
772 }
773
774 @Override
775 public ISessionInfo getParameters() {
776 ISessionInfo sessionInfo = new SessionInfo(fSessionName);
777
778 if (fIsStreamedTrace) {
779 sessionInfo.setNetworkUrl(fNetworkUrl);
780 sessionInfo.setControlUrl(fControlUrl);
781 sessionInfo.setDataUrl(fDataUrl);
782 sessionInfo.setStreamedTrace(true);
783 } else if (!fIsDefaultPath) {
784 sessionInfo.setSessionPath(fSessionPath);
785 }
786
787 sessionInfo.setSnapshot(fIsSnapshot);
788
789 return sessionInfo;
790 }
791
792 private final class UpdateEnablementModifyListener implements ModifyListener {
793 @Override
794 public void modifyText(ModifyEvent e) {
795 updateEnablement();
796 }
797 }
798 }
This page took 0.057355 seconds and 6 git commands to generate.