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
.core
.runtime
.NullProgressMonitor
;
15 import org
.eclipse
.jface
.dialogs
.Dialog
;
16 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
17 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
18 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.Activator
;
19 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.Messages
;
20 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.impl
.TargetNodeComponent
;
21 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.model
.impl
.TraceSessionGroup
;
22 import org
.eclipse
.linuxtools
.internal
.lttng2
.ui
.views
.control
.remote
.IRemoteSystemProxy
;
23 import org
.eclipse
.rse
.services
.clientserver
.messages
.SystemMessageException
;
24 import org
.eclipse
.rse
.subsystems
.files
.core
.servicesubsystem
.IFileServiceSubSystem
;
25 import org
.eclipse
.rse
.subsystems
.files
.core
.subsystems
.IRemoteFile
;
26 import org
.eclipse
.swt
.SWT
;
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
.Composite
;
31 import org
.eclipse
.swt
.widgets
.Control
;
32 import org
.eclipse
.swt
.widgets
.Label
;
33 import org
.eclipse
.swt
.widgets
.Shell
;
34 import org
.eclipse
.swt
.widgets
.Text
;
37 * <b><u>CreateSessionDialog</u></b>
39 * Dialog box for collecting session creation information.
42 public class CreateSessionDialog
extends Dialog
implements ICreateSessionDialog
{
44 // ------------------------------------------------------------------------
46 // ------------------------------------------------------------------------
48 * The icon file for this dialog box.
50 public static final String CREATE_SESSION_ICON_FILE
= "icons/elcl16/add_button.gif"; //$NON-NLS-1$
52 // ------------------------------------------------------------------------
54 // ------------------------------------------------------------------------
56 * The dialog composite.
58 private Composite fDialogComposite
= null;
60 * The text widget for the session name
62 private Text fSessionNameText
= null;
64 * The text widget for the session path
66 private Text fSessionPathText
= null;
68 * The parent where the new node should be added.
70 private TraceSessionGroup fParent
= null;
72 * The session name string.
74 private String fSessionName
= null;
76 * The session path string.
78 private String fSessionPath
= null;
80 * Flag whether default location (path) shall be used or not
82 private boolean fIsDefaultPath
= true;
84 // ------------------------------------------------------------------------
86 // ------------------------------------------------------------------------
89 * @param shell - a shell for the display of the dialog
91 public CreateSessionDialog(Shell shell
) {
95 // ------------------------------------------------------------------------
97 // ------------------------------------------------------------------------
100 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#getSessionName()
103 public String
getSessionName() {
109 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#getSessionPath()
112 public String
getSessionPath() {
118 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#isDefaultSessionPath()
121 public boolean isDefaultSessionPath() {
122 return fIsDefaultPath
;
127 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#setTraceSessionGroup(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionGroup)
130 public void setTraceSessionGroup(TraceSessionGroup group
) {
134 // ------------------------------------------------------------------------
136 // ------------------------------------------------------------------------
139 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
142 protected void configureShell(Shell newShell
) {
143 super.configureShell(newShell
);
144 newShell
.setText(Messages
.TraceControl_CreateSessionDialogTitle
);
145 newShell
.setImage(Activator
.getDefault().loadIcon(CREATE_SESSION_ICON_FILE
));
150 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
153 protected Control
createDialogArea(Composite parent
) {
156 fDialogComposite
= new Composite(parent
, SWT
.NONE
);
157 GridLayout layout
= new GridLayout(2, true);
158 fDialogComposite
.setLayout(layout
);
160 Label sessionNameLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
161 sessionNameLabel
.setText(Messages
.TraceControl_CreateSessionNameLabel
);
162 fSessionNameText
= new Text(fDialogComposite
, SWT
.NONE
);
163 fSessionNameText
.setToolTipText(Messages
.TraceControl_CreateSessionNameTooltip
);
165 Label sessionPath
= new Label(fDialogComposite
, SWT
.RIGHT
);
166 sessionPath
.setText(Messages
.TraceControl_CreateSessionPathLabel
);
167 fSessionPathText
= new Text(fDialogComposite
, SWT
.NONE
);
168 fSessionPathText
.setToolTipText(Messages
.TraceControl_CreateSessionPathTooltip
);
171 GridData data
= new GridData(GridData
.HORIZONTAL_ALIGN_FILL
);
172 fSessionPathText
.setText("666.666.666.666"); //$NON-NLS-1$
173 Point minSize
= fSessionPathText
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
, true);
174 data
.widthHint
= minSize
.x
+ 5;
176 fSessionNameText
.setLayoutData(data
);
177 fSessionPathText
.setLayoutData(data
);
179 fSessionPathText
.setText(""); //$NON-NLS-1$
181 return fDialogComposite
;
186 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
189 protected void createButtonsForButtonBar(Composite parent
) {
190 createButton(parent
, IDialogConstants
.OK_ID
, "&Ok", true); //$NON-NLS-1$
195 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
198 protected void okPressed() {
199 // Validate input data
200 fSessionName
= fSessionNameText
.getText();
201 fSessionPath
= fSessionPathText
.getText();
203 if (!"".equals(fSessionPath
)) { //$NON-NLS-1$
204 // validate sessionPath
206 TargetNodeComponent node
= (TargetNodeComponent
)fParent
.getParent();
207 IRemoteSystemProxy proxy
= node
.getRemoteSystemProxy();
208 IFileServiceSubSystem fsss
= proxy
.getFileServiceSubSystem();
211 IRemoteFile remoteFolder
= fsss
.getRemoteFileObject(fSessionPath
, new NullProgressMonitor());
212 if (remoteFolder
.exists()) {
213 MessageDialog
.openError(getShell(),
214 Messages
.TraceControl_CreateSessionDialogTitle
,
215 Messages
.TraceControl_SessionPathAlreadyExistsError
+ " (" + fSessionPath
+ ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
218 } catch (SystemMessageException e
) {
219 MessageDialog
.openError(getShell(),
220 Messages
.TraceControl_CreateSessionDialogTitle
,
221 Messages
.TraceControl_FileSubSystemError
+ "\n" + e
); //$NON-NLS-1$
225 fIsDefaultPath
= false;
228 // If no session name is specified use default name auto
229 if ("".equals(fSessionName
)) { //$NON-NLS-1$
230 fSessionName
= "auto"; //$NON-NLS-1$
233 // Check for invalid names
234 if (!fSessionName
.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$
235 MessageDialog
.openError(getShell(),
236 Messages
.TraceControl_CreateSessionDialogTitle
,
237 Messages
.TraceControl_InvalidSessionNameError
+ " (" + fSessionName
+ ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
241 // Check if node with name already exists in parent
242 if(fParent
.containsChild(fSessionName
)) {
243 MessageDialog
.openError(getShell(),
244 Messages
.TraceControl_CreateSessionDialogTitle
,
245 Messages
.TraceControl_SessionAlreadyExistsError
+ " (" + fSessionName
+ ")"); //$NON-NLS-1$ //$NON-NLS-2$
249 // validation successful -> call super.okPressed()