From c2f1c5b6b9de3c249e467ee095a792ab360f880b Mon Sep 17 00:00:00 2001 From: Patrick Tasse Date: Mon, 21 Apr 2014 17:25:30 -0400 Subject: [PATCH] tmf: Update drag and drop to support trace folders - Support drag and drop to any trace folder - Support drag and drop from any trace folder - Fix drag and drop to experiment from external source of a trace already in project - Fix unnecessary creation of target supplementary folder when source doesn't have a supplementary folder - Align trace rename scheme with import wizard Change-Id: I2da1c3ce5b8b4f638dfd89ebb478f809fd6f13d2 Signed-off-by: Patrick Tasse Reviewed-on: https://git.eclipse.org/r/25329 Tested-by: Hudson CI Reviewed-by: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../handlers/DropAdapterAssistant.java | 123 ++++++++++-------- .../ui/project/handlers/messages.properties | 2 +- .../model/TmfCommonProjectElement.java | 1 + .../project/model/TmfExperimentElement.java | 5 +- 4 files changed, 73 insertions(+), 58 deletions(-) diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java index 47448e8072..6402e95f68 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; @@ -206,7 +207,7 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { if (targetResource != null) { if (! sourceTrace.getProject().equals(targetExperiment.getProject())) { - IFolder destinationSupplementaryFolder = targetExperiment.prepareTraceSupplementaryFolder(targetResource.getName(), false); + IFolder destinationSupplementaryFolder = targetExperiment.getTraceSupplementaryFolder(targetResource.getName()); sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder); } return true; @@ -228,17 +229,19 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { IResource traceResource = sourceResource; - TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject()); - for (TmfTraceElement trace : targetExperiment.getTraces()) { - if (trace.getName().equals(sourceResource.getName()) && targetExperiment.getProject().equals(projectElement)) { - return null; + 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; + } } - } - if (!targetExperiment.getProject().getTracesFolder().getResource().equals(sourceResource.getParent())) { + } else { String targetName = sourceResource.getName(); - for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) { - if (trace.getName().equals(targetName)) { - targetName = promptRename(trace); + for (ITmfProjectModelElement element : targetExperiment.getProject().getTracesFolder().getChildren()) { + if (element.getName().equals(targetName)) { + targetName = promptRename(element); if (targetName == null) { return null; } @@ -271,9 +274,14 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { } if (traceResource != null && traceResource.exists()) { setTraceType(traceResource); - createLink(targetExperiment.getResource(), traceResource, traceResource.getName()); - targetExperiment.closeEditors(); - targetExperiment.deleteSupplementaryResources(); + for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) { + if (trace.getResource().equals(traceResource)) { + targetExperiment.addTrace(trace); + targetExperiment.closeEditors(); + targetExperiment.deleteSupplementaryResources(); + break; + } + } return traceResource; } return null; @@ -295,7 +303,8 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { IResource targetResource = drop(sourceResource, traceFolder, operation); if (targetResource != null) { - IFolder destinationSupplementaryFolder = traceFolder.prepareTraceSupplementaryFolder(targetResource.getName(), false); + String elementPath = targetResource.getFullPath().makeRelativeTo(traceFolder.getProject().getTracesFolder().getPath()).toString(); + IFolder destinationSupplementaryFolder = traceFolder.getTraceSupplementaryFolder(elementPath); sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder); return true; } @@ -318,9 +327,9 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { return null; } String targetName = sourceResource.getName(); - for (TmfTraceElement trace : traceFolder.getTraces()) { - if (trace.getName().equals(targetName)) { - targetName = promptRename(trace); + for (ITmfProjectModelElement element : traceFolder.getChildren()) { + if (element.getName().equals(targetName)) { + targetName = promptRename(element); if (targetName == null) { return null; } @@ -363,19 +372,21 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { TmfExperimentElement targetExperiment, int operation) { - // Use local variable to avoid parameter assignment - Path pathToUse = path; - - for (TmfTraceElement trace : targetExperiment.getTraces()) { - if (trace.getName().equals(pathToUse.lastSegment()) && pathToUse.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) { - return false; + 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; + } } - } - if (!pathToUse.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) { - String targetName = pathToUse.lastSegment(); - for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) { - if (trace.getName().equals(targetName)) { - targetName = promptRename(trace); + 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; } @@ -383,31 +394,35 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { } } if (operation == DND.DROP_COPY) { - importTrace(targetExperiment.getProject().getTracesFolder().getResource(), pathToUse, targetName); + importTrace(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName); } else { - createLink(targetExperiment.getProject().getTracesFolder().getResource(), pathToUse, targetName); + createLink(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName); } // use the copied resource for the experiment - IResource resource = null; - File file = new File(pathToUse.toString()); + File file = new File(path.toString()); if (file.exists() && file.isFile()) { - resource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName); + traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName); } else if (file.exists() && file.isDirectory()) { - resource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName); + 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); } - if (resource != null && resource.exists()) { - try { - String sourceLocation = URIUtil.toUnencodedString(path.toFile().toURI()); - resource.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; } - setTraceType(resource); - createLink(targetExperiment.getResource(), resource, resource.getName()); - targetExperiment.closeEditors(); - targetExperiment.deleteSupplementaryResources(); - return true; } + return true; } return false; } @@ -425,9 +440,9 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { int operation) { String targetName = path.lastSegment(); - for (TmfTraceElement trace : traceFolder.getTraces()) { - if (trace.getName().equals(targetName)) { - targetName = promptRename(trace); + for (ITmfProjectModelElement element : traceFolder.getChildren()) { + if (element.getName().equals(targetName)) { + targetName = promptRename(element); if (targetName == null) { return false; } @@ -586,20 +601,20 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant { /** * Prompts the user to rename a trace * - * @param trace the existing trace + * @param element the conflicting element * @return the new name to use or null if rename is canceled */ - private static String promptRename(TmfTraceElement trace) { + 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, trace.getName())); + mb.setMessage(NLS.bind(Messages.DropAdapterAssistant_RenameTraceMessage, element.getName())); if (mb.open() != SWT.OK) { return null; } - IFolder folder = trace.getProject().getTracesFolder().getResource(); + IContainer folder = element.getResource().getParent(); int i = 2; while (true) { - String name = trace.getName() + '-' + Integer.toString(i++); + String name = element.getName() + '(' + Integer.toString(i++) + ')'; IResource resource = folder.findMember(name); if (resource == null) { return name; diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties index dbbbd42399..9aa4322460 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties @@ -28,7 +28,7 @@ SelectTraceTypeHandler_InvalidTraceType = Type could not be set for one or more # Drag and drop DropAdapterAssistant_RenameTraceTitle=Confirm rename trace -DropAdapterAssistant_RenameTraceMessage=A trace with the name ''{0}'' already exists in the target project.\nRename the dropped trace? +DropAdapterAssistant_RenameTraceMessage=An element with the name ''{0}'' already exists in the target folder.\nRename the dropped trace? # Trace synchronization SynchronizeTracesHandler_InitError=Error initializing trace diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java index 3b2e05f3f6..c37a60a442 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java @@ -481,6 +481,7 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement { // copy supplementary folder if (oldSupplFolder.exists()) { try { + TraceUtils.createFolder((IFolder) destination.getParent(), new NullProgressMonitor()); oldSupplFolder.copy(destination.getFullPath(), true, new NullProgressMonitor()); } catch (CoreException e) { Activator.getDefault().logError("Error copying supplementary folder " + oldSupplFolder, e); //$NON-NLS-1$ diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java index 7ac2fb54f4..f821828178 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java @@ -35,7 +35,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.InvalidRegistryObjectException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.QualifiedName; import org.eclipse.linuxtools.internal.tmf.ui.Activator; import org.eclipse.linuxtools.tmf.core.TmfCommonConstants; import org.eclipse.linuxtools.tmf.core.project.model.TmfTraceType; @@ -256,8 +255,8 @@ public class TmfExperimentElement extends TmfCommonProjectElement implements IPr IPath location = resource.getLocation(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); try { - Map properties = trace.getResource().getPersistentProperties(); - TraceTypeHelper traceType = TmfTraceType.getInstance().getTraceType(properties.get(TmfCommonConstants.TRACETYPE)); + String traceTypeId = trace.getResource().getPersistentProperty(TmfCommonConstants.TRACETYPE); + TraceTypeHelper traceType = TmfTraceType.getInstance().getTraceType(traceTypeId); if (resource instanceof IFolder) { IFolder folder = experiment.getFolder(trace.getElementPath()); -- 2.34.1