|
13 | 13 | import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString; |
14 | 14 |
|
15 | 15 | import java.io.File; |
| 16 | +import java.util.HashSet; |
16 | 17 | import java.util.List; |
17 | 18 | import java.util.Map; |
18 | 19 | import java.util.Map.Entry; |
| 20 | +import java.util.Set; |
19 | 21 | import java.util.concurrent.ConcurrentHashMap; |
20 | 22 |
|
| 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; |
21 | 30 | import org.eclipse.core.runtime.IStatus; |
22 | 31 | import org.eclipse.core.runtime.Path; |
23 | 32 | import org.eclipse.jdt.annotation.NonNull; |
24 | 33 | import org.eclipse.jdt.annotation.Nullable; |
25 | 34 | import org.eclipse.osgi.util.NLS; |
| 35 | +import org.eclipse.tracecompass.internal.analysis.timing.core.Activator; |
26 | 36 | import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlAnalysisModuleSource; |
27 | 37 | 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; |
28 | 41 | import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration; |
29 | 42 | import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSource; |
30 | 43 | import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSourceType; |
31 | 44 | import org.eclipse.tracecompass.tmf.core.config.TmfConfigParamDescriptor; |
32 | 45 | import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration; |
33 | 46 | import org.eclipse.tracecompass.tmf.core.config.TmfConfigurationSourceType; |
34 | 47 | 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; |
35 | 50 |
|
36 | 51 | import com.google.common.collect.ImmutableList; |
37 | 52 |
|
@@ -108,7 +123,7 @@ public ITmfConfiguration update(String id, Map<String, Object> parameters) throw |
108 | 123 | if (!XmlUtils.listFiles().containsKey(id)) { |
109 | 124 | return null; |
110 | 125 | } |
111 | | - |
| 126 | + deleteSupplementaryResources(id); |
112 | 127 | XmlUtils.deleteFiles(ImmutableList.of(id)); |
113 | 128 | XmlUtils.saveFilesStatus(); |
114 | 129 | XmlAnalysisModuleSource.notifyModuleChange(); |
@@ -187,4 +202,50 @@ private static ITmfConfiguration createConfiguration(File file) { |
187 | 202 | .setSourceTypeId(XML_ANALYSIS_TYPE_ID); |
188 | 203 | return builder.build(); |
189 | 204 | } |
| 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 | + } |
190 | 251 | } |
0 commit comments