tmf/lttng: Update 2014 copyrights
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / wizards / NewExperimentDialog.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2014 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 * Francois Chouinard - Copied and adapted from NewFolderDialog
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.ui.project.wizards;
14
15 import java.lang.reflect.InvocationTargetException;
16
17 import org.eclipse.core.resources.IContainer;
18 import org.eclipse.core.resources.IFolder;
19 import org.eclipse.core.resources.IResource;
20 import org.eclipse.core.resources.IWorkspace;
21 import org.eclipse.core.resources.IWorkspaceRoot;
22 import org.eclipse.core.runtime.CoreException;
23 import org.eclipse.core.runtime.IPath;
24 import org.eclipse.core.runtime.IProgressMonitor;
25 import org.eclipse.core.runtime.IStatus;
26 import org.eclipse.core.runtime.OperationCanceledException;
27 import org.eclipse.core.runtime.Path;
28 import org.eclipse.core.runtime.Status;
29 import org.eclipse.jface.dialogs.IDialogConstants;
30 import org.eclipse.jface.dialogs.MessageDialog;
31 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
32 import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentFolder;
33 import org.eclipse.osgi.util.NLS;
34 import org.eclipse.swt.SWT;
35 import org.eclipse.swt.graphics.Font;
36 import org.eclipse.swt.layout.GridData;
37 import org.eclipse.swt.layout.GridLayout;
38 import org.eclipse.swt.widgets.Composite;
39 import org.eclipse.swt.widgets.Control;
40 import org.eclipse.swt.widgets.Event;
41 import org.eclipse.swt.widgets.Label;
42 import org.eclipse.swt.widgets.Listener;
43 import org.eclipse.swt.widgets.Shell;
44 import org.eclipse.swt.widgets.Text;
45 import org.eclipse.ui.PlatformUI;
46 import org.eclipse.ui.actions.WorkspaceModifyOperation;
47 import org.eclipse.ui.dialogs.SelectionStatusDialog;
48
49 /**
50 * Implementation of new experiment dialog that creates the experiment element.
51 * <p>
52 *
53 * @version 1.0
54 * @author Francois Chouinard
55 */
56 public class NewExperimentDialog extends SelectionStatusDialog {
57
58 // ------------------------------------------------------------------------
59 // Members
60 // ------------------------------------------------------------------------
61
62 private Text fExperimentName;
63 private final IContainer fExperimentFolder;
64
65 // ------------------------------------------------------------------------
66 // Constructor
67 // ------------------------------------------------------------------------
68 /**
69 * Constructor
70 *
71 * @param shell
72 * The parent shell
73 * @param experimentFolder
74 * The parent experiment folder element
75 */
76 public NewExperimentDialog(Shell shell, TmfExperimentFolder experimentFolder) {
77 super(shell);
78 fExperimentFolder = experimentFolder.getResource();
79 setTitle(Messages.NewExperimentDialog_DialogTitle);
80 setStatusLineAboveButtons(true);
81 }
82
83 // ------------------------------------------------------------------------
84 // Dialog
85 // ------------------------------------------------------------------------
86
87 @Override
88 protected Control createDialogArea(Composite parent) {
89 Composite composite = (Composite) super.createDialogArea(parent);
90 composite.setLayout(new GridLayout());
91 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
92
93 createExperimentNameGroup(composite);
94 return composite;
95 }
96
97 private void createExperimentNameGroup(Composite parent) {
98 Font font = parent.getFont();
99 Composite folderGroup = new Composite(parent, SWT.NONE);
100 GridLayout layout = new GridLayout();
101 layout.numColumns = 2;
102 folderGroup.setLayout(layout);
103 folderGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
104
105 // New experiment label
106 Label experimentLabel = new Label(folderGroup, SWT.NONE);
107 experimentLabel.setFont(font);
108 experimentLabel.setText(Messages.NewExperimentDialog_ExperimentName);
109
110 // New experiment name entry field
111 fExperimentName = new Text(folderGroup, SWT.BORDER);
112 GridData data = new GridData(GridData.FILL_HORIZONTAL);
113 data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
114 fExperimentName.setLayoutData(data);
115 fExperimentName.setFont(font);
116 fExperimentName.addListener(SWT.Modify, new Listener() {
117 @Override
118 public void handleEvent(Event event) {
119 validateNewExperimentName();
120 }
121 });
122 }
123
124 private void validateNewExperimentName() {
125
126 String name = fExperimentName.getText();
127 IWorkspace workspace = fExperimentFolder.getWorkspace();
128 IStatus nameStatus = workspace.validateName(name, IResource.FOLDER);
129
130 if ("".equals(name)) { //$NON-NLS-1$
131 updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, Messages.Dialog_EmptyNameError, null));
132 return;
133 }
134
135 if (!nameStatus.isOK()) {
136 updateStatus(nameStatus);
137 return;
138 }
139
140 IPath path = new Path(name);
141 if (fExperimentFolder.getFolder(path).exists() || fExperimentFolder.getFile(path).exists()) {
142 updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, Messages.Dialog_ExistingNameError, null));
143 return;
144 }
145
146 updateStatus(new Status(IStatus.OK, Activator.PLUGIN_ID, "")); //$NON-NLS-1$
147 }
148
149 // ------------------------------------------------------------------------
150 // SelectionStatusDialog
151 // ------------------------------------------------------------------------
152
153 @Override
154 protected void computeResult() {
155 }
156
157 @Override
158 public void create() {
159 super.create();
160 getButton(IDialogConstants.OK_ID).setEnabled(false);
161 }
162
163 @Override
164 protected void okPressed() {
165 IFolder folder = createNewExperiment(fExperimentName.getText());
166 if (folder == null) {
167 return;
168 }
169 setSelectionResult(new IFolder[] { folder });
170 super.okPressed();
171 }
172
173 private IFolder createNewExperiment(String experimentName) {
174
175 final IFolder experimentFolder = createExperiment(experimentName);
176
177 WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
178 @Override
179 public void execute(IProgressMonitor monitor) throws CoreException {
180 try {
181 monitor.beginTask("", 1000); //$NON-NLS-1$
182 if (monitor.isCanceled()) {
183 throw new OperationCanceledException();
184 }
185 experimentFolder.create(false, true, monitor);
186 if (monitor.isCanceled()) {
187 throw new OperationCanceledException();
188 }
189 } finally {
190 monitor.done();
191 }
192 }
193 };
194 try {
195 PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
196 } catch (InterruptedException exception) {
197 return null;
198 } catch (InvocationTargetException exception) {
199 MessageDialog.openError(getShell(), "", NLS.bind("", exception.getTargetException().getMessage())); //$NON-NLS-1$ //$NON-NLS-2$
200 return null;
201 } catch (RuntimeException exception) {
202 return null;
203 }
204
205 return experimentFolder;
206 }
207
208 private IFolder createExperiment(String experimentName) {
209 IWorkspaceRoot workspaceRoot = fExperimentFolder.getWorkspace().getRoot();
210 IPath folderPath = fExperimentFolder.getFullPath().append(experimentName);
211 IFolder folder = workspaceRoot.getFolder(folderPath);
212
213 return folder;
214 }
215
216 }
This page took 0.041251 seconds and 5 git commands to generate.