Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Tasse2014-04-21 21:25:30 +0000
committerPatrick Tasse2014-05-01 18:14:40 +0000
commit619fcd4837856d851686a4ac39ebfb3d24861b55 (patch)
treeccd200a9725cd937755a41eae8aa04d214c2c2fe
parentdb5e7a592d4914b463050ed9da4b3900a97998ac (diff)
downloadorg.eclipse.linuxtools-619fcd4837856d851686a4ac39ebfb3d24861b55.tar.gz
org.eclipse.linuxtools-619fcd4837856d851686a4ac39ebfb3d24861b55.tar.xz
org.eclipse.linuxtools-619fcd4837856d851686a4ac39ebfb3d24861b55.zip
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 <patrick.tasse@gmail.com> Reviewed-on: https://git.eclipse.org/r/25329 Tested-by: Hudson CI Reviewed-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com> Tested-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java123
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties2
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java1
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java5
4 files changed, 73 insertions, 58 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java
index 47448e8072..6402e95f68 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DropAdapterAssistant.java
+++ b/lttng/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/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties
index dbbbd42399..9aa4322460 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties
+++ b/lttng/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/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java
index 3b2e05f3f6..c37a60a442 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfCommonProjectElement.java
+++ b/lttng/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/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java
index 7ac2fb54f4..f821828178 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfExperimentElement.java
+++ b/lttng/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<QualifiedName, String> 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());

Back to the top