tmf: Avoid unnecessary trace type selection during drag & drop
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / handlers / DropAdapterAssistant.java
CommitLineData
828e5592 1/*******************************************************************************
60ae41e1 2* Copyright (c) 2012, 2014 Ericsson
abbdd66a 3 *
828e5592
PT
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
abbdd66a 8 *
828e5592
PT
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
ab37ff41 11 * Patrick Tasse - Add support for DROP_LINK and rename prompt on name clash
828e5592
PT
12 *******************************************************************************/
13
d34665f9 14package org.eclipse.linuxtools.internal.tmf.ui.project.handlers;
828e5592
PT
15
16import java.io.File;
ab37ff41
PT
17import java.io.FileInputStream;
18import java.io.FileNotFoundException;
19import java.io.InputStream;
828e5592 20import java.lang.reflect.InvocationTargetException;
ab37ff41 21import java.util.Arrays;
828e5592
PT
22import java.util.List;
23import java.util.Map;
24
25import org.eclipse.core.resources.IFile;
26import org.eclipse.core.resources.IFolder;
27import org.eclipse.core.resources.IProject;
28import org.eclipse.core.resources.IResource;
29import org.eclipse.core.resources.IWorkspace;
30import org.eclipse.core.resources.ResourcesPlugin;
31import org.eclipse.core.runtime.CoreException;
32import org.eclipse.core.runtime.IPath;
ab37ff41 33import org.eclipse.core.runtime.IProgressMonitor;
828e5592
PT
34import org.eclipse.core.runtime.IStatus;
35import org.eclipse.core.runtime.NullProgressMonitor;
36import org.eclipse.core.runtime.Path;
37import org.eclipse.core.runtime.QualifiedName;
38import org.eclipse.core.runtime.Status;
ab37ff41 39import org.eclipse.jface.operation.IRunnableWithProgress;
828e5592 40import org.eclipse.jface.viewers.IStructuredSelection;
8fd82db5 41import org.eclipse.linuxtools.internal.tmf.ui.Activator;
e12ecd30 42import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
c3d27e8f 43import org.eclipse.linuxtools.tmf.core.project.model.TmfTraceImportException;
a6e37e4c 44import org.eclipse.linuxtools.tmf.core.project.model.TmfTraceType;
c3d27e8f 45import org.eclipse.linuxtools.tmf.core.project.model.TraceTypeHelper;
fedfc72a 46import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
828e5592
PT
47import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
48import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
49import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
50import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry;
51import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
52import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
c3d27e8f 53import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceTypeUIUtils;
ab37ff41
PT
54import org.eclipse.osgi.util.NLS;
55import org.eclipse.swt.SWT;
828e5592
PT
56import org.eclipse.swt.dnd.DND;
57import org.eclipse.swt.dnd.DropTargetEvent;
58import org.eclipse.swt.dnd.FileTransfer;
59import org.eclipse.swt.dnd.TransferData;
60import org.eclipse.swt.widgets.MessageBox;
61import org.eclipse.ui.PlatformUI;
ab37ff41 62import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
828e5592
PT
63import org.eclipse.ui.dialogs.IOverwriteQuery;
64import org.eclipse.ui.navigator.CommonDropAdapter;
65import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
66import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
67import org.eclipse.ui.wizards.datatransfer.ImportOperation;
68
69/**
70 * Drop adapter assistant for project explorer
71 */
72public class DropAdapterAssistant extends CommonDropAdapterAssistant {
73
74 /**
75 * Default constructor
76 */
77 public DropAdapterAssistant() {
78 }
79
828e5592
PT
80 @Override
81 public boolean isSupportedType(TransferData aTransferType) {
82 return super.isSupportedType(aTransferType) || FileTransfer.getInstance().isSupportedType(aTransferType);
83 }
84
828e5592
PT
85 @Override
86 public IStatus validateDrop(Object target, int operation, TransferData transferType) {
87 if (target instanceof TmfTraceFolder) {
828e5592
PT
88 return Status.OK_STATUS;
89 }
90 if (target instanceof TmfExperimentElement) {
828e5592
PT
91 return Status.OK_STATUS;
92 }
93 if (target instanceof TmfTraceElement) {
94 ITmfProjectModelElement parent = ((TmfTraceElement) target).getParent();
95 if (parent instanceof TmfTraceFolder) {
828e5592
PT
96 return Status.OK_STATUS;
97 }
98 if (parent instanceof TmfExperimentElement) {
828e5592
PT
99 return Status.OK_STATUS;
100 }
101 }
102 if (target instanceof IProject) {
828e5592
PT
103 return Status.OK_STATUS;
104 }
105 return Status.CANCEL_STATUS;
106 }
107
828e5592
PT
108 @Override
109 public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, Object aTarget) {
110 boolean ok = false;
111
9fa32496
BH
112 // Use local variable to avoid parameter assignment
113 Object targetToUse = aTarget;
114
ab37ff41
PT
115 int operation = aDropTargetEvent.detail;
116 if (operation != DND.DROP_LINK) {
117 operation = DND.DROP_COPY;
118 }
119
828e5592 120 // If target is a trace, use its parent (either trace folder or experiment)
9fa32496
BH
121 if (targetToUse instanceof TmfTraceElement) {
122 targetToUse = ((TmfTraceElement) targetToUse).getParent();
828e5592
PT
123 }
124
125 // If target is a project, use its trace folder
9fa32496 126 if (targetToUse instanceof IProject) {
f537c959 127 TmfProjectElement projectElement = TmfProjectRegistry.getProject((IProject) targetToUse, true);
828e5592 128 if (projectElement != null) {
9fa32496 129 targetToUse = projectElement.getTracesFolder();
828e5592
PT
130 }
131 }
132
133 if (aDropTargetEvent.data instanceof IStructuredSelection) {
134 IStructuredSelection selection = (IStructuredSelection) aDropTargetEvent.data;
135 for (Object source : selection.toArray()) {
136 if (source instanceof IResource) {
137 // If source resource is a trace, use the trace element
138 IResource sourceResource = (IResource) source;
139 TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject());
140 if (projectElement != null && projectElement.getTracesFolder() != null) {
141 for (TmfTraceElement trace : projectElement.getTracesFolder().getTraces()) {
142 if (trace.getResource().equals(sourceResource)) {
143 source = trace;
144 break;
145 }
146 }
147 }
148 }
149 if (source instanceof TmfTraceElement) {
150 TmfTraceElement sourceTrace = (TmfTraceElement) source;
151 // If source trace is under an experiment, use the original trace from the traces folder
ab37ff41 152 sourceTrace = sourceTrace.getElementUnderTraceFolder();
9fa32496
BH
153 if (targetToUse instanceof TmfExperimentElement) {
154 TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
ab37ff41 155 ok |= drop(sourceTrace, targetExperiment, operation);
9fa32496
BH
156 } else if (targetToUse instanceof TmfTraceFolder) {
157 TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
ab37ff41 158 ok |= drop(sourceTrace, traceFolder, operation);
828e5592
PT
159 }
160 } else if (source instanceof IResource) {
161 IResource sourceResource = (IResource) source;
162 if (sourceResource.getType() != IResource.FILE && sourceResource.getType() != IResource.FOLDER) {
163 continue;
164 }
9fa32496
BH
165 if (targetToUse instanceof TmfExperimentElement) {
166 TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
ab37ff41 167 ok |= (drop(sourceResource, targetExperiment, operation) != null);
9fa32496
BH
168 } else if (targetToUse instanceof TmfTraceFolder) {
169 TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
ab37ff41 170 ok |= (drop(sourceResource, traceFolder, operation) != null);
828e5592
PT
171 }
172 }
173 }
174 } else if (aDropTargetEvent.data instanceof String[]) {
175 String[] sources = (String[]) aDropTargetEvent.data;
176 for (String source : sources) {
177 Path path = new Path(source);
9fa32496
BH
178 if (targetToUse instanceof TmfExperimentElement) {
179 TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
ab37ff41 180 ok |= drop(path, targetExperiment, operation);
9fa32496
BH
181 } else if (targetToUse instanceof TmfTraceFolder) {
182 TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
ab37ff41 183 ok |= drop(path, traceFolder, operation);
828e5592
PT
184 }
185 }
186 }
187 return (ok ? Status.OK_STATUS : Status.CANCEL_STATUS);
188 }
189
abbdd66a 190
e12ecd30 191 /**
ab37ff41 192 * Drop a trace by copying/linking a trace element in a target experiment
abbdd66a 193 *
e12ecd30
BH
194 * @param sourceTrace the source trace element to copy
195 * @param targetExperiment the target experiment
ab37ff41 196 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
e12ecd30
BH
197 * @return true if successful
198 */
abbdd66a 199 private static boolean drop(TmfTraceElement sourceTrace,
ab37ff41
PT
200 TmfExperimentElement targetExperiment,
201 int operation) {
abbdd66a 202
e12ecd30 203 IResource sourceResource = sourceTrace.getResource();
ab37ff41 204 IResource targetResource = drop(sourceResource, targetExperiment, operation);
abbdd66a 205
ab37ff41 206 if (targetResource != null) {
c9378fe3
PT
207 if (! sourceTrace.getProject().equals(targetExperiment.getProject())) {
208 IFolder destinationSupplementaryFolder = targetExperiment.getTraceSupplementaryFolder(targetResource.getName());
209 sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
210 }
e12ecd30
BH
211 return true;
212 }
213 return false;
214 }
abbdd66a 215
828e5592 216 /**
ab37ff41 217 * Drop a trace by copying/linking a resource in a target experiment
abbdd66a 218 *
828e5592
PT
219 * @param sourceResource the source resource
220 * @param targetExperiment the target experiment
ab37ff41
PT
221 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
222 * @return the target resource or null if unsuccessful
828e5592 223 */
ab37ff41
PT
224 private static IResource drop(IResource sourceResource,
225 TmfExperimentElement targetExperiment,
226 int operation) {
9fa32496 227
ab37ff41 228 IResource traceResource = sourceResource;
9fa32496 229
ab37ff41 230 TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject());
828e5592 231 for (TmfTraceElement trace : targetExperiment.getTraces()) {
ab37ff41
PT
232 if (trace.getName().equals(sourceResource.getName()) && targetExperiment.getProject().equals(projectElement)) {
233 return null;
828e5592
PT
234 }
235 }
ab37ff41
PT
236 if (!targetExperiment.getProject().equals(projectElement)) {
237 String targetName = sourceResource.getName();
828e5592 238 for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
ab37ff41
PT
239 if (trace.getName().equals(targetName)) {
240 targetName = promptRename(trace);
241 if (targetName == null) {
242 return null;
243 }
828e5592
PT
244 break;
245 }
246 }
ab37ff41
PT
247 try {
248 if (operation == DND.DROP_COPY) {
249 IPath destination = targetExperiment.getProject().getTracesFolder().getResource().getFullPath().addTrailingSeparator().append(targetName);
250 sourceResource.copy(destination, false, null);
fedfc72a 251 cleanupBookmarks(destination);
ab37ff41
PT
252 } else {
253 createLink(targetExperiment.getProject().getTracesFolder().getResource(), sourceResource, targetName);
254 }
255 // use the copied resource for the experiment
256 if (sourceResource.getType() == IResource.FILE) {
257 traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
258 } else if (sourceResource.getType() == IResource.FOLDER) {
259 traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
828e5592 260 }
ab37ff41
PT
261 } catch (CoreException e) {
262 displayException(e);
263 return null;
828e5592
PT
264 }
265 }
ab37ff41 266 if (traceResource != null && traceResource.exists()) {
c3d27e8f 267 setTraceType(traceResource);
ab37ff41 268 createLink(targetExperiment.getResource(), traceResource, traceResource.getName());
d9030b38 269 targetExperiment.deleteSupplementaryResources();
639181ba 270 targetExperiment.closeEditors();
ab37ff41 271 return traceResource;
828e5592 272 }
ab37ff41 273 return null;
828e5592
PT
274 }
275
e12ecd30 276 /**
ab37ff41 277 * Drop a trace by copying/linking a trace element in a trace folder
abbdd66a 278 *
e12ecd30
BH
279 * @param sourceTrace the source trace
280 * @param traceFolder the target trace folder
ab37ff41 281 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
e12ecd30
BH
282 * @return true if successful
283 */
ab37ff41
PT
284 private static boolean drop(TmfTraceElement sourceTrace,
285 TmfTraceFolder traceFolder,
286 int operation) {
287
e12ecd30 288 IResource sourceResource = sourceTrace.getResource();
ab37ff41
PT
289 IResource targetResource = drop(sourceResource, traceFolder, operation);
290
291 if (targetResource != null) {
292 IFolder destinationSupplementaryFolder = traceFolder.getTraceSupplementaryFolder(targetResource.getName());
e12ecd30
BH
293 sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
294 return true;
295 }
296 return false;
297 }
298
828e5592 299 /**
ab37ff41 300 * Drop a trace by copying/linking a resource in a trace folder
abbdd66a 301 *
828e5592
PT
302 * @param sourceResource the source resource
303 * @param traceFolder the target trace folder
ab37ff41
PT
304 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
305 * @return the target resource or null if unsuccessful
828e5592 306 */
ab37ff41
PT
307 private static IResource drop(IResource sourceResource,
308 TmfTraceFolder traceFolder,
309 int operation) {
e12ecd30 310
ab37ff41
PT
311 if (sourceResource.getProject().equals(traceFolder.getResource().getProject())) {
312 return null;
313 }
314 String targetName = sourceResource.getName();
828e5592 315 for (TmfTraceElement trace : traceFolder.getTraces()) {
ab37ff41
PT
316 if (trace.getName().equals(targetName)) {
317 targetName = promptRename(trace);
318 if (targetName == null) {
319 return null;
320 }
828e5592
PT
321 break;
322 }
323 }
ab37ff41
PT
324 try {
325 if (operation == DND.DROP_COPY) {
326 IPath destination = traceFolder.getResource().getFullPath().addTrailingSeparator().append(targetName);
828e5592 327 sourceResource.copy(destination, false, null);
fedfc72a 328 cleanupBookmarks(destination);
ab37ff41
PT
329 } else {
330 createLink(traceFolder.getResource(), sourceResource, targetName);
828e5592 331 }
c3d27e8f
PT
332 IResource traceResource = traceFolder.getResource().findMember(targetName);
333 setTraceType(traceResource);
334 return traceResource;
ab37ff41
PT
335 } catch (CoreException e) {
336 displayException(e);
828e5592 337 }
ab37ff41 338 return null;
828e5592 339 }
abbdd66a 340
828e5592 341 /**
ab37ff41 342 * Drop a trace by importing/linking a path in a target experiment
abbdd66a 343 *
828e5592
PT
344 * @param path the source path
345 * @param targetExperiment the target experiment
ab37ff41 346 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
828e5592
PT
347 * @return true if successful
348 */
ab37ff41
PT
349 private static boolean drop(Path path,
350 TmfExperimentElement targetExperiment,
351 int operation) {
abbdd66a 352
9fa32496
BH
353 // Use local variable to avoid parameter assignment
354 Path pathToUse = path;
355
828e5592 356 for (TmfTraceElement trace : targetExperiment.getTraces()) {
ab37ff41
PT
357 if (trace.getName().equals(pathToUse.lastSegment()) && pathToUse.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) {
358 return false;
828e5592
PT
359 }
360 }
ab37ff41
PT
361 if (!pathToUse.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) {
362 String targetName = pathToUse.lastSegment();
828e5592 363 for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
ab37ff41
PT
364 if (trace.getName().equals(targetName)) {
365 targetName = promptRename(trace);
366 if (targetName == null) {
367 return false;
368 }
828e5592
PT
369 break;
370 }
371 }
ab37ff41
PT
372 if (operation == DND.DROP_COPY) {
373 importTrace(targetExperiment.getProject().getTracesFolder().getResource(), pathToUse, targetName);
374 } else {
375 createLink(targetExperiment.getProject().getTracesFolder().getResource(), pathToUse, targetName);
828e5592 376 }
ab37ff41 377 // use the copied resource for the experiment
828e5592 378 IResource resource = null;
9fa32496 379 File file = new File(pathToUse.toString());
828e5592 380 if (file.exists() && file.isFile()) {
ab37ff41 381 resource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
828e5592 382 } else if (file.exists() && file.isDirectory()) {
ab37ff41 383 resource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
828e5592
PT
384 }
385 if (resource != null && resource.exists()) {
c3d27e8f 386 setTraceType(resource);
ab37ff41 387 createLink(targetExperiment.getResource(), resource, resource.getName());
d9030b38 388 targetExperiment.deleteSupplementaryResources();
639181ba 389 targetExperiment.closeEditors();
828e5592
PT
390 return true;
391 }
392 }
393 return false;
394 }
395
396 /**
ab37ff41 397 * Drop a trace by importing/linking a path in a trace folder
abbdd66a 398 *
828e5592
PT
399 * @param path the source path
400 * @param traceFolder the target trace folder
ab37ff41 401 * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
828e5592
PT
402 * @return true if successful
403 */
ab37ff41
PT
404 private static boolean drop(Path path,
405 TmfTraceFolder traceFolder,
406 int operation) {
407
408 String targetName = path.lastSegment();
828e5592 409 for (TmfTraceElement trace : traceFolder.getTraces()) {
ab37ff41
PT
410 if (trace.getName().equals(targetName)) {
411 targetName = promptRename(trace);
412 if (targetName == null) {
413 return false;
414 }
828e5592
PT
415 break;
416 }
417 }
ab37ff41
PT
418 if (operation == DND.DROP_COPY) {
419 importTrace(traceFolder.getResource(), path, targetName);
420 } else {
421 createLink(traceFolder.getResource(), path, targetName);
828e5592 422 }
c3d27e8f
PT
423 IResource traceResource = traceFolder.getResource().findMember(targetName);
424 setTraceType(traceResource);
ab37ff41 425 return true;
828e5592
PT
426 }
427
428 /**
429 * Import a trace to the trace folder
abbdd66a 430 *
ab37ff41 431 * @param folder the trace folder resource
828e5592 432 * @param path the path to the trace to import
ab37ff41 433 * @param targetName the target name
828e5592 434 */
ab37ff41
PT
435 private static void importTrace(final IFolder folder, final Path path, final String targetName) {
436 final File source = new File(path.toString());
437 if (source.isDirectory()) {
438 IPath containerPath = folder.getFullPath().addTrailingSeparator().append(targetName);
439 IOverwriteQuery overwriteImplementor = new IOverwriteQuery() {
440 @Override
441 public String queryOverwrite(String pathString) {
442 return IOverwriteQuery.NO_ALL;
443 }
444 };
445 List<File> filesToImport = Arrays.asList(source.listFiles());
446 ImportOperation operation = new ImportOperation(
447 containerPath,
448 source,
449 FileSystemStructureProvider.INSTANCE,
450 overwriteImplementor,
451 filesToImport);
452 operation.setCreateContainerStructure(false);
453 try {
454 operation.run(new NullProgressMonitor());
455 } catch (InvocationTargetException e) {
456 displayException(e);
457 } catch (InterruptedException e) {
458 displayException(e);
459 }
460 } else {
461 IRunnableWithProgress runnable = new IRunnableWithProgress() {
462 @Override
463 public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
464 try {
465 InputStream inputStream = new FileInputStream(source);
466 IFile targetFile = folder.getFile(targetName);
467 targetFile.create(inputStream, IResource.NONE, monitor);
468 } catch (CoreException e) {
469 displayException(e);
470 } catch (FileNotFoundException e) {
471 displayException(e);
472 }
473 }
474 };
475 WorkspaceModifyDelegatingOperation operation = new WorkspaceModifyDelegatingOperation(runnable);
476 try {
477 operation.run(new NullProgressMonitor());
478 } catch (InvocationTargetException e) {
479 displayException(e);
480 } catch (InterruptedException e) {
481 displayException(e);
828e5592 482 }
828e5592 483 }
abbdd66a 484 }
fedfc72a 485
828e5592
PT
486 /**
487 * Create a link to the actual trace and set the trace type
abbdd66a 488 *
828e5592
PT
489 * @param parentFolder the parent folder
490 * @param resource the resource
ab37ff41 491 * @param targetName the target name
828e5592 492 */
ab37ff41 493 private static void createLink(IFolder parentFolder, IResource resource, String targetName) {
828e5592
PT
494 IPath location = resource.getLocation();
495 IWorkspace workspace = ResourcesPlugin.getWorkspace();
496 try {
497 Map<QualifiedName, String> properties = resource.getPersistentProperties();
e12ecd30 498 String traceType = properties.get(TmfCommonConstants.TRACETYPE);
d1087bc2 499 TraceTypeHelper traceTypeHelper = TmfTraceType.getInstance().getTraceType(traceType);
e12ecd30 500
828e5592 501 if (resource instanceof IFolder) {
ab37ff41 502 IFolder folder = parentFolder.getFolder(targetName);
828e5592
PT
503 if (workspace.validateLinkLocation(folder, location).isOK()) {
504 folder.createLink(location, IResource.REPLACE, null);
d1087bc2
PT
505 if (traceTypeHelper != null) {
506 TmfTraceTypeUIUtils.setTraceType(folder, traceTypeHelper);
507 }
828e5592 508 } else {
8fd82db5 509 Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
828e5592
PT
510 }
511 } else {
ab37ff41 512 IFile file = parentFolder.getFile(targetName);
828e5592
PT
513 if (workspace.validateLinkLocation(file, location).isOK()) {
514 file.createLink(location, IResource.REPLACE, null);
d1087bc2
PT
515 if (traceTypeHelper != null) {
516 TmfTraceTypeUIUtils.setTraceType(file, traceTypeHelper);
517 }
828e5592 518 } else {
8fd82db5 519 Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
828e5592
PT
520 }
521 }
522 } catch (CoreException e) {
523 displayException(e);
524 }
525 }
526
ab37ff41
PT
527 /**
528 * Create a link to a file or folder
529 *
530 * @param parentFolder the parent folder
531 * @param source the file or folder
532 * @param targetName the target name
533 */
534 private static void createLink(IFolder parentFolder, IPath location, String targetName) {
535 File source = new File(location.toString());
536 IWorkspace workspace = ResourcesPlugin.getWorkspace();
537 try {
538
539 if (source.isDirectory()) {
540 IFolder folder = parentFolder.getFolder(targetName);
541 if (workspace.validateLinkLocation(folder, location).isOK()) {
542 folder.createLink(location, IResource.REPLACE, null);
543 } else {
544 Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
545 }
546 } else {
547 IFile file = parentFolder.getFile(targetName);
548 if (workspace.validateLinkLocation(file, location).isOK()) {
549 file.createLink(location, IResource.REPLACE, null);
550 } else {
551 Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
552 }
553 }
554 } catch (CoreException e) {
555 displayException(e);
556 }
557 }
558
559 /**
560 * Prompts the user to rename a trace
561 *
562 * @param trace the existing trace
563 * @return the new name to use or null if rename is canceled
564 */
565 private static String promptRename(TmfTraceElement trace) {
566 MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.ICON_QUESTION | SWT.CANCEL | SWT.OK);
567 mb.setText(Messages.DropAdapterAssistant_RenameTraceTitle);
568 mb.setMessage(NLS.bind(Messages.DropAdapterAssistant_RenameTraceMessage, trace.getName()));
569 if (mb.open() != SWT.OK) {
570 return null;
571 }
572 IFolder folder = trace.getProject().getTracesFolder().getResource();
573 int i = 2;
574 while (true) {
575 String name = trace.getName() + '-' + Integer.toString(i++);
576 IResource resource = folder.findMember(name);
577 if (resource == null) {
578 return name;
579 }
580 }
581 }
582
fedfc72a
PT
583 /**
584 * Cleanup bookmarks file in copied trace
585 */
abbdd66a 586 private static void cleanupBookmarks(IPath path) {
fedfc72a
PT
587 IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(path);
588 if (folder.exists()) {
589 try {
590 for (IResource member : folder.members()) {
e12ecd30 591 if (TmfTrace.class.getCanonicalName().equals(member.getPersistentProperty(TmfCommonConstants.TRACETYPE))) {
fedfc72a
PT
592 member.delete(true, null);
593 }
594 }
595 } catch (CoreException e) {
596 displayException(e);
597 }
598 }
599 }
600
c3d27e8f
PT
601 private static void setTraceType(IResource traceResource) {
602 try {
7154851d
PT
603 String traceType = traceResource.getPersistentProperties().get(TmfCommonConstants.TRACETYPE);
604 TraceTypeHelper traceTypeHelper = TmfTraceType.getInstance().getTraceType(traceType);
605 if (traceTypeHelper == null) {
606 traceTypeHelper = TmfTraceTypeUIUtils.selectTraceType(traceResource.getLocationURI().getPath(), null, null);
607 }
c3d27e8f 608 if (traceTypeHelper != null) {
a6e37e4c 609 TmfTraceTypeUIUtils.setTraceType(traceResource, traceTypeHelper);
c3d27e8f
PT
610 }
611 } catch (TmfTraceImportException e) {
612 } catch (CoreException e) {
613 displayException(e);
614 }
615 }
616
828e5592
PT
617 /**
618 * Display an exception in a message box
abbdd66a 619 *
828e5592
PT
620 * @param e the exception
621 */
abbdd66a 622 private static void displayException(Exception e) {
828e5592
PT
623 MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
624 mb.setText(e.getClass().getName());
625 mb.setMessage(e.getMessage());
626 mb.open();
627 }
628
629}
This page took 0.075836 seconds and 5 git commands to generate.