Skip to content

Commit 37097a0

Browse files
committed
tmf: Add API to remove data provider instance from dp manager
fixe #253. [Added] API to remove data provider instance from dp manager Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 263f711 commit 37097a0

File tree

2 files changed

+99
-44
lines changed
  • releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders
  • tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider

2 files changed

+99
-44
lines changed

releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java

Lines changed: 77 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@
5151
import org.junit.BeforeClass;
5252
import org.junit.Test;
5353

54-
import com.google.common.collect.ImmutableList;
55-
5654
/**
5755
* Unit test for testing the data provider manager.
5856
*/
@@ -431,50 +429,85 @@ public void testFactoryMethods() {
431429
assertEquals(1, count);
432430
}
433431

434-
/**
435-
* Test different add/remove methods
436-
*/
437-
@Test
438-
public void testAddRemoveFactoryMethods() {
439-
String myId = "my-id";
440-
IDataProviderFactory testFactory = new IDataProviderFactory() {
441-
@Override
442-
public @Nullable ITmfTreeDataProvider<? extends ITmfTreeDataModel> createProvider(@NonNull ITmfTrace trace) {
432+
/**
433+
* Test different factory add/remove methods
434+
*/
435+
@SuppressWarnings("unchecked")
436+
@Test
437+
public void testAddRemoveFactoryMethods() {
438+
String myId = "my-id";
439+
IDataProviderFactory testFactory = createCustomFactory(myId);
440+
ITmfTrace trace = fKernelTrace;
441+
assertNotNull(trace);
442+
DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory);
443+
assertEquals(testFactory, DataProviderManager.getInstance().getFactory(myId));
444+
List<IDataProviderDescriptor> kernelDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace);
445+
assertEquals(1, kernelDescriptors.stream().filter(desc -> desc.getId().equals(myId)).count());
443446

444-
KernelAnalysisModule module = TmfTraceUtils.getAnalysisModuleOfClass(trace, KernelAnalysisModule.class, KernelAnalysisModule.ID);
445-
if (module != null) {
446-
return new ThreadStatusDataProvider(trace, module) {
447-
@Override
448-
public @NonNull String getId() {
449-
return myId;
450-
}
451-
};
452-
}
447+
ITimeGraphDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
448+
assertNotNull(dp);
453449

454-
return null;
455-
}
456-
@Override
457-
public @NonNull Collection<IDataProviderDescriptor> getDescriptors(@NonNull ITmfTrace trace) {
458-
return ImmutableList.of(new DataProviderDescriptor.Builder()
459-
.setId(myId)
460-
.setName(Objects.requireNonNull(""))
461-
.setDescription(Objects.requireNonNull(""))
462-
.setProviderType(ProviderType.TIME_GRAPH)
463-
.build());
464-
}
465-
};
466-
ITmfTrace trace = fKernelTrace;
467-
assertNotNull(trace);
468-
DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory);
469-
assertEquals(testFactory, DataProviderManager.getInstance().getFactory(myId));
470-
List<IDataProviderDescriptor> kernelDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace);
471-
assertEquals(1, kernelDescriptors.stream().filter(desc -> desc.getId().equals(myId)).count());
450+
DataProviderManager.getInstance().removeDataProviderFactory(myId);
451+
assertNull(DataProviderManager.getInstance().getFactory(myId));
452+
assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class));
453+
}
472454

473-
@SuppressWarnings("unchecked")
474-
ITimeGraphDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
475-
assertNotNull(dp);
455+
/**
456+
* Test different data provider add/remove methods
457+
*/
458+
@SuppressWarnings("unchecked")
459+
@Test
460+
public void testRemoveDataProviderMethods() {
461+
String myId = "my-id";
462+
IDataProviderFactory testFactory = createCustomFactory(myId);
463+
ITmfTrace trace = fKernelTrace;
464+
assertNotNull(trace);
465+
DataProviderManager.getInstance().addDataProviderFactory(myId, testFactory);
466+
467+
ITimeGraphDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
468+
assertNotNull(dp);
469+
470+
// test remove by ID
471+
DataProviderManager.getInstance().removeDataProvider(trace, myId);
472+
assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class));
473+
474+
// test remove by dp instance
475+
dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
476+
assertNotNull(dp);
476477

477-
DataProviderManager.getInstance().removeDataProviderFactory(myId);
478-
assertNull(DataProviderManager.getInstance().getFactory(myId));
479-
}
478+
assertTrue(DataProviderManager.getInstance().removeDataProvider(trace, dp));
479+
assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class));
480+
DataProviderManager.getInstance().removeDataProviderFactory(myId);
481+
}
482+
483+
private static IDataProviderFactory createCustomFactory(@NonNull String myId) {
484+
return new IDataProviderFactory() {
485+
@SuppressWarnings("restriction")
486+
@Override
487+
public @Nullable ITmfTreeDataProvider<? extends ITmfTreeDataModel> createProvider(@NonNull ITmfTrace trace) {
488+
489+
KernelAnalysisModule module = TmfTraceUtils.getAnalysisModuleOfClass(trace, KernelAnalysisModule.class, KernelAnalysisModule.ID);
490+
if (module != null) {
491+
return new ThreadStatusDataProvider(trace, module) {
492+
@Override
493+
public @NonNull String getId() {
494+
return myId;
495+
}
496+
};
497+
}
498+
return null;
499+
}
500+
501+
@SuppressWarnings("null")
502+
@Override
503+
public @NonNull Collection<IDataProviderDescriptor> getDescriptors(@NonNull ITmfTrace trace) {
504+
return List.of(new DataProviderDescriptor.Builder()
505+
.setId(myId)
506+
.setName(Objects.requireNonNull(""))
507+
.setDescription(Objects.requireNonNull(""))
508+
.setProviderType(ProviderType.TIME_GRAPH)
509+
.build());
510+
}
511+
};
512+
}
480513
}

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/DataProviderManager.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,28 @@ public <T extends ITmfTreeDataProvider<? extends ITmfTreeDataModel>> boolean rem
361361
return fInstances.remove(trace, provider);
362362
}
363363

364+
/**
365+
* Remove a data provider from the instances by Id. This method will also dispose
366+
* the data provider.
367+
*
368+
* @param trace
369+
* The trace for which to remove the data provider
370+
* @param id
371+
* The id of the data provider to remove
372+
* @since 9.6
373+
*/
374+
public void removeDataProvider(ITmfTrace trace, String id) {
375+
Iterator<ITmfTreeDataProvider<? extends ITmfTreeDataModel>> iter = fInstances.get(trace).iterator();
376+
while (iter.hasNext()) {
377+
ITmfTreeDataProvider<? extends ITmfTreeDataModel> dp = iter.next();
378+
if (dp.getId().equals(id)) {
379+
dp.dispose();
380+
iter.remove();
381+
}
382+
break;
383+
}
384+
}
385+
364386
/**
365387
* Get all registered data provider factories.
366388
*

0 commit comments

Comments
 (0)