Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java')
-rw-r--r--tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java669
1 files changed, 669 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java
new file mode 100644
index 0000000000..c8089b9409
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java
@@ -0,0 +1,669 @@
+/*******************************************************************************
+* Copyright (c) 2012, 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tasse - Initial API and implementation
+ * Patrick Tasse - Add support for DROP_LINK and rename prompt on name clash
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.tmf.ui.project.handlers;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
+import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
+import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceImportException;
+import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
+import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper;
+import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceTypeUIUtils;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
+import org.eclipse.ui.dialogs.IOverwriteQuery;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
+import org.eclipse.ui.wizards.datatransfer.ImportOperation;
+
+/**
+ * Drop adapter assistant for project explorer
+ */
+public class DropAdapterAssistant extends CommonDropAdapterAssistant {
+
+ /**
+ * Default constructor
+ */
+ public DropAdapterAssistant() {
+ }
+
+ @Override
+ public boolean isSupportedType(TransferData aTransferType) {
+ return super.isSupportedType(aTransferType) || FileTransfer.getInstance().isSupportedType(aTransferType);
+ }
+
+ @Override
+ public IStatus validateDrop(Object target, int operation, TransferData transferType) {
+ if (target instanceof TmfTraceFolder) {
+ return Status.OK_STATUS;
+ }
+ if (target instanceof TmfExperimentElement) {
+ return Status.OK_STATUS;
+ }
+ if (target instanceof TmfTraceElement) {
+ ITmfProjectModelElement parent = ((TmfTraceElement) target).getParent();
+ if (parent instanceof TmfTraceFolder) {
+ return Status.OK_STATUS;
+ }
+ if (parent instanceof TmfExperimentElement) {
+ return Status.OK_STATUS;
+ }
+ }
+ if (target instanceof IProject) {
+ return Status.OK_STATUS;
+ }
+ return Status.CANCEL_STATUS;
+ }
+
+ @Override
+ public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, Object aTarget) {
+ boolean ok = false;
+
+ // Use local variable to avoid parameter assignment
+ Object targetToUse = aTarget;
+
+ int operation = aDropTargetEvent.detail;
+ if (operation != DND.DROP_LINK) {
+ operation = DND.DROP_COPY;
+ }
+
+ // If target is a trace, use its parent (either trace folder or experiment)
+ if (targetToUse instanceof TmfTraceElement) {
+ targetToUse = ((TmfTraceElement) targetToUse).getParent();
+ }
+
+ // If target is a project, use its trace folder
+ if (targetToUse instanceof IProject) {
+ TmfProjectElement projectElement = TmfProjectRegistry.getProject((IProject) targetToUse, true);
+ if (projectElement != null) {
+ targetToUse = projectElement.getTracesFolder();
+ }
+ }
+
+ if (aDropTargetEvent.data instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) aDropTargetEvent.data;
+ for (Object source : selection.toArray()) {
+ if (source instanceof IResource) {
+ // If source resource is a trace, use the trace element
+ IResource sourceResource = (IResource) source;
+ TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject());
+ if (projectElement != null && projectElement.getTracesFolder() != null) {
+ for (TmfTraceElement trace : projectElement.getTracesFolder().getTraces()) {
+ if (trace.getResource().equals(sourceResource)) {
+ source = trace;
+ break;
+ }
+ }
+ }
+ }
+ if (source instanceof TmfTraceElement) {
+ TmfTraceElement sourceTrace = (TmfTraceElement) source;
+ // If source trace is under an experiment, use the original trace from the traces folder
+ sourceTrace = sourceTrace.getElementUnderTraceFolder();
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
+ ok |= drop(sourceTrace, targetExperiment, operation);
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
+ ok |= drop(sourceTrace, traceFolder, operation);
+ }
+ } else if (source instanceof IResource) {
+ IResource sourceResource = (IResource) source;
+ if (sourceResource.getType() != IResource.FILE && sourceResource.getType() != IResource.FOLDER) {
+ continue;
+ }
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
+ ok |= (drop(sourceResource, targetExperiment, operation) != null);
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
+ ok |= (drop(sourceResource, traceFolder, operation) != null);
+ }
+ }
+ }
+ } else if (aDropTargetEvent.data instanceof String[]) {
+ String[] sources = (String[]) aDropTargetEvent.data;
+ for (String source : sources) {
+ Path path = new Path(source);
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
+ ok |= drop(path, targetExperiment, operation);
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
+ ok |= drop(path, traceFolder, operation);
+ }
+ }
+ }
+ return (ok ? Status.OK_STATUS : Status.CANCEL_STATUS);
+ }
+
+
+ /**
+ * Drop a trace by copying/linking a trace element in a target experiment
+ *
+ * @param sourceTrace the source trace element to copy
+ * @param targetExperiment the target experiment
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return true if successful
+ */
+ private static boolean drop(TmfTraceElement sourceTrace,
+ TmfExperimentElement targetExperiment,
+ int operation) {
+
+ IResource sourceResource = sourceTrace.getResource();
+ IResource targetResource = drop(sourceResource, targetExperiment, operation);
+
+ if (targetResource != null) {
+ if (! sourceTrace.getProject().equals(targetExperiment.getProject())) {
+ IFolder destinationSupplementaryFolder = targetExperiment.getTraceSupplementaryFolder(targetResource.getName());
+ sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Drop a trace by copying/linking a resource in a target experiment
+ *
+ * @param sourceResource the source resource
+ * @param targetExperiment the target experiment
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return the target resource or null if unsuccessful
+ */
+ private static IResource drop(IResource sourceResource,
+ TmfExperimentElement targetExperiment,
+ int operation) {
+
+ IResource traceResource = sourceResource;
+
+ IPath tracesFolderPath = targetExperiment.getProject().getTracesFolder().getPath();
+ if (tracesFolderPath.isPrefixOf(sourceResource.getFullPath())) {
+ String elementPath = sourceResource.getFullPath().makeRelativeTo(tracesFolderPath).toString();
+ for (TmfTraceElement trace : targetExperiment.getTraces()) {
+ if (trace.getElementPath().equals(elementPath)) {
+ return null;
+ }
+ }
+ } else {
+ String targetName = sourceResource.getName();
+ for (ITmfProjectModelElement element : targetExperiment.getProject().getTracesFolder().getChildren()) {
+ if (element.getName().equals(targetName)) {
+ targetName = promptRename(element);
+ if (targetName == null) {
+ return null;
+ }
+ break;
+ }
+ }
+ try {
+ if (operation == DND.DROP_COPY && !sourceResource.isLinked()) {
+ IPath destination = targetExperiment.getProject().getTracesFolder().getResource().getFullPath().addTrailingSeparator().append(targetName);
+ sourceResource.copy(destination, false, null);
+ cleanupBookmarks(destination);
+ } else {
+ createLink(targetExperiment.getProject().getTracesFolder().getResource(), sourceResource, targetName);
+ }
+ // use the copied resource for the experiment
+ if (sourceResource.getType() == IResource.FILE) {
+ traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
+ } else if (sourceResource.getType() == IResource.FOLDER) {
+ traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
+ }
+ String sourceLocation = sourceResource.getPersistentProperty(TmfCommonConstants.SOURCE_LOCATION);
+ if (sourceLocation == null) {
+ sourceLocation = URIUtil.toUnencodedString(new File(sourceResource.getLocationURI()).toURI());
+ }
+ traceResource.setPersistentProperty(TmfCommonConstants.SOURCE_LOCATION, sourceLocation);
+ } catch (CoreException e) {
+ displayException(e);
+ return null;
+ }
+ }
+ if (traceResource != null && traceResource.exists()) {
+ setTraceType(traceResource);
+ for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
+ if (trace.getResource().equals(traceResource)) {
+ targetExperiment.addTrace(trace);
+ targetExperiment.closeEditors();
+ targetExperiment.deleteSupplementaryResources();
+ break;
+ }
+ }
+ return traceResource;
+ }
+ return null;
+ }
+
+ /**
+ * Drop a trace by copying/linking a trace element in a trace folder
+ *
+ * @param sourceTrace the source trace
+ * @param traceFolder the target trace folder
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return true if successful
+ */
+ private static boolean drop(TmfTraceElement sourceTrace,
+ TmfTraceFolder traceFolder,
+ int operation) {
+
+ IResource sourceResource = sourceTrace.getResource();
+ IResource targetResource = drop(sourceResource, traceFolder, operation);
+
+ if (targetResource != null) {
+ String elementPath = targetResource.getFullPath().makeRelativeTo(traceFolder.getProject().getTracesFolder().getPath()).toString();
+ IFolder destinationSupplementaryFolder = traceFolder.getTraceSupplementaryFolder(elementPath);
+ sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Drop a trace by copying/linking a resource in a trace folder
+ *
+ * @param sourceResource the source resource
+ * @param traceFolder the target trace folder
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return the target resource or null if unsuccessful
+ */
+ private static IResource drop(IResource sourceResource,
+ TmfTraceFolder traceFolder,
+ int operation) {
+
+ if (sourceResource.getParent().equals(traceFolder.getResource())) {
+ return null;
+ }
+ String targetName = sourceResource.getName();
+ for (ITmfProjectModelElement element : traceFolder.getChildren()) {
+ if (element.getName().equals(targetName)) {
+ targetName = promptRename(element);
+ if (targetName == null) {
+ return null;
+ }
+ break;
+ }
+ }
+ try {
+ if (operation == DND.DROP_COPY && !sourceResource.isLinked()) {
+ IPath destination = traceFolder.getResource().getFullPath().addTrailingSeparator().append(targetName);
+ sourceResource.copy(destination, false, null);
+ cleanupBookmarks(destination);
+ } else {
+ createLink(traceFolder.getResource(), sourceResource, targetName);
+ }
+ IResource traceResource = traceFolder.getResource().findMember(targetName);
+ if (traceResource != null && traceResource.exists()) {
+ String sourceLocation = sourceResource.getPersistentProperty(TmfCommonConstants.SOURCE_LOCATION);
+ if (sourceLocation == null) {
+ sourceLocation = URIUtil.toUnencodedString(new File(sourceResource.getLocationURI()).toURI());
+ }
+ traceResource.setPersistentProperty(TmfCommonConstants.SOURCE_LOCATION, sourceLocation);
+ setTraceType(traceResource);
+ }
+ return traceResource;
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ return null;
+ }
+
+ /**
+ * Drop a trace by importing/linking a path in a target experiment
+ *
+ * @param path the source path
+ * @param targetExperiment the target experiment
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return true if successful
+ */
+ private static boolean drop(Path path,
+ TmfExperimentElement targetExperiment,
+ int operation) {
+
+ IPath tracesFolderPath = targetExperiment.getProject().getTracesFolder().getResource().getLocation();
+ IResource traceResource = null;
+ if (tracesFolderPath.isPrefixOf(path)) {
+ String elementPath = path.makeRelativeTo(tracesFolderPath).toString();
+ for (TmfTraceElement trace : targetExperiment.getTraces()) {
+ if (trace.getElementPath().equals(elementPath)) {
+ return false;
+ }
+ }
+ traceResource = targetExperiment.getProject().getTracesFolder().getResource().findMember(elementPath);
+ } else {
+ String targetName = path.lastSegment();
+ for (ITmfProjectModelElement element : targetExperiment.getProject().getTracesFolder().getChildren()) {
+ if (element.getName().equals(targetName)) {
+ targetName = promptRename(element);
+ if (targetName == null) {
+ return false;
+ }
+ break;
+ }
+ }
+ if (operation == DND.DROP_COPY) {
+ importTrace(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName);
+ } else {
+ createLink(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName);
+ }
+ // use the copied resource for the experiment
+ File file = new File(path.toString());
+ if (file.exists() && file.isFile()) {
+ traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
+ } else if (file.exists() && file.isDirectory()) {
+ traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
+ }
+ }
+ if (traceResource != null && traceResource.exists()) {
+ try {
+ String sourceLocation = URIUtil.toUnencodedString(path.toFile().toURI());
+ traceResource.setPersistentProperty(TmfCommonConstants.SOURCE_LOCATION, sourceLocation);
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ setTraceType(traceResource);
+ for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
+ if (trace.getResource().equals(traceResource)) {
+ targetExperiment.addTrace(trace);
+ targetExperiment.closeEditors();
+ targetExperiment.deleteSupplementaryResources();
+ break;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Drop a trace by importing/linking a path in a trace folder
+ *
+ * @param path the source path
+ * @param traceFolder the target trace folder
+ * @param operation the drop operation (DND.DROP_COPY | DND.DROP_LINK)
+ * @return true if successful
+ */
+ private static boolean drop(Path path,
+ TmfTraceFolder traceFolder,
+ int operation) {
+
+ String targetName = path.lastSegment();
+ for (ITmfProjectModelElement element : traceFolder.getChildren()) {
+ if (element.getName().equals(targetName)) {
+ targetName = promptRename(element);
+ if (targetName == null) {
+ return false;
+ }
+ break;
+ }
+ }
+ if (operation == DND.DROP_COPY) {
+ importTrace(traceFolder.getResource(), path, targetName);
+ } else {
+ createLink(traceFolder.getResource(), path, targetName);
+ }
+ IResource traceResource = traceFolder.getResource().findMember(targetName);
+ if (traceResource != null && traceResource.exists()) {
+ try {
+ String sourceLocation = URIUtil.toUnencodedString(path.toFile().toURI());
+ traceResource.setPersistentProperty(TmfCommonConstants.SOURCE_LOCATION, sourceLocation);
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ setTraceType(traceResource);
+ }
+ return true;
+ }
+
+ /**
+ * Import a trace to the trace folder
+ *
+ * @param folder the trace folder resource
+ * @param path the path to the trace to import
+ * @param targetName the target name
+ */
+ private static void importTrace(final IFolder folder, final Path path, final String targetName) {
+ final File source = new File(path.toString());
+ if (source.isDirectory()) {
+ IPath containerPath = folder.getFullPath().addTrailingSeparator().append(targetName);
+ IOverwriteQuery overwriteImplementor = new IOverwriteQuery() {
+ @Override
+ public String queryOverwrite(String pathString) {
+ return IOverwriteQuery.NO_ALL;
+ }
+ };
+ List<File> filesToImport = Arrays.asList(source.listFiles());
+ ImportOperation operation = new ImportOperation(
+ containerPath,
+ source,
+ FileSystemStructureProvider.INSTANCE,
+ overwriteImplementor,
+ filesToImport);
+ operation.setCreateContainerStructure(false);
+ try {
+ operation.run(new NullProgressMonitor());
+ } catch (InvocationTargetException e) {
+ displayException(e);
+ } catch (InterruptedException e) {
+ displayException(e);
+ }
+ } else {
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try (InputStream inputStream = new FileInputStream(source);) {
+ IFile targetFile = folder.getFile(targetName);
+ targetFile.create(inputStream, IResource.NONE, monitor);
+ } catch (CoreException | IOException e) {
+ displayException(e);
+ }
+ }
+ };
+ WorkspaceModifyDelegatingOperation operation = new WorkspaceModifyDelegatingOperation(runnable);
+ try {
+ operation.run(new NullProgressMonitor());
+ } catch (InvocationTargetException e) {
+ displayException(e);
+ } catch (InterruptedException e) {
+ displayException(e);
+ }
+ }
+ }
+
+ /**
+ * Create a link to the actual trace and set the trace type
+ *
+ * @param parentFolder the parent folder
+ * @param resource the resource
+ * @param targetName the target name
+ */
+ private static void createLink(IFolder parentFolder, IResource resource, String targetName) {
+ IPath location = resource.getLocation();
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ try {
+ String traceType = TmfTraceType.getTraceTypeId(resource);
+ TraceTypeHelper traceTypeHelper = TmfTraceType.getTraceType(traceType);
+
+ if (resource instanceof IFolder) {
+ IFolder folder = parentFolder.getFolder(targetName);
+ IStatus result = workspace.validateLinkLocation(folder, location);
+ if (result.isOK() || result.matches(IStatus.INFO | IStatus.WARNING)) {
+ folder.createLink(location, IResource.REPLACE, null);
+ if (traceTypeHelper != null) {
+ TmfTraceTypeUIUtils.setTraceType(folder, traceTypeHelper);
+ }
+ } else {
+ Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
+ }
+ } else {
+ IFile file = parentFolder.getFile(targetName);
+ IStatus result = workspace.validateLinkLocation(file, location);
+ if (result.isOK() || result.matches(IStatus.INFO | IStatus.WARNING)) {
+ file.createLink(location, IResource.REPLACE, null);
+ if (traceTypeHelper != null) {
+ TmfTraceTypeUIUtils.setTraceType(file, traceTypeHelper);
+ }
+ } else {
+ Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
+ }
+ }
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ }
+
+ /**
+ * Create a link to a file or folder
+ *
+ * @param parentFolder the parent folder
+ * @param source the file or folder
+ * @param targetName the target name
+ */
+ private static void createLink(IFolder parentFolder, IPath location, String targetName) {
+ File source = new File(location.toString());
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ try {
+
+ if (source.isDirectory()) {
+ IFolder folder = parentFolder.getFolder(targetName);
+ IStatus result = workspace.validateLinkLocation(folder, location);
+ if (result.isOK() || result.matches(IStatus.INFO | IStatus.WARNING)) {
+ folder.createLink(location, IResource.REPLACE, null);
+ } else {
+ Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
+ }
+ } else {
+ IFile file = parentFolder.getFile(targetName);
+ IStatus result = workspace.validateLinkLocation(file, location);
+ if (result.isOK() || result.matches(IStatus.INFO | IStatus.WARNING)) {
+ file.createLink(location, IResource.REPLACE, null);
+ } else {
+ Activator.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
+ }
+ }
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ }
+
+ /**
+ * Prompts the user to rename a trace
+ *
+ * @param element the conflicting element
+ * @return the new name to use or null if rename is canceled
+ */
+ private static String promptRename(ITmfProjectModelElement element) {
+ MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.ICON_QUESTION | SWT.CANCEL | SWT.OK);
+ mb.setText(Messages.DropAdapterAssistant_RenameTraceTitle);
+ mb.setMessage(NLS.bind(Messages.DropAdapterAssistant_RenameTraceMessage, element.getName()));
+ if (mb.open() != SWT.OK) {
+ return null;
+ }
+ IContainer folder = element.getResource().getParent();
+ int i = 2;
+ while (true) {
+ String name = element.getName() + '(' + Integer.toString(i++) + ')';
+ IResource resource = folder.findMember(name);
+ if (resource == null) {
+ return name;
+ }
+ }
+ }
+
+ /**
+ * Cleanup bookmarks file in copied trace
+ */
+ private static void cleanupBookmarks(IPath path) {
+ IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(path);
+ if (folder.exists()) {
+ try {
+ for (IResource member : folder.members()) {
+ if (ITmfEventsEditorConstants.TRACE_INPUT_TYPE_CONSTANTS.contains(TmfTraceType.getTraceTypeId(member))) {
+ member.delete(true, null);
+ }
+ }
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ }
+ }
+
+ private static void setTraceType(IResource traceResource) {
+ try {
+ String traceType = TmfTraceType.getTraceTypeId(traceResource);
+ TraceTypeHelper traceTypeHelper = TmfTraceType.getTraceType(traceType);
+ if (traceTypeHelper == null) {
+ traceTypeHelper = TmfTraceTypeUIUtils.selectTraceType(traceResource.getLocation().toOSString(), null, null);
+ }
+ if (traceTypeHelper != null) {
+ TmfTraceTypeUIUtils.setTraceType(traceResource, traceTypeHelper);
+ }
+ } catch (TmfTraceImportException e) {
+ } catch (CoreException e) {
+ displayException(e);
+ }
+ }
+
+ /**
+ * Display an exception in a message box
+ *
+ * @param e the exception
+ */
+ private static void displayException(Exception e) {
+ MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+ mb.setText(e.getClass().getName());
+ mb.setMessage(e.getMessage());
+ mb.open();
+ }
+
+}

Back to the top