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