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 org
.eclipse
.jface
.dialogs
.Dialog
;
15 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
16 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
17 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.Activator
;
18 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.Messages
;
19 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.IChannelInfo
;
20 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.impl
.ChannelInfo
;
21 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.impl
.TraceDomainComponent
;
22 import org
.eclipse
.swt
.SWT
;
23 import org
.eclipse
.swt
.events
.VerifyEvent
;
24 import org
.eclipse
.swt
.events
.VerifyListener
;
25 import org
.eclipse
.swt
.layout
.GridData
;
26 import org
.eclipse
.swt
.layout
.GridLayout
;
27 import org
.eclipse
.swt
.widgets
.Button
;
28 import org
.eclipse
.swt
.widgets
.Composite
;
29 import org
.eclipse
.swt
.widgets
.Control
;
30 import org
.eclipse
.swt
.widgets
.Group
;
31 import org
.eclipse
.swt
.widgets
.Label
;
32 import org
.eclipse
.swt
.widgets
.Shell
;
33 import org
.eclipse
.swt
.widgets
.Text
;
36 * <b><u>EnableChannelDialog</u></b>
38 * Dialog box for collecting channel information when enabling a channel (which will be created).
41 public class EnableChannelDialog
extends Dialog
implements IEnableChannelDialog
{
43 // ------------------------------------------------------------------------
45 // ------------------------------------------------------------------------
47 * The icon file for this dialog box.
49 public static final String ENABLE_CHANNEL_ICON_FILE
= "icons/elcl16/add_button.gif"; //$NON-NLS-1$
51 // ------------------------------------------------------------------------
53 // ------------------------------------------------------------------------
55 * The dialog composite.
57 private Composite fDialogComposite
= null;
59 * The text widget for the channel name
61 private Text fChannelNameText
= null;
63 * The discard mode of the channel.
65 private Button fDiscardModeButton
= null;
67 * The overwrite mode of the channel.
69 private Button fOverwriteModeButton
= null;
71 * The sub-buffer size of the channel.
73 private Text fSubBufferSizeText
= null;
75 * The number of sub-buffers of the channel.
77 private Text fNumberOfSubBuffersText
= null;
79 * The switch timer interval of the channel.
81 private Text fSwitchTimerText
= null;
83 * The read timer interval of the channel.
85 private Text fReadTimerText
= null;
87 * Group composite for domain selection.
89 private Group fDomainGroup
= null;
91 * Radio button for selecting kernel domain.
93 private Button fKernelButton
= null;
95 * Radio button for selecting UST domain.
97 private Button fUstButton
= null;
99 * The parent domain component where the channel node should be added.
100 * Null in case of creation on session level.
102 private TraceDomainComponent fDomain
= null;
104 * Common verify listener for numeric text input.
106 private VerifyListener fVerifyListener
= null;
108 * Output channel information.
110 private IChannelInfo fChannelInfo
= null;
112 * Output domain information. True in case of Kernel domain. False for UST.
114 private boolean fIsKernel
;
116 // ------------------------------------------------------------------------
118 // ------------------------------------------------------------------------
122 * @param shell - a shell for the display of the dialog
124 public EnableChannelDialog(Shell shell
) {
128 // Common verify listener
129 fVerifyListener
= new VerifyListener() {
131 public void verifyText(VerifyEvent e
) {
132 // only numbers are allowed.
133 e
.doit
= e
.text
.matches("[0-9]*"); //$NON-NLS-1$
136 setShellStyle(SWT
.RESIZE
);
139 // ------------------------------------------------------------------------
141 // ------------------------------------------------------------------------
144 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog#getChannelInfo()
147 public IChannelInfo
getChannelInfo() {
153 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog#setDomainComponent(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent)
156 public void setDomainComponent(TraceDomainComponent domain
) {
158 if (fDomain
!= null) {
159 fIsKernel
= fDomain
.isKernel();
167 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog#isKernel()
170 public boolean isKernel() {
174 // ------------------------------------------------------------------------
176 // ------------------------------------------------------------------------
179 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
182 protected void configureShell(Shell newShell
) {
183 super.configureShell(newShell
);
184 newShell
.setText(Messages
.TraceControl_EnableChannelDialogTitle
);
185 newShell
.setImage(Activator
.getDefault().loadIcon(ENABLE_CHANNEL_ICON_FILE
));
190 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
193 protected Control
createDialogArea(Composite parent
) {
196 fDialogComposite
= new Composite(parent
, SWT
.NONE
);
197 GridLayout layout
= new GridLayout(3, true);
198 fDialogComposite
.setLayout(layout
);
200 Label channelNameLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
201 channelNameLabel
.setText(Messages
.TraceControl_EnableChannelNameLabel
);
202 fChannelNameText
= new Text(fDialogComposite
, SWT
.NONE
);
203 fChannelNameText
.setToolTipText(Messages
.TraceControl_EnableChannelNameTooltip
);
205 Label subBufferSizeLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
206 subBufferSizeLabel
.setText(Messages
.TraceControl_SubBufferSizePropertyName
);
207 fSubBufferSizeText
= new Text(fDialogComposite
, SWT
.NONE
);
208 fSubBufferSizeText
.setToolTipText(Messages
.TraceControl_EnableChannelSubBufferSizeTooltip
);
209 fSubBufferSizeText
.addVerifyListener(fVerifyListener
);
211 Label numSubBufferLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
212 numSubBufferLabel
.setText(Messages
.TraceControl_NbSubBuffersPropertyName
);
213 fNumberOfSubBuffersText
= new Text(fDialogComposite
, SWT
.NONE
);
214 fNumberOfSubBuffersText
.setToolTipText(Messages
.TraceControl_EnableChannelNbSubBuffersTooltip
);
215 fNumberOfSubBuffersText
.addVerifyListener(fVerifyListener
);
217 Label switchTimerLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
218 switchTimerLabel
.setText(Messages
.TraceControl_SwitchTimerPropertyName
);
219 fSwitchTimerText
= new Text(fDialogComposite
, SWT
.NONE
);
220 fSwitchTimerText
.setToolTipText(Messages
.TraceControl_EnableChannelSwitchTimerTooltip
);
221 fSwitchTimerText
.addVerifyListener(fVerifyListener
);
223 Label readTimerLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
224 readTimerLabel
.setText(Messages
.TraceControl_ReadTimerPropertyName
);
225 fReadTimerText
= new Text(fDialogComposite
, SWT
.NONE
);
226 fReadTimerText
.setToolTipText(Messages
.TraceControl_EnableChannelReadTimerTooltip
);
227 fReadTimerText
.addVerifyListener(fVerifyListener
);
229 Group discardModeGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
230 discardModeGroup
.setText(Messages
.TraceControl_EnableChannelDiscardModeGroupName
);
231 layout
= new GridLayout(2, true);
232 discardModeGroup
.setLayout(layout
);
234 fDiscardModeButton
= new Button(discardModeGroup
, SWT
.RADIO
);
235 fDiscardModeButton
.setText(Messages
.TraceControl_EnableChannelDiscardModeLabel
);
236 fDiscardModeButton
.setToolTipText(Messages
.TraceControl_EnableChannelDiscardModeTooltip
);
237 fDiscardModeButton
.setSelection(true);
239 fOverwriteModeButton
= new Button(discardModeGroup
, SWT
.RADIO
);
240 fOverwriteModeButton
.setText(Messages
.TraceControl_EnableChannelOverwriteModeLabel
);
241 fOverwriteModeButton
.setToolTipText(Messages
.TraceControl_EnableChannelOverwriteModeTooltip
);
242 fOverwriteModeButton
.setSelection(false);
244 fDomainGroup
= new Group(fDialogComposite
, SWT
.SHADOW_NONE
);
245 fDomainGroup
.setText(Messages
.TraceControl_DomainDisplayName
);
246 layout
= new GridLayout(2, true);
247 fDomainGroup
.setLayout(layout
);
249 fKernelButton
= new Button(fDomainGroup
, SWT
.RADIO
);
250 fKernelButton
.setText(Messages
.TraceControl_KernelDomainDisplayName
);
251 fKernelButton
.setSelection(fIsKernel
);
252 fUstButton
= new Button(fDomainGroup
, SWT
.RADIO
);
253 fUstButton
.setText(Messages
.TraceControl_UstDisplayName
);
254 fUstButton
.setSelection(!fIsKernel
);
256 if (fDomain
!= null) {
257 fKernelButton
.setEnabled(false);
258 fUstButton
.setEnabled(false);
262 GridData data
= new GridData(GridData
.FILL
, GridData
.CENTER
, false, false, 3, 1);
263 discardModeGroup
.setLayoutData(data
);
264 data
= new GridData(SWT
.BEGINNING
, SWT
.BEGINNING
, true, true);
265 fDiscardModeButton
.setLayoutData(data
);
266 data
= new GridData(SWT
.BEGINNING
, SWT
.BEGINNING
, true, true);
267 fOverwriteModeButton
.setLayoutData(data
);
269 data
= new GridData(GridData
.FILL
, GridData
.CENTER
, false, false, 3, 1);
270 fDomainGroup
.setLayoutData(data
);
272 data
= new GridData(SWT
.BEGINNING
, SWT
.BEGINNING
, true, true);
273 fKernelButton
.setLayoutData(data
);
274 data
= new GridData(SWT
.BEGINNING
, SWT
.BEGINNING
, true, true);
275 fUstButton
.setLayoutData(data
);
277 data
= new GridData(GridData
.FILL_HORIZONTAL
);
278 data
.horizontalSpan
= 2;
280 fChannelNameText
.setLayoutData(data
);
281 fSubBufferSizeText
.setLayoutData(data
);
282 fNumberOfSubBuffersText
.setLayoutData(data
);
283 fSwitchTimerText
.setLayoutData(data
);
284 fReadTimerText
.setLayoutData(data
);
288 return fDialogComposite
;
293 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
296 protected void createButtonsForButtonBar(Composite parent
) {
297 createButton(parent
, IDialogConstants
.DETAILS_ID
, "&Default", true); //$NON-NLS-1$
298 createButton(parent
, IDialogConstants
.CANCEL_ID
, "&Cancel", true); //$NON-NLS-1$
299 createButton(parent
, IDialogConstants
.OK_ID
, "&Ok", true); //$NON-NLS-1$
304 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
307 protected void okPressed() {
308 // Set channel information
309 fChannelInfo
= new ChannelInfo(fChannelNameText
.getText());
310 fChannelInfo
.setSubBufferSize(Long
.parseLong(fSubBufferSizeText
.getText()));
311 fChannelInfo
.setNumberOfSubBuffers(Integer
.parseInt(fNumberOfSubBuffersText
.getText()));
312 fChannelInfo
.setSwitchTimer(Long
.parseLong(fSwitchTimerText
.getText()));
313 fChannelInfo
.setReadTimer(Long
.parseLong(fReadTimerText
.getText()));
314 fChannelInfo
.setOverwriteMode(fOverwriteModeButton
.getSelection());
316 fIsKernel
= fKernelButton
.getSelection();
318 // Check for invalid names
319 if (!fChannelInfo
.getName().matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$
320 MessageDialog
.openError(getShell(),
321 Messages
.TraceControl_EnableChannelDialogTitle
,
322 Messages
.TraceControl_InvalidChannelNameError
+ " (" + fChannelInfo
.getName() + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
326 // Check for duplicate names
327 if (fDomain
!= null && fDomain
.containsChild(fChannelInfo
.getName())) {
328 MessageDialog
.openError(getShell(),
329 Messages
.TraceControl_EnableChannelDialogTitle
,
330 Messages
.TraceControl_ChannelAlreadyExistsError
+ " (" + fChannelInfo
.getName() + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
334 // validation successful -> call super.okPressed()
340 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
343 protected void buttonPressed(int buttonId
) {
344 if (buttonId
== IDialogConstants
.DETAILS_ID
) {
348 super.buttonPressed(buttonId
);
351 // ------------------------------------------------------------------------
353 // ------------------------------------------------------------------------
355 * Sets default value depending on Kernel or UST
357 private void setDefaults() {
358 fSwitchTimerText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_SWITCH_TIMER
));
359 fReadTimerText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_READ_TIMER
));
360 fOverwriteModeButton
.setSelection(IChannelInfo
.DEFAULT_OVERWRITE_MODE
);
361 if (fKernelButton
.getSelection()) {
362 fSubBufferSizeText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_SUB_BUFFER_SIZE_KERNEL
));
363 fNumberOfSubBuffersText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_NUMBER_OF_SUB_BUFFERS_KERNEL
));
365 fSubBufferSizeText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_SUB_BUFFER_SIZE_UST
));
366 fNumberOfSubBuffersText
.setText(String
.valueOf(IChannelInfo
.DEFAULT_NUMBER_OF_SUB_BUFFERS_UST
));