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