1 /**********************************************************************
2 * Copyright (c) 2012 Ericsson
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
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.dialogs
;
14 import java
.util
.Arrays
;
16 import org
.eclipse
.jface
.dialogs
.Dialog
;
17 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
18 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
19 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.Activator
;
20 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.Messages
;
21 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.ITraceControlComponent
;
22 import org
.eclipse
.rse
.core
.model
.IHost
;
23 import org
.eclipse
.swt
.SWT
;
24 import org
.eclipse
.swt
.custom
.CCombo
;
25 import org
.eclipse
.swt
.events
.SelectionEvent
;
26 import org
.eclipse
.swt
.events
.SelectionListener
;
27 import org
.eclipse
.swt
.graphics
.Point
;
28 import org
.eclipse
.swt
.layout
.GridData
;
29 import org
.eclipse
.swt
.layout
.GridLayout
;
30 import org
.eclipse
.swt
.widgets
.Button
;
31 import org
.eclipse
.swt
.widgets
.Composite
;
32 import org
.eclipse
.swt
.widgets
.Control
;
33 import org
.eclipse
.swt
.widgets
.Group
;
34 import org
.eclipse
.swt
.widgets
.Label
;
35 import org
.eclipse
.swt
.widgets
.Shell
;
36 import org
.eclipse
.swt
.widgets
.Text
;
39 * <b><u>NewConnectionDialog</u></b>
41 * Dialog box for connection information.
44 public class NewConnectionDialog
extends Dialog
implements INewConnectionDialog
{
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
50 * The icon file for this dialog box.
52 public static final String TARGET_NEW_CONNECTION_ICON_FILE
= "icons/elcl16/target_add.gif"; //$NON-NLS-1$
54 // ------------------------------------------------------------------------
56 // ------------------------------------------------------------------------
58 * The dialog composite.
60 private Composite fDialogComposite
= null;
62 * The Group for the host combo box.
64 private Group fComboGroup
= null;
66 * The Group for the text input.
68 private Group fTextGroup
= null;
72 private CCombo fExistingHostsCombo
= null;
74 * The check box button for enabling/disabling the text input.
76 private Button fButton
= null;
78 * The text widget for the node name (alias)
80 private Text fConnectionNameText
= null;
82 * The text widget for the node address (IP or DNS name)
84 private Text fHostNameText
= null;
86 * The parent where the new node should be added.
88 private ITraceControlComponent fParent
;
90 * The node name (alias) string.
92 private String fConnectionName
= null;
94 * The node address (IP or DNS name) string.
96 private String fHostName
= null;
99 * Input list of existing RSE hosts available for selection.
101 private IHost
[] fExistingHosts
= new IHost
[0];
103 // ------------------------------------------------------------------------
105 // ------------------------------------------------------------------------
106 public NewConnectionDialog(Shell shell
) {
108 setShellStyle(SWT
.RESIZE
);
111 // ------------------------------------------------------------------------
113 // ------------------------------------------------------------------------
116 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getConnectionName()
119 public String
getConnectionName() {
120 return fConnectionName
;
125 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getHostName()
128 public String
getHostName() {
134 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setTraceControlParent(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent)
137 public void setTraceControlParent(ITraceControlComponent parent
) {
143 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setHosts(org.eclipse.rse.core.model.IHost[])
146 public void setHosts(IHost
[] hosts
) {
148 fExistingHosts
= Arrays
.copyOf(hosts
, hosts
.length
);
152 // ------------------------------------------------------------------------
154 // ------------------------------------------------------------------------
157 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
160 protected void configureShell(Shell newShell
) {
161 super.configureShell(newShell
);
162 newShell
.setText(Messages
.TraceControl_NewDialogTitle
);
163 newShell
.setImage(Activator
.getDefault().loadIcon(TARGET_NEW_CONNECTION_ICON_FILE
));
168 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
171 protected Control
createDialogArea(Composite parent
) {
174 fDialogComposite
= new Composite(parent
, SWT
.NONE
);
175 GridLayout layout
= new GridLayout(1, true);
176 fDialogComposite
.setLayout(layout
);
177 fDialogComposite
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
179 // Existing connections group
180 fComboGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
181 fComboGroup
.setText(Messages
.TraceControl_NewNodeExistingConnectionGroupName
);
182 layout
= new GridLayout(2, true);
183 fComboGroup
.setLayout(layout
);
184 GridData data
= new GridData(GridData
.FILL_HORIZONTAL
);
185 fComboGroup
.setLayoutData(data
);
187 fExistingHostsCombo
= new CCombo(fComboGroup
, SWT
.READ_ONLY
);
188 fExistingHostsCombo
.setToolTipText(Messages
.TraceControl_NewNodeComboToolTip
);
189 fExistingHostsCombo
.setLayoutData(new GridData(GridData
.FILL
, GridData
.CENTER
, true, false, 2, 1));
191 String items
[] = new String
[fExistingHosts
.length
];
192 for (int i
= 0; i
< items
.length
; i
++) {
193 items
[i
] = String
.valueOf(fExistingHosts
[i
].getAliasName() + " - " + fExistingHosts
[i
].getHostName()); //$NON-NLS-1$
196 fExistingHostsCombo
.setItems(items
);
197 fExistingHostsCombo
.setEnabled(fExistingHosts
.length
> 0);
199 // Node information grop
200 fTextGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
201 layout
= new GridLayout(3, true);
202 fTextGroup
.setLayout(layout
);
203 data
= new GridData(GridData
.FILL_HORIZONTAL
);
204 fTextGroup
.setLayoutData(data
);
206 fButton
= new Button(fTextGroup
, SWT
.CHECK
);
207 fButton
.setLayoutData(new GridData(GridData
.FILL
, GridData
.CENTER
, true, false, 3, 1));
208 fButton
.setText(Messages
.TraceControl_NewNodeEditButtonName
);
209 fButton
.setEnabled(fExistingHosts
.length
> 0);
211 Label connectionNameLabel
= new Label(fTextGroup
, SWT
.RIGHT
);
212 connectionNameLabel
.setText(Messages
.TraceControl_NewNodeConnectionNameLabel
);
213 fConnectionNameText
= new Text(fTextGroup
, SWT
.NONE
);
214 fConnectionNameText
.setToolTipText(Messages
.TraceControl_NewNodeConnectionNameTooltip
);
215 fConnectionNameText
.setEnabled(fExistingHosts
.length
== 0);
217 Label hostNameLabel
= new Label(fTextGroup
, SWT
.RIGHT
);
218 hostNameLabel
.setText(Messages
.TraceControl_NewNodeHostNameLabel
);
219 fHostNameText
= new Text(fTextGroup
, SWT
.NONE
);
220 fHostNameText
.setToolTipText(Messages
.TraceControl_NewNodeHostNameTooltip
);
221 fHostNameText
.setEnabled(fExistingHosts
.length
== 0);
223 fButton
.addSelectionListener(new SelectionListener() {
225 public void widgetSelected(SelectionEvent e
) {
226 if (fButton
.getSelection()) {
227 fExistingHostsCombo
.deselectAll();
228 fExistingHostsCombo
.setEnabled(false);
229 fConnectionNameText
.setEnabled(true);
230 fHostNameText
.setEnabled(true);
232 fExistingHostsCombo
.setEnabled(true);
233 fConnectionNameText
.setEnabled(false);
234 fHostNameText
.setEnabled(false);
239 public void widgetDefaultSelected(SelectionEvent e
) {
243 fExistingHostsCombo
.addSelectionListener(new SelectionListener() {
245 public void widgetSelected(SelectionEvent e
) {
246 int index
= fExistingHostsCombo
.getSelectionIndex();
247 fConnectionNameText
.setText(fExistingHosts
[index
].getAliasName());
248 fHostNameText
.setText(fExistingHosts
[index
].getHostName());
252 public void widgetDefaultSelected(SelectionEvent e
) {
257 data
= new GridData(GridData
.FILL_HORIZONTAL
);
258 fHostNameText
.setText("666.666.666.666"); //$NON-NLS-1$
259 Point minSize
= fHostNameText
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
, true);
260 data
.widthHint
= minSize
.x
+ 5;
261 data
.horizontalSpan
= 2;
263 fConnectionNameText
.setLayoutData(data
);
264 fHostNameText
.setLayoutData(data
);
266 fHostNameText
.setText(""); //$NON-NLS-1$
268 return fDialogComposite
;
273 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
276 protected void createButtonsForButtonBar(Composite parent
) {
277 createButton(parent
, IDialogConstants
.OK_ID
, "&Ok", true); //$NON-NLS-1$
282 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
285 protected void okPressed() {
286 // Validate input data
287 fConnectionName
= fConnectionNameText
.getText();
288 fHostName
= fHostNameText
.getText();
290 if (!"".equals(fHostName
)) { //$NON-NLS-1$
291 // If no node name is specified use the node address as name
292 if ("".equals(fConnectionName
)) { //$NON-NLS-1$
293 fConnectionName
= fHostName
;
295 // Check if node with name already exists in parent
296 if(fParent
.containsChild(fConnectionName
)) {
297 MessageDialog
.openError(getShell(),
298 Messages
.TraceControl_NewDialogTitle
,
299 Messages
.TraceControl_AlreadyExistsError
+ " (" + fConnectionName
+ ")"); //$NON-NLS-1$//$NON-NLS-2$
306 // validation successful -> call super.okPressed()