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