import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.linuxtools.internal.tmf.ui.TmfUiPlugin;
+import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, Object aTarget) {
boolean ok = false;
+ // Use local variable to avoid parameter assignment
+ Object targetToUse = aTarget;
+
// If target is a trace, use its parent (either trace folder or experiment)
- if (aTarget instanceof TmfTraceElement) {
- aTarget = ((TmfTraceElement) aTarget).getParent();
+ if (targetToUse instanceof TmfTraceElement) {
+ targetToUse = ((TmfTraceElement) targetToUse).getParent();
}
// If target is a project, use its trace folder
- if (aTarget instanceof IProject) {
- TmfProjectElement projectElement = TmfProjectRegistry.getProject((IProject) aTarget);
+ if (targetToUse instanceof IProject) {
+ TmfProjectElement projectElement = TmfProjectRegistry.getProject((IProject) targetToUse);
if (projectElement != null) {
- aTarget = projectElement.getTracesFolder();
+ targetToUse = projectElement.getTracesFolder();
}
}
}
}
}
- IResource sourceResource = sourceTrace.getResource();
- if (aTarget instanceof TmfExperimentElement) {
- TmfExperimentElement targetExperiment = (TmfExperimentElement) aTarget;
- ok |= drop(sourceResource, targetExperiment);
- } else if (aTarget instanceof TmfTraceFolder) {
- TmfTraceFolder traceFolder = (TmfTraceFolder) aTarget;
- ok |= drop(sourceResource, traceFolder);
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
+ ok |= drop(sourceTrace, targetExperiment);
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
+ ok |= drop(sourceTrace, traceFolder);
}
} else if (source instanceof IResource) {
IResource sourceResource = (IResource) source;
if (sourceResource.getType() != IResource.FILE && sourceResource.getType() != IResource.FOLDER) {
continue;
}
- if (aTarget instanceof TmfExperimentElement) {
- TmfExperimentElement targetExperiment = (TmfExperimentElement) aTarget;
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
ok |= drop(sourceResource, targetExperiment);
- } else if (aTarget instanceof TmfTraceFolder) {
- TmfTraceFolder traceFolder = (TmfTraceFolder) aTarget;
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
ok |= drop(sourceResource, traceFolder);
}
}
String[] sources = (String[]) aDropTargetEvent.data;
for (String source : sources) {
Path path = new Path(source);
- if (aTarget instanceof TmfExperimentElement) {
- TmfExperimentElement targetExperiment = (TmfExperimentElement) aTarget;
+ if (targetToUse instanceof TmfExperimentElement) {
+ TmfExperimentElement targetExperiment = (TmfExperimentElement) targetToUse;
ok |= drop(path, targetExperiment);
- } else if (aTarget instanceof TmfTraceFolder) {
- TmfTraceFolder traceFolder = (TmfTraceFolder) aTarget;
+ } else if (targetToUse instanceof TmfTraceFolder) {
+ TmfTraceFolder traceFolder = (TmfTraceFolder) targetToUse;
ok |= drop(path, traceFolder);
}
}
return (ok ? Status.OK_STATUS : Status.CANCEL_STATUS);
}
+
+ /**
+ * Drop a trace by copying a resource in a target experiment
+ *
+ * @param sourceTrace the source trace element to copy
+ * @param targetExperiment the target experiment
+ * @return true if successful
+ */
+ private boolean drop(TmfTraceElement sourceTrace, TmfExperimentElement targetExperiment) {
+
+ IResource sourceResource = sourceTrace.getResource();
+
+ if (drop(sourceResource, targetExperiment)) {
+ IFolder destinationSupplementaryFolder = targetExperiment.getTraceSupplementaryFolder(sourceResource.getName());
+ if (!destinationSupplementaryFolder.exists()) {
+ sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
+ }
+ return true;
+ }
+ return false;
+ }
+
/**
* Drop a trace by copying a resource in a target experiment
*
*/
private boolean drop(IResource sourceResource, TmfExperimentElement targetExperiment) {
boolean doit = true;
- TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject());
+
+ //Use local variable to avoid parameter assignment
+ IResource sourceResourceToUse = sourceResource;
+
+ TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResourceToUse.getProject());
for (TmfTraceElement trace : targetExperiment.getTraces()) {
- if (trace.getName().equals(sourceResource.getName())) {
+ if (trace.getName().equals(sourceResourceToUse.getName())) {
doit = false;
break;
}
}
if (doit && !targetExperiment.getProject().equals(projectElement)) {
for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
- if (trace.getName().equals(sourceResource.getName())) {
+ if (trace.getName().equals(sourceResourceToUse.getName())) {
doit = false;
break;
}
}
if (doit) {
try {
- IPath destination = targetExperiment.getProject().getTracesFolder().getResource().getFullPath().addTrailingSeparator().append(sourceResource.getName());
- sourceResource.copy(destination, false, null);
+ IPath destination = targetExperiment.getProject().getTracesFolder().getResource().getFullPath().addTrailingSeparator().append(sourceResourceToUse.getName());
+ sourceResourceToUse.copy(destination, false, null);
cleanupBookmarks(destination);
// use the copied resource for the experiment
- if (sourceResource.getType() == IResource.FILE) {
- sourceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(sourceResource.getName());
- } else if (sourceResource.getType() == IResource.FOLDER) {
- sourceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(sourceResource.getName());
+ if (sourceResourceToUse.getType() == IResource.FILE) {
+ sourceResourceToUse = targetExperiment.getProject().getTracesFolder().getResource().getFile(sourceResourceToUse.getName());
+ } else if (sourceResourceToUse.getType() == IResource.FOLDER) {
+ sourceResourceToUse = targetExperiment.getProject().getTracesFolder().getResource().getFolder(sourceResourceToUse.getName());
}
} catch (CoreException e) {
doit = false;
}
}
if (doit) {
- if (sourceResource != null && sourceResource.exists()) {
- createLink(targetExperiment.getResource(), sourceResource);
+ if (sourceResourceToUse != null && sourceResourceToUse.exists()) {
+ createLink(targetExperiment.getResource(), sourceResourceToUse);
return true;
}
}
return false;
}
+ /**
+ * Drop a trace by copying it's a trace element in a trace folder
+ *
+ * @param sourceTrace the source trace
+ * @param traceFolder the target trace folder
+ * @return true if successful
+ */
+ private boolean drop(TmfTraceElement sourceTrace, TmfTraceFolder traceFolder) {
+ IResource sourceResource = sourceTrace.getResource();
+ if (drop(sourceResource, traceFolder)) {
+ IFolder destinationSupplementaryFolder = traceFolder.getTraceSupplementaryFolder(sourceResource.getName());
+ sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
+ return true;
+ }
+ return false;
+ }
+
/**
* Drop a trace by copying a resource in a trace folder
*
*/
private boolean drop(IResource sourceResource, TmfTraceFolder traceFolder) {
boolean doit = true;
+
for (TmfTraceElement trace : traceFolder.getTraces()) {
if (trace.getName().equals(sourceResource.getName())) {
doit = false;
try {
IPath destination = traceFolder.getResource().getFullPath().addTrailingSeparator().append(sourceResource.getName());
sourceResource.copy(destination, false, null);
+
cleanupBookmarks(destination);
return true;
} catch (CoreException e) {
}
return false;
}
-
+
/**
* Drop a trace by importing a path in a target experiment
*
*/
private boolean drop(Path path, TmfExperimentElement targetExperiment) {
boolean doit = true;
+
+ // Use local variable to avoid parameter assignment
+ Path pathToUse = path;
+
for (TmfTraceElement trace : targetExperiment.getTraces()) {
- if (trace.getName().equals(path.lastSegment())) {
+ if (trace.getName().equals(pathToUse.lastSegment())) {
doit = false;
break;
}
}
- if (doit && !path.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) {
+ if (doit && !pathToUse.toString().startsWith(targetExperiment.getProject().getResource().getLocation().toString())) {
for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
- if (trace.getName().equals(path.lastSegment())) {
+ if (trace.getName().equals(pathToUse.lastSegment())) {
doit = false;
break;
}
}
if (doit) {
- importTrace(targetExperiment.getProject().getTracesFolder().getResource(), path);
+ importTrace(targetExperiment.getProject().getTracesFolder().getResource(), pathToUse);
// use the imported trace for the experiment
- path = new Path(targetExperiment.getProject().getTracesFolder().getResource().getFile(path.lastSegment()).getLocation().toString());
+ pathToUse = new Path(targetExperiment.getProject().getTracesFolder().getResource().getFile(pathToUse.lastSegment()).getLocation().toString());
}
}
if (doit) {
IResource resource = null;
- File file = new File(path.toString());
+ File file = new File(pathToUse.toString());
if (file.exists() && file.isFile()) {
- resource = targetExperiment.getProject().getTracesFolder().getResource().getFile(path.lastSegment());
+ resource = targetExperiment.getProject().getTracesFolder().getResource().getFile(pathToUse.lastSegment());
} else if (file.exists() && file.isDirectory()) {
- resource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(path.lastSegment());
+ resource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(pathToUse.lastSegment());
}
if (resource != null && resource.exists()) {
createLink(targetExperiment.getResource(), resource);
IWorkspace workspace = ResourcesPlugin.getWorkspace();
try {
Map<QualifiedName, String> properties = resource.getPersistentProperties();
- String bundleName = properties.get(TmfTraceElement.TRACEBUNDLE);
- String traceType = properties.get(TmfTraceElement.TRACETYPE);
- String iconUrl = properties.get(TmfTraceElement.TRACEICON);
-
+ String bundleName = properties.get(TmfCommonConstants.TRACEBUNDLE);
+ String traceType = properties.get(TmfCommonConstants.TRACETYPE);
+ String iconUrl = properties.get(TmfCommonConstants.TRACEICON);
+ String supplFolder = properties.get(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER);
+
if (resource instanceof IFolder) {
IFolder folder = parentFolder.getFolder(resource.getName());
if (workspace.validateLinkLocation(folder, location).isOK()) {
folder.createLink(location, IResource.REPLACE, null);
- setProperties(folder, bundleName, traceType, iconUrl);
+ setProperties(folder, bundleName, traceType, iconUrl, supplFolder);
} else {
- System.out.println("Invalid Trace Location"); //$NON-NLS-1$
+ TmfUiPlugin.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
}
} else {
IFile file = parentFolder.getFile(resource.getName());
+
if (workspace.validateLinkLocation(file, location).isOK()) {
file.createLink(location, IResource.REPLACE, null);
- setProperties(file, bundleName, traceType, iconUrl);
+ setProperties(file, bundleName, traceType, iconUrl, supplFolder);
} else {
- System.out.println("Invalid Trace Location"); //$NON-NLS-1$
+ TmfUiPlugin.getDefault().logError("Invalid Trace Location"); //$NON-NLS-1$
}
}
} catch (CoreException e) {
if (folder.exists()) {
try {
for (IResource member : folder.members()) {
- if (TmfTrace.class.getCanonicalName().equals(member.getPersistentProperty(TmfTraceElement.TRACETYPE))) {
+ if (TmfTrace.class.getCanonicalName().equals(member.getPersistentProperty(TmfCommonConstants.TRACETYPE))) {
member.delete(true, null);
}
}
* @param bundleName the bundle name
* @param traceType the trace type
* @param iconUrl the icon URL
+ * @param supplFolder the directory of the directory for supplementary information or null to ignore the property
* @throws CoreException
*/
- private void setProperties(IResource resource, String bundleName, String traceType, String iconUrl) throws CoreException {
- resource.setPersistentProperty(TmfTraceElement.TRACEBUNDLE, bundleName);
- resource.setPersistentProperty(TmfTraceElement.TRACETYPE, traceType);
- resource.setPersistentProperty(TmfTraceElement.TRACEICON, iconUrl);
+ private void setProperties(IResource resource, String bundleName, String traceType, String iconUrl, String supplFolder) throws CoreException {
+ resource.setPersistentProperty(TmfCommonConstants.TRACEBUNDLE, bundleName);
+ resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, traceType);
+ resource.setPersistentProperty(TmfCommonConstants.TRACEICON, iconUrl);
+ resource.setPersistentProperty(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, supplFolder);
}
/**