+ /**
+ * Copy this trace in the trace folder. No other parameters are mentioned so
+ * the trace is copied in this element's project trace folder
+ *
+ * @param string
+ * The new trace name
+ * @return the new Resource object
+ * @since 2.0
+ */
+ public TmfTraceElement copy(String string) {
+ TmfTraceFolder folder = this.getProject().getTracesFolder();
+ IResource res = super.copy(string, false);
+ return new TmfTraceElement(string, res, folder);
+ }
+
+ /**
+ * Close opened editors associated with this trace.
+ *
+ * @since 2.0
+ */
+ @Override
+ public void closeEditors() {
+ super.closeEditors();
+
+ // Close experiments that contain the trace if open
+ if (getParent() instanceof TmfTraceFolder) {
+ TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
+ for (ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
+ for (ITmfProjectModelElement child : experiment.getChildren()) {
+ if (child.getName().equals(getName())) {
+ ((TmfExperimentElement) experiment).closeEditors();
+ break;
+ }
+ }
+ }
+ } else if (getParent() instanceof TmfExperimentElement) {
+ TmfExperimentElement experiment = (TmfExperimentElement) getParent();
+ experiment.closeEditors();
+ }
+ }
+
+ /**
+ * Delete the trace resource, remove it from experiments and delete its
+ * supplementary files
+ *
+ * @param progressMonitor
+ * a progress monitor, or null if progress reporting is not
+ * desired
+ *
+ * @throws CoreException
+ * thrown when IResource.delete fails
+ * @since 2.2
+ */
+ public void delete(IProgressMonitor progressMonitor) throws CoreException {
+ closeEditors();
+
+ IPath path = fResource.getLocation();
+ if (path != null) {
+ if (getParent() instanceof TmfTraceFolder) {
+ TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
+
+ // Propagate the removal to traces
+ for (ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
+ List<ITmfProjectModelElement> toRemove = new LinkedList<>();
+ for (ITmfProjectModelElement child : experiment.getChildren()) {
+ if (child.getName().equals(getName())) {
+ toRemove.add(child);
+ }
+ }
+ for (ITmfProjectModelElement child : toRemove) {
+ ((TmfExperimentElement) experiment).removeTrace((TmfTraceElement) child);
+ }
+ }
+
+ // Delete supplementary files
+ deleteSupplementaryFolder();
+
+ } else if (getParent() instanceof TmfExperimentElement) {
+ TmfExperimentElement experimentElement = (TmfExperimentElement) getParent();
+ experimentElement.removeTrace(this);
+ }
+ }
+
+ // Finally, delete the trace
+ fResource.delete(true, progressMonitor);
+ }
+