diff --git a/releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java b/releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java index 3c5489a5f2..47151a3722 100644 --- a/releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java +++ b/releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java @@ -51,8 +51,6 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.google.common.collect.ImmutableList; - /** * Unit test for testing the data provider manager. */ @@ -431,50 +429,85 @@ public void testFactoryMethods() { assertEquals(1, count); } - /** - * Test different add/remove methods - */ - @Test - public void testAddRemoveFactoryMethods() { - String myId = "my-id"; - IDataProviderFactory testFactory = new IDataProviderFactory() { - @Override - public @Nullable ITmfTreeDataProvider createProvider(@NonNull ITmfTrace trace) { + /** + * Test different factory add/remove methods + */ + @SuppressWarnings("unchecked") + @Test + public void testAddRemoveFactoryMethods() { + String myId = "my-id"; + IDataProviderFactory testFactory = createCustomFactory(myId); + ITmfTrace trace = fKernelTrace; + assertNotNull(trace); + DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory); + assertEquals(testFactory, DataProviderManager.getInstance().getFactory(myId)); + List kernelDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace); + assertEquals(1, kernelDescriptors.stream().filter(desc -> desc.getId().equals(myId)).count()); - KernelAnalysisModule module = TmfTraceUtils.getAnalysisModuleOfClass(trace, KernelAnalysisModule.class, KernelAnalysisModule.ID); - if (module != null) { - return new ThreadStatusDataProvider(trace, module) { - @Override - public @NonNull String getId() { - return myId; - } - }; - } + ITimeGraphDataProvider dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class); + assertNotNull(dp); - return null; - } - @Override - public @NonNull Collection getDescriptors(@NonNull ITmfTrace trace) { - return ImmutableList.of(new DataProviderDescriptor.Builder() - .setId(myId) - .setName(Objects.requireNonNull("")) - .setDescription(Objects.requireNonNull("")) - .setProviderType(ProviderType.TIME_GRAPH) - .build()); - } - }; - ITmfTrace trace = fKernelTrace; - assertNotNull(trace); - DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory); - assertEquals(testFactory, DataProviderManager.getInstance().getFactory(myId)); - List kernelDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace); - assertEquals(1, kernelDescriptors.stream().filter(desc -> desc.getId().equals(myId)).count()); + DataProviderManager.getInstance().removeDataProviderFactory(myId); + assertNull(DataProviderManager.getInstance().getFactory(myId)); + assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class)); + } - @SuppressWarnings("unchecked") - ITimeGraphDataProvider dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class); - assertNotNull(dp); + /** + * Test different data provider add/remove methods + */ + @SuppressWarnings("unchecked") + @Test + public void testRemoveDataProviderMethods() { + String myId = "my-id"; + IDataProviderFactory testFactory = createCustomFactory(myId); + ITmfTrace trace = fKernelTrace; + assertNotNull(trace); + DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory); + + ITimeGraphDataProvider dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class); + assertNotNull(dp); + + // test remove by ID + DataProviderManager.getInstance().removeDataProvider(trace, myId); + assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class)); + + // test remove by dp instance + dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class); + assertNotNull(dp); - DataProviderManager.getInstance().removeDataProviderFactory(myId); - assertNull(DataProviderManager.getInstance().getFactory(myId)); - } + assertTrue(DataProviderManager.getInstance().removeDataProvider(trace, dp)); + assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class)); + DataProviderManager.getInstance().removeDataProviderFactory(myId); + } + + private static IDataProviderFactory createCustomFactory(@NonNull String myId) { + return new IDataProviderFactory() { + @SuppressWarnings("restriction") + @Override + public @Nullable ITmfTreeDataProvider createProvider(@NonNull ITmfTrace trace) { + + KernelAnalysisModule module = TmfTraceUtils.getAnalysisModuleOfClass(trace, KernelAnalysisModule.class, KernelAnalysisModule.ID); + if (module != null) { + return new ThreadStatusDataProvider(trace, module) { + @Override + public @NonNull String getId() { + return myId; + } + }; + } + return null; + } + + @SuppressWarnings("null") + @Override + public @NonNull Collection getDescriptors(@NonNull ITmfTrace trace) { + return List.of(new DataProviderDescriptor.Builder() + .setId(myId) + .setName(Objects.requireNonNull("")) + .setDescription(Objects.requireNonNull("")) + .setProviderType(ProviderType.TIME_GRAPH) + .build()); + } + }; + } } diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/DataProviderManager.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/DataProviderManager.java index a00824dfaf..726ef6a489 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/DataProviderManager.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/DataProviderManager.java @@ -361,6 +361,28 @@ public > boolean rem return fInstances.remove(trace, provider); } + /** + * Remove a data provider from the instances by Id. This method will also dispose + * the data provider. + * + * @param trace + * The trace for which to remove the data provider + * @param id + * The id of the data provider to remove + * @since 9.6 + */ + public void removeDataProvider(ITmfTrace trace, String id) { + Iterator> iter = fInstances.get(trace).iterator(); + while (iter.hasNext()) { + ITmfTreeDataProvider dp = iter.next(); + if (dp.getId().equals(id)) { + dp.dispose(); + iter.remove(); + } + break; + } + } + /** * Get all registered data provider factories. *