Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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<? extends ITmfTreeDataModel> 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<IDataProviderDescriptor> 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<IDataProviderDescriptor> 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<IDataProviderDescriptor> 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<? extends ITmfTreeDataModel> 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<IDataProviderDescriptor> getDescriptors(@NonNull ITmfTrace trace) {
return List.of(new DataProviderDescriptor.Builder()
.setId(myId)
.setName(Objects.requireNonNull(""))
.setDescription(Objects.requireNonNull(""))
.setProviderType(ProviderType.TIME_GRAPH)
.build());
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,28 @@ public <T extends ITmfTreeDataProvider<? extends ITmfTreeDataModel>> 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<ITmfTreeDataProvider<? extends ITmfTreeDataModel>> iter = fInstances.get(trace).iterator();
while (iter.hasNext()) {
ITmfTreeDataProvider<? extends ITmfTreeDataModel> dp = iter.next();
if (dp.getId().equals(id)) {
dp.dispose();
iter.remove();
}
break;
}
}

/**
* Get all registered data provider factories.
*
Expand Down
Loading