Merge branch 'master' into lttng_2_0_control_dev
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / internal / lttng / ui / views / control / dialogs / NewConnectionDialog.java
1 /**********************************************************************
2 * Copyright (c) 2012 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 **********************************************************************/
12 package org.eclipse.linuxtools.internal.lttng.ui.views.control.dialogs;
13
14 import java.util.Arrays;
15
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.lttng.ui.Activator;
20 import org.eclipse.linuxtools.internal.lttng.ui.views.control.Messages;
21 import org.eclipse.linuxtools.internal.lttng.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;
37
38 /**
39 * <b><u>NewConnectionDialog</u></b>
40 * <p>
41 * Dialog box for connection information.
42 * </p>
43 */
44 public class NewConnectionDialog extends Dialog implements INewConnectionDialog {
45
46 // ------------------------------------------------------------------------
47 // Constants
48 // ------------------------------------------------------------------------
49 /**
50 * The icon file for this dialog box.
51 */
52 public static final String TARGET_NEW_CONNECTION_ICON_FILE = "icons/elcl16/target_add.gif"; //$NON-NLS-1$
53
54 // ------------------------------------------------------------------------
55 // Attributes
56 // ------------------------------------------------------------------------
57 /**
58 * The dialog composite.
59 */
60 private Composite fDialogComposite = null;
61 /**
62 * The Group for the host combo box.
63 */
64 private Group fComboGroup = null;
65 /**
66 * The Group for the text input.
67 */
68 private Group fTextGroup = null;
69 /**
70 * The host combo box.
71 */
72 private CCombo fExistingHostsCombo = null;
73 /**
74 * The check box button for enabling/disabling the text input.
75 */
76 private Button fButton = null;
77 /**
78 * The text widget for the node name (alias)
79 */
80 private Text fConnectionNameText = null;
81 /**
82 * The text widget for the node address (IP or DNS name)
83 */
84 private Text fHostNameText = null;
85 /**
86 * The parent where the new node should be added.
87 */
88 private ITraceControlComponent fParent;
89 /**
90 * The node name (alias) string.
91 */
92 private String fConnectionName = null;
93 /**
94 * The node address (IP or DNS name) string.
95 */
96 private String fHostName = null;
97
98 /**
99 * Input list of existing RSE hosts available for selection.
100 */
101 private IHost[] fExistingHosts = new IHost[0];
102
103 // ------------------------------------------------------------------------
104 // Constructors
105 // ------------------------------------------------------------------------
106 public NewConnectionDialog(Shell shell) {
107 super(shell);
108 setShellStyle(SWT.RESIZE);
109 }
110
111 // ------------------------------------------------------------------------
112 // Accessors
113 // ------------------------------------------------------------------------
114 /*
115 * (non-Javadoc)
116 * @see org.eclipse.linuxtools.internal.lttng.ui.views.control.dialogs.INewConnectionDialog#getConnectionName()
117 */
118 @Override
119 public String getConnectionName() {
120 return fConnectionName;
121 }
122
123 /*
124 * (non-Javadoc)
125 * @see org.eclipse.linuxtools.internal.lttng.ui.views.control.dialogs.INewConnectionDialog#getHostName()
126 */
127 @Override
128 public String getHostName() {
129 return fHostName;
130 }
131
132 /*
133 * (non-Javadoc)
134 * @see org.eclipse.linuxtools.internal.lttng.ui.views.control.dialogs.INewConnectionDialog#setTraceControlParent(org.eclipse.linuxtools.internal.lttng.ui.views.control.model.ITraceControlComponent)
135 */
136 @Override
137 public void setTraceControlParent(ITraceControlComponent parent) {
138 fParent = parent;
139 }
140
141 /*
142 * (non-Javadoc)
143 * @see org.eclipse.linuxtools.internal.lttng.ui.views.control.dialogs.INewConnectionDialog#setHosts(org.eclipse.rse.core.model.IHost[])
144 */
145 @Override
146 public void setHosts(IHost[] hosts) {
147 if (hosts != null) {
148 fExistingHosts = Arrays.copyOf(hosts, hosts.length);
149 }
150 }
151
152 // ------------------------------------------------------------------------
153 // Operations
154 // ------------------------------------------------------------------------
155 /*
156 * (non-Javadoc)
157 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
158 */
159 @Override
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));
164 }
165
166 /*
167 * (non-Javadoc)
168 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
169 */
170 @Override
171 protected Control createDialogArea(Composite parent) {
172
173 // Main dialog panel
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));
178
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);
186
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));
190
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$
194 }
195
196 fExistingHostsCombo.setItems(items);
197 fExistingHostsCombo.setEnabled(fExistingHosts.length > 0);
198
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);
205
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);
210
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);
216
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);
222
223 fButton.addSelectionListener(new SelectionListener() {
224 @Override
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);
231 } else {
232 fExistingHostsCombo.setEnabled(true);
233 fConnectionNameText.setEnabled(false);
234 fHostNameText.setEnabled(false);
235 }
236 }
237
238 @Override
239 public void widgetDefaultSelected(SelectionEvent e) {
240 }
241 });
242
243 fExistingHostsCombo.addSelectionListener(new SelectionListener() {
244 @Override
245 public void widgetSelected(SelectionEvent e) {
246 int index = fExistingHostsCombo.getSelectionIndex();
247 fConnectionNameText.setText(fExistingHosts[index].getAliasName());
248 fHostNameText.setText(fExistingHosts[index].getHostName());
249 }
250
251 @Override
252 public void widgetDefaultSelected(SelectionEvent e) {
253 }
254 });
255
256 // layout widgets
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;
262
263 fConnectionNameText.setLayoutData(data);
264 fHostNameText.setLayoutData(data);
265
266 fHostNameText.setText(""); //$NON-NLS-1$
267
268 return fDialogComposite;
269 }
270
271 /*
272 * (non-Javadoc)
273 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
274 */
275 @Override
276 protected void createButtonsForButtonBar(Composite parent) {
277 createButton(parent, IDialogConstants.OK_ID, "&Ok", true); //$NON-NLS-1$
278 }
279
280 /*
281 * (non-Javadoc)
282 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
283 */
284 @Override
285 protected void okPressed() {
286 // Validate input data
287 fConnectionName = fConnectionNameText.getText();
288 fHostName = fHostNameText.getText();
289
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;
294 }
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$
300 return;
301 }
302 }
303 else {
304 return;
305 }
306 // validation successful -> call super.okPressed()
307 super.okPressed();
308 }
309 }
This page took 0.037648 seconds and 6 git commands to generate.