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
.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
;
40 * Dialog box for connection information.
43 * @author Bernd Hufmann
45 public class NewConnectionDialog
extends Dialog
implements INewConnectionDialog
{
47 // ------------------------------------------------------------------------
49 // ------------------------------------------------------------------------
51 * The icon file for this dialog box.
53 public static final String TARGET_NEW_CONNECTION_ICON_FILE
= "icons/elcl16/target_add.gif"; //$NON-NLS-1$
55 // ------------------------------------------------------------------------
57 // ------------------------------------------------------------------------
59 * The dialog composite.
61 private Composite fDialogComposite
= null;
63 * The Group for the host combo box.
65 private Group fComboGroup
= null;
67 * The Group for the text input.
69 private Group fTextGroup
= null;
73 private CCombo fExistingHostsCombo
= null;
75 * The check box button for enabling/disabling the text input.
77 private Button fButton
= null;
79 * The text widget for the node name (alias)
81 private Text fConnectionNameText
= null;
83 * The text widget for the node address (IP or DNS name)
85 private Text fHostNameText
= null;
87 * The parent where the new node should be added.
89 private ITraceControlComponent fParent
;
91 * The node name (alias) string.
93 private String fConnectionName
= null;
95 * The node address (IP or DNS name) string.
97 private String fHostName
= null;
100 * Input list of existing RSE hosts available for selection.
102 private IHost
[] fExistingHosts
= new IHost
[0];
104 // ------------------------------------------------------------------------
106 // ------------------------------------------------------------------------
113 public NewConnectionDialog(Shell shell
) {
115 setShellStyle(SWT
.RESIZE
);
118 // ------------------------------------------------------------------------
120 // ------------------------------------------------------------------------
123 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getConnectionName()
126 public String
getConnectionName() {
127 return fConnectionName
;
132 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getHostName()
135 public String
getHostName() {
141 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setTraceControlParent(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent)
144 public void setTraceControlParent(ITraceControlComponent parent
) {
150 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setHosts(org.eclipse.rse.core.model.IHost[])
153 public void setHosts(IHost
[] hosts
) {
155 fExistingHosts
= Arrays
.copyOf(hosts
, hosts
.length
);
159 // ------------------------------------------------------------------------
161 // ------------------------------------------------------------------------
164 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
167 protected void configureShell(Shell newShell
) {
168 super.configureShell(newShell
);
169 newShell
.setText(Messages
.TraceControl_NewDialogTitle
);
170 newShell
.setImage(Activator
.getDefault().loadIcon(TARGET_NEW_CONNECTION_ICON_FILE
));
175 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
178 protected Control
createDialogArea(Composite parent
) {
181 fDialogComposite
= new Composite(parent
, SWT
.NONE
);
182 GridLayout layout
= new GridLayout(1, true);
183 fDialogComposite
.setLayout(layout
);
184 fDialogComposite
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
186 // Existing connections group
187 fComboGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
188 fComboGroup
.setText(Messages
.TraceControl_NewNodeExistingConnectionGroupName
);
189 layout
= new GridLayout(2, true);
190 fComboGroup
.setLayout(layout
);
191 GridData data
= new GridData(GridData
.FILL_HORIZONTAL
);
192 fComboGroup
.setLayoutData(data
);
194 fExistingHostsCombo
= new CCombo(fComboGroup
, SWT
.READ_ONLY
);
195 fExistingHostsCombo
.setToolTipText(Messages
.TraceControl_NewNodeComboToolTip
);
196 fExistingHostsCombo
.setLayoutData(new GridData(GridData
.FILL
, GridData
.CENTER
, true, false, 2, 1));
198 String items
[] = new String
[fExistingHosts
.length
];
199 for (int i
= 0; i
< items
.length
; i
++) {
200 items
[i
] = String
.valueOf(fExistingHosts
[i
].getAliasName() + " - " + fExistingHosts
[i
].getHostName()); //$NON-NLS-1$
203 fExistingHostsCombo
.setItems(items
);
204 fExistingHostsCombo
.setEnabled(fExistingHosts
.length
> 0);
206 // Node information grop
207 fTextGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
208 layout
= new GridLayout(3, true);
209 fTextGroup
.setLayout(layout
);
210 data
= new GridData(GridData
.FILL_HORIZONTAL
);
211 fTextGroup
.setLayoutData(data
);
213 fButton
= new Button(fTextGroup
, SWT
.CHECK
);
214 fButton
.setLayoutData(new GridData(GridData
.FILL
, GridData
.CENTER
, true, false, 3, 1));
215 fButton
.setText(Messages
.TraceControl_NewNodeEditButtonName
);
216 fButton
.setEnabled(fExistingHosts
.length
> 0);
218 Label connectionNameLabel
= new Label(fTextGroup
, SWT
.RIGHT
);
219 connectionNameLabel
.setText(Messages
.TraceControl_NewNodeConnectionNameLabel
);
220 fConnectionNameText
= new Text(fTextGroup
, SWT
.NONE
);
221 fConnectionNameText
.setToolTipText(Messages
.TraceControl_NewNodeConnectionNameTooltip
);
222 fConnectionNameText
.setEnabled(fExistingHosts
.length
== 0);
224 Label hostNameLabel
= new Label(fTextGroup
, SWT
.RIGHT
);
225 hostNameLabel
.setText(Messages
.TraceControl_NewNodeHostNameLabel
);
226 fHostNameText
= new Text(fTextGroup
, SWT
.NONE
);
227 fHostNameText
.setToolTipText(Messages
.TraceControl_NewNodeHostNameTooltip
);
228 fHostNameText
.setEnabled(fExistingHosts
.length
== 0);
230 fButton
.addSelectionListener(new SelectionListener() {
232 public void widgetSelected(SelectionEvent e
) {
233 if (fButton
.getSelection()) {
234 fExistingHostsCombo
.deselectAll();
235 fExistingHostsCombo
.setEnabled(false);
236 fConnectionNameText
.setEnabled(true);
237 fHostNameText
.setEnabled(true);
239 fExistingHostsCombo
.setEnabled(true);
240 fConnectionNameText
.setEnabled(false);
241 fHostNameText
.setEnabled(false);
246 public void widgetDefaultSelected(SelectionEvent e
) {
250 fExistingHostsCombo
.addSelectionListener(new SelectionListener() {
252 public void widgetSelected(SelectionEvent e
) {
253 int index
= fExistingHostsCombo
.getSelectionIndex();
254 fConnectionNameText
.setText(fExistingHosts
[index
].getAliasName());
255 fHostNameText
.setText(fExistingHosts
[index
].getHostName());
259 public void widgetDefaultSelected(SelectionEvent e
) {
264 data
= new GridData(GridData
.FILL_HORIZONTAL
);
265 fHostNameText
.setText("666.666.666.666"); //$NON-NLS-1$
266 Point minSize
= fHostNameText
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
, true);
267 data
.widthHint
= minSize
.x
+ 5;
268 data
.horizontalSpan
= 2;
270 fConnectionNameText
.setLayoutData(data
);
271 fHostNameText
.setLayoutData(data
);
273 fHostNameText
.setText(""); //$NON-NLS-1$
275 return fDialogComposite
;
280 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
283 protected void createButtonsForButtonBar(Composite parent
) {
284 createButton(parent
, IDialogConstants
.CANCEL_ID
, "&Cancel", true); //$NON-NLS-1$
285 createButton(parent
, IDialogConstants
.OK_ID
, "&Ok", true); //$NON-NLS-1$
290 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
293 protected void okPressed() {
294 // Validate input data
295 fConnectionName
= fConnectionNameText
.getText();
296 fHostName
= fHostNameText
.getText();
298 if (!"".equals(fHostName
)) { //$NON-NLS-1$
299 // If no node name is specified use the node address as name
300 if ("".equals(fConnectionName
)) { //$NON-NLS-1$
301 fConnectionName
= fHostName
;
303 // Check if node with name already exists in parent
304 if(fParent
.containsChild(fConnectionName
)) {
305 MessageDialog
.openError(getShell(),
306 Messages
.TraceControl_NewDialogTitle
,
307 Messages
.TraceControl_AlreadyExistsError
+ " (" + fConnectionName
+ ")"); //$NON-NLS-1$//$NON-NLS-2$
314 // validation successful -> call super.okPressed()