7f149764ce0a0eee5f3b0fd330b5e119864c90ff
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.ui / src / org / eclipse / linuxtools / internal / lttng2 / 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.lttng2.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.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;
37
38 /**
39 * <p>
40 * Dialog box for connection information.
41 * </p>
42 *
43 * @author Bernd Hufmann
44 */
45 public class NewConnectionDialog extends Dialog implements INewConnectionDialog {
46
47 // ------------------------------------------------------------------------
48 // Constants
49 // ------------------------------------------------------------------------
50 /**
51 * The icon file for this dialog box.
52 */
53 public static final String TARGET_NEW_CONNECTION_ICON_FILE = "icons/elcl16/target_add.gif"; //$NON-NLS-1$
54
55 // ------------------------------------------------------------------------
56 // Attributes
57 // ------------------------------------------------------------------------
58 /**
59 * The dialog composite.
60 */
61 private Composite fDialogComposite = null;
62 /**
63 * The Group for the host combo box.
64 */
65 private Group fComboGroup = null;
66 /**
67 * The Group for the text input.
68 */
69 private Group fTextGroup = null;
70 /**
71 * The host combo box.
72 */
73 private CCombo fExistingHostsCombo = null;
74 /**
75 * The check box button for enabling/disabling the text input.
76 */
77 private Button fButton = null;
78 /**
79 * The text widget for the node name (alias)
80 */
81 private Text fConnectionNameText = null;
82 /**
83 * The text widget for the node address (IP or DNS name)
84 */
85 private Text fHostNameText = null;
86 /**
87 * The parent where the new node should be added.
88 */
89 private ITraceControlComponent fParent;
90 /**
91 * The node name (alias) string.
92 */
93 private String fConnectionName = null;
94 /**
95 * The node address (IP or DNS name) string.
96 */
97 private String fHostName = null;
98
99 /**
100 * Input list of existing RSE hosts available for selection.
101 */
102 private IHost[] fExistingHosts = new IHost[0];
103
104 // ------------------------------------------------------------------------
105 // Constructors
106 // ------------------------------------------------------------------------
107 public NewConnectionDialog(Shell shell) {
108 super(shell);
109 setShellStyle(SWT.RESIZE);
110 }
111
112 // ------------------------------------------------------------------------
113 // Accessors
114 // ------------------------------------------------------------------------
115 /*
116 * (non-Javadoc)
117 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getConnectionName()
118 */
119 @Override
120 public String getConnectionName() {
121 return fConnectionName;
122 }
123
124 /*
125 * (non-Javadoc)
126 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#getHostName()
127 */
128 @Override
129 public String getHostName() {
130 return fHostName;
131 }
132
133 /*
134 * (non-Javadoc)
135 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setTraceControlParent(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent)
136 */
137 @Override
138 public void setTraceControlParent(ITraceControlComponent parent) {
139 fParent = parent;
140 }
141
142 /*
143 * (non-Javadoc)
144 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.INewConnectionDialog#setHosts(org.eclipse.rse.core.model.IHost[])
145 */
146 @Override
147 public void setHosts(IHost[] hosts) {
148 if (hosts != null) {
149 fExistingHosts = Arrays.copyOf(hosts, hosts.length);
150 }
151 }
152
153 // ------------------------------------------------------------------------
154 // Operations
155 // ------------------------------------------------------------------------
156 /*
157 * (non-Javadoc)
158 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
159 */
160 @Override
161 protected void configureShell(Shell newShell) {
162 super.configureShell(newShell);
163 newShell.setText(Messages.TraceControl_NewDialogTitle);
164 newShell.setImage(Activator.getDefault().loadIcon(TARGET_NEW_CONNECTION_ICON_FILE));
165 }
166
167 /*
168 * (non-Javadoc)
169 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
170 */
171 @Override
172 protected Control createDialogArea(Composite parent) {
173
174 // Main dialog panel
175 fDialogComposite = new Composite(parent, SWT.NONE);
176 GridLayout layout = new GridLayout(1, true);
177 fDialogComposite.setLayout(layout);
178 fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
179
180 // Existing connections group
181 fComboGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
182 fComboGroup.setText(Messages.TraceControl_NewNodeExistingConnectionGroupName);
183 layout = new GridLayout(2, true);
184 fComboGroup.setLayout(layout);
185 GridData data = new GridData(GridData.FILL_HORIZONTAL);
186 fComboGroup.setLayoutData(data);
187
188 fExistingHostsCombo = new CCombo(fComboGroup, SWT.READ_ONLY);
189 fExistingHostsCombo.setToolTipText(Messages.TraceControl_NewNodeComboToolTip);
190 fExistingHostsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
191
192 String items[] = new String[fExistingHosts.length];
193 for (int i = 0; i < items.length; i++) {
194 items[i] = String.valueOf(fExistingHosts[i].getAliasName() + " - " + fExistingHosts[i].getHostName()); //$NON-NLS-1$
195 }
196
197 fExistingHostsCombo.setItems(items);
198 fExistingHostsCombo.setEnabled(fExistingHosts.length > 0);
199
200 // Node information grop
201 fTextGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
202 layout = new GridLayout(3, true);
203 fTextGroup.setLayout(layout);
204 data = new GridData(GridData.FILL_HORIZONTAL);
205 fTextGroup.setLayoutData(data);
206
207 fButton = new Button(fTextGroup, SWT.CHECK);
208 fButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 3, 1));
209 fButton.setText(Messages.TraceControl_NewNodeEditButtonName);
210 fButton.setEnabled(fExistingHosts.length > 0);
211
212 Label connectionNameLabel = new Label(fTextGroup, SWT.RIGHT);
213 connectionNameLabel.setText(Messages.TraceControl_NewNodeConnectionNameLabel);
214 fConnectionNameText = new Text(fTextGroup, SWT.NONE);
215 fConnectionNameText.setToolTipText(Messages.TraceControl_NewNodeConnectionNameTooltip);
216 fConnectionNameText.setEnabled(fExistingHosts.length == 0);
217
218 Label hostNameLabel = new Label(fTextGroup, SWT.RIGHT);
219 hostNameLabel.setText(Messages.TraceControl_NewNodeHostNameLabel);
220 fHostNameText = new Text(fTextGroup, SWT.NONE);
221 fHostNameText.setToolTipText(Messages.TraceControl_NewNodeHostNameTooltip);
222 fHostNameText.setEnabled(fExistingHosts.length == 0);
223
224 fButton.addSelectionListener(new SelectionListener() {
225 @Override
226 public void widgetSelected(SelectionEvent e) {
227 if (fButton.getSelection()) {
228 fExistingHostsCombo.deselectAll();
229 fExistingHostsCombo.setEnabled(false);
230 fConnectionNameText.setEnabled(true);
231 fHostNameText.setEnabled(true);
232 } else {
233 fExistingHostsCombo.setEnabled(true);
234 fConnectionNameText.setEnabled(false);
235 fHostNameText.setEnabled(false);
236 }
237 }
238
239 @Override
240 public void widgetDefaultSelected(SelectionEvent e) {
241 }
242 });
243
244 fExistingHostsCombo.addSelectionListener(new SelectionListener() {
245 @Override
246 public void widgetSelected(SelectionEvent e) {
247 int index = fExistingHostsCombo.getSelectionIndex();
248 fConnectionNameText.setText(fExistingHosts[index].getAliasName());
249 fHostNameText.setText(fExistingHosts[index].getHostName());
250 }
251
252 @Override
253 public void widgetDefaultSelected(SelectionEvent e) {
254 }
255 });
256
257 // layout widgets
258 data = new GridData(GridData.FILL_HORIZONTAL);
259 fHostNameText.setText("666.666.666.666"); //$NON-NLS-1$
260 Point minSize = fHostNameText.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
261 data.widthHint = minSize.x + 5;
262 data.horizontalSpan = 2;
263
264 fConnectionNameText.setLayoutData(data);
265 fHostNameText.setLayoutData(data);
266
267 fHostNameText.setText(""); //$NON-NLS-1$
268
269 return fDialogComposite;
270 }
271
272 /*
273 * (non-Javadoc)
274 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
275 */
276 @Override
277 protected void createButtonsForButtonBar(Composite parent) {
278 createButton(parent, IDialogConstants.CANCEL_ID, "&Cancel", true); //$NON-NLS-1$
279 createButton(parent, IDialogConstants.OK_ID, "&Ok", true); //$NON-NLS-1$
280 }
281
282 /*
283 * (non-Javadoc)
284 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
285 */
286 @Override
287 protected void okPressed() {
288 // Validate input data
289 fConnectionName = fConnectionNameText.getText();
290 fHostName = fHostNameText.getText();
291
292 if (!"".equals(fHostName)) { //$NON-NLS-1$
293 // If no node name is specified use the node address as name
294 if ("".equals(fConnectionName)) { //$NON-NLS-1$
295 fConnectionName = fHostName;
296 }
297 // Check if node with name already exists in parent
298 if(fParent.containsChild(fConnectionName)) {
299 MessageDialog.openError(getShell(),
300 Messages.TraceControl_NewDialogTitle,
301 Messages.TraceControl_AlreadyExistsError + " (" + fConnectionName + ")"); //$NON-NLS-1$//$NON-NLS-2$
302 return;
303 }
304 }
305 else {
306 return;
307 }
308 // validation successful -> call super.okPressed()
309 super.okPressed();
310 }
311 }
This page took 0.039422 seconds and 4 git commands to generate.