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
.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
;
38 * Dialog box for collecting session creation information.
41 * @author Bernd Hufmann
43 public class CreateSessionDialog
extends Dialog
implements ICreateSessionDialog
{
45 // ------------------------------------------------------------------------
47 // ------------------------------------------------------------------------
49 * The icon file for this dialog box.
51 public static final String CREATE_SESSION_ICON_FILE
= "icons/elcl16/add_button.gif"; //$NON-NLS-1$
53 // ------------------------------------------------------------------------
55 // ------------------------------------------------------------------------
57 * The dialog composite.
59 private Composite fDialogComposite
= null;
61 * The text widget for the session name
63 private Text fSessionNameText
= null;
65 * The text widget for the session path
67 private Text fSessionPathText
= null;
69 * The parent where the new node should be added.
71 private TraceSessionGroup fParent
= null;
73 * The session name string.
75 private String fSessionName
= null;
77 * The session path string.
79 private String fSessionPath
= null;
81 * Flag whether default location (path) shall be used or not
83 private boolean fIsDefaultPath
= true;
85 // ------------------------------------------------------------------------
87 // ------------------------------------------------------------------------
90 * @param shell - a shell for the display of the dialog
92 public CreateSessionDialog(Shell shell
) {
94 setShellStyle(SWT
.RESIZE
);
97 // ------------------------------------------------------------------------
99 // ------------------------------------------------------------------------
102 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#getSessionName()
105 public String
getSessionName() {
111 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#getSessionPath()
114 public String
getSessionPath() {
120 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#isDefaultSessionPath()
123 public boolean isDefaultSessionPath() {
124 return fIsDefaultPath
;
129 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog#setTraceSessionGroup(org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionGroup)
132 public void setTraceSessionGroup(TraceSessionGroup group
) {
136 // ------------------------------------------------------------------------
138 // ------------------------------------------------------------------------
141 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
144 protected void configureShell(Shell newShell
) {
145 super.configureShell(newShell
);
146 newShell
.setText(Messages
.TraceControl_CreateSessionDialogTitle
);
147 newShell
.setImage(Activator
.getDefault().loadIcon(CREATE_SESSION_ICON_FILE
));
152 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
155 protected Control
createDialogArea(Composite parent
) {
158 fDialogComposite
= new Composite(parent
, SWT
.NONE
);
159 GridLayout layout
= new GridLayout(4, true);
160 fDialogComposite
.setLayout(layout
);
161 fDialogComposite
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
163 Label sessionNameLabel
= new Label(fDialogComposite
, SWT
.RIGHT
);
164 sessionNameLabel
.setText(Messages
.TraceControl_CreateSessionNameLabel
);
165 fSessionNameText
= new Text(fDialogComposite
, SWT
.NONE
);
166 fSessionNameText
.setToolTipText(Messages
.TraceControl_CreateSessionNameTooltip
);
168 Label sessionPath
= new Label(fDialogComposite
, SWT
.RIGHT
);
169 sessionPath
.setText(Messages
.TraceControl_CreateSessionPathLabel
);
170 fSessionPathText
= new Text(fDialogComposite
, SWT
.NONE
);
171 fSessionPathText
.setToolTipText(Messages
.TraceControl_CreateSessionPathTooltip
);
174 GridData data
= new GridData(GridData
.FILL_HORIZONTAL
);
175 data
.horizontalSpan
= 3;
177 fSessionNameText
.setLayoutData(data
);
178 fSessionPathText
.setLayoutData(data
);
180 getShell().setMinimumSize(new Point(300, 150));
182 return fDialogComposite
;
187 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
190 protected void createButtonsForButtonBar(Composite parent
) {
191 createButton(parent
, IDialogConstants
.CANCEL_ID
, "&Cancel", true); //$NON-NLS-1$
192 createButton(parent
, IDialogConstants
.OK_ID
, "&Ok", true); //$NON-NLS-1$
197 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
200 protected void okPressed() {
201 // Validate input data
202 fSessionName
= fSessionNameText
.getText();
203 fSessionPath
= fSessionPathText
.getText();
205 if (!"".equals(fSessionPath
)) { //$NON-NLS-1$
206 // validate sessionPath
208 TargetNodeComponent node
= (TargetNodeComponent
)fParent
.getParent();
209 IRemoteSystemProxy proxy
= node
.getRemoteSystemProxy();
210 IFileServiceSubSystem fsss
= proxy
.getFileServiceSubSystem();
213 IRemoteFile remoteFolder
= fsss
.getRemoteFileObject(fSessionPath
, new NullProgressMonitor());
214 if (remoteFolder
.exists()) {
215 MessageDialog
.openError(getShell(),
216 Messages
.TraceControl_CreateSessionDialogTitle
,
217 Messages
.TraceControl_SessionPathAlreadyExistsError
+ " (" + fSessionPath
+ ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
220 } catch (SystemMessageException e
) {
221 MessageDialog
.openError(getShell(),
222 Messages
.TraceControl_CreateSessionDialogTitle
,
223 Messages
.TraceControl_FileSubSystemError
+ "\n" + e
); //$NON-NLS-1$
227 fIsDefaultPath
= false;
230 // If no session name is specified use default name auto
231 if ("".equals(fSessionName
)) { //$NON-NLS-1$
232 fSessionName
= "auto"; //$NON-NLS-1$
235 // Check for invalid names
236 if (!fSessionName
.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$
237 MessageDialog
.openError(getShell(),
238 Messages
.TraceControl_CreateSessionDialogTitle
,
239 Messages
.TraceControl_InvalidSessionNameError
+ " (" + fSessionName
+ ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
243 // Check if node with name already exists in parent
244 if(fParent
.containsChild(fSessionName
)) {
245 MessageDialog
.openError(getShell(),
246 Messages
.TraceControl_CreateSessionDialogTitle
,
247 Messages
.TraceControl_SessionAlreadyExistsError
+ " (" + fSessionName
+ ")"); //$NON-NLS-1$ //$NON-NLS-2$
251 // validation successful -> call super.okPressed()