Skip to content

Commit a5163f0

Browse files
committed
xml.config: Delete supplementary files when deleting xml analysis config
Fixes #267 [Fixed] Delete supplementary files when deleting xml analysis config Signed-off-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
1 parent 4eef073 commit a5163f0

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ Require-Bundle: org.eclipse.core.runtime,
1717
org.eclipse.tracecompass.analysis.profiling.core,
1818
org.eclipse.core.commands,
1919
com.google.guava,
20-
org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
20+
org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
21+
org.eclipse.core.resources
2122
Export-Package: org.eclipse.tracecompass.internal.tmf.analysis.xml.core;x-friends:="org.eclipse.tracecompass.tmf.analysis.xml.core.tests",
2223
org.eclipse.tracecompass.internal.tmf.analysis.xml.core.callstack;x-friends:="org.eclipse.tracecompass.tmf.analysis.xml.core.tests",
2324
org.eclipse.tracecompass.internal.tmf.analysis.xml.core.config;x-friends:="org.eclipse.tracecompass.tmf.analysis.xml.core.tests",

tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/core/config/XmlConfigurationSource.java

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,40 @@
1313
import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
1414

1515
import java.io.File;
16+
import java.util.HashSet;
1617
import java.util.List;
1718
import java.util.Map;
1819
import java.util.Map.Entry;
20+
import java.util.Set;
1921
import java.util.concurrent.ConcurrentHashMap;
2022

23+
import org.eclipse.core.resources.IFile;
24+
import org.eclipse.core.resources.IFolder;
25+
import org.eclipse.core.resources.IProject;
26+
import org.eclipse.core.resources.IResource;
27+
import org.eclipse.core.resources.IResourceVisitor;
28+
import org.eclipse.core.resources.ResourcesPlugin;
29+
import org.eclipse.core.runtime.CoreException;
2130
import org.eclipse.core.runtime.IStatus;
2231
import org.eclipse.core.runtime.Path;
2332
import org.eclipse.jdt.annotation.NonNull;
2433
import org.eclipse.jdt.annotation.Nullable;
2534
import org.eclipse.osgi.util.NLS;
35+
import org.eclipse.tracecompass.internal.analysis.timing.core.Activator;
2636
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlAnalysisModuleSource;
2737
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
38+
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
39+
import org.eclipse.tracecompass.tmf.core.TmfProjectNature;
40+
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
2841
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
2942
import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSource;
3043
import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSourceType;
3144
import org.eclipse.tracecompass.tmf.core.config.TmfConfigParamDescriptor;
3245
import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration;
3346
import org.eclipse.tracecompass.tmf.core.config.TmfConfigurationSourceType;
3447
import org.eclipse.tracecompass.tmf.core.exceptions.TmfConfigurationException;
48+
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
49+
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
3550

3651
import com.google.common.collect.ImmutableList;
3752

@@ -108,7 +123,7 @@ public ITmfConfiguration update(String id, Map<String, Object> parameters) throw
108123
if (!XmlUtils.listFiles().containsKey(id)) {
109124
return null;
110125
}
111-
126+
deleteSupplementaryResources(id);
112127
XmlUtils.deleteFiles(ImmutableList.of(id));
113128
XmlUtils.saveFilesStatus();
114129
XmlAnalysisModuleSource.notifyModuleChange();
@@ -187,4 +202,50 @@ private static ITmfConfiguration createConfiguration(File file) {
187202
.setSourceTypeId(XML_ANALYSIS_TYPE_ID);
188203
return builder.build();
189204
}
205+
206+
@SuppressWarnings("null")
207+
private static void deleteSupplementaryResources(String id) {
208+
// Get unique list of analysis IDs
209+
Set<String> analysisIds = new HashSet<>();
210+
analysisIds.addAll(XmlUtils.getAnalysisIdsFromFile(id));
211+
212+
// Delete persistent data of all open traces (this will close the file before deleting it)
213+
for (ITmfTrace trace : TmfTraceManager.getInstance().getOpenedTraces()) {
214+
for (ITmfTrace tr : TmfTraceManager.getTraceSetWithExperiment(trace)) {
215+
analysisIds.forEach(analysisId -> {
216+
IAnalysisModule module = tr.getAnalysisModule(analysisId);
217+
if (module != null) {
218+
module.clearPersistentData();
219+
}
220+
});
221+
}
222+
}
223+
224+
// Delete applicable persistent data of non-opened traces
225+
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
226+
try {
227+
if (project.hasNature(TmfProjectNature.ID)) {
228+
IFolder supplFolder = project.getFolder(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER_NAME);
229+
if (supplFolder != null && supplFolder.exists()) {
230+
supplFolder.accept((IResourceVisitor) resource -> {
231+
if (resource instanceof IFile) {
232+
analysisIds.forEach(analysisId -> {
233+
if (resource.getName().startsWith(analysisId)) {
234+
try {
235+
resource.delete(true, null);
236+
} catch (CoreException e) {
237+
Activator.getInstance().logError("Can't delete supplementary resource " + resource.getName(), e); //$NON-NLS-1$
238+
}
239+
}
240+
});
241+
}
242+
return true;
243+
}, IResource.DEPTH_INFINITE, IResource.NONE);
244+
}
245+
}
246+
} catch (CoreException e) {
247+
Activator.getInstance().logError("Can't delete supplementary resources for XML anlayses", e); //$NON-NLS-1$
248+
}
249+
}
250+
}
190251
}

0 commit comments

Comments
 (0)