Skip to content

Commit 1e25ba4

Browse files
committed
tmf: Add API DataProviderManager.getAvailableProviders(trace, config)
This allows to get all derived data providers created by a configuration. [Added] API DataProviderManager.getAvailableProviders(trace, config) Signed-off-by: Bernd Hufmann <[email protected]>
1 parent f928038 commit 1e25ba4

File tree

2 files changed

+63
-3
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

+63
-3
lines changed

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import static org.junit.Assert.assertTrue;
1818

1919
import java.util.Collection;
20+
import java.util.Collections;
2021
import java.util.HashSet;
2122
import java.util.List;
2223
import java.util.Objects;
@@ -31,6 +32,8 @@
3132
import org.eclipse.tracecompass.lttng2.ust.core.tests.shared.LttngUstTestTraceUtils;
3233
import org.eclipse.tracecompass.lttng2.ust.core.trace.LttngUstTrace;
3334
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
35+
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
36+
import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration;
3437
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
3538
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
3639
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
@@ -63,6 +66,14 @@ public class DataProviderManagerTest {
6366
private static final Set<IDataProviderDescriptor> EXPECTED_UST_DP_DESCRIPTORS = new HashSet<>();
6467
private static final String SEGMENTSTORE_SCATTER_FUTEX_DP_ID = "org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.scatter.dataprovider:lttng.analysis.futex";
6568

69+
private static final String PATH = "/tmp/my-test.xml";
70+
private static final String ID = "my-test.xml";
71+
private static final String DESC = "descriptor";
72+
private static final String SOURCE_ID = "my-source-id";
73+
74+
private static ITmfConfiguration sfCconfig;
75+
private static ITmfConfiguration sfCconfig2;
76+
6677
private static final String CPU_USAGE_DP_ID = "org.eclipse.tracecompass.analysis.os.linux.core.cpuusage.CpuUsageDataProvider";
6778

6879
static {
@@ -350,6 +361,16 @@ public static void init() {
350361
TmfTraceOpenedSignal openTraceSignal = new TmfTraceOpenedSignal(fExperiment, fExperiment, null);
351362
TmfSignalManager.dispatchSignal(openTraceSignal);
352363
fExperiment.indexTrace(true);
364+
365+
TmfConfiguration.Builder builder = new TmfConfiguration.Builder()
366+
.setName(PATH)
367+
.setId(ID)
368+
.setDescription(DESC)
369+
.setSourceTypeId(SOURCE_ID)
370+
.setParameters(Collections.emptyMap());
371+
sfCconfig = builder.build();
372+
builder.setSourceTypeId(SOURCE_ID + "-1");
373+
sfCconfig2 = builder.build();
353374
}
354375

355376
/**
@@ -467,6 +488,10 @@ public void testRemoveDataProviderMethods() {
467488
ITimeGraphDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
468489
assertNotNull(dp);
469490

491+
List<IDataProviderDescriptor> configDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace, sfCconfig);
492+
assertEquals(1, configDescriptors.size());
493+
assertEquals(myId, configDescriptors.get(0).getId());
494+
470495
// test remove by ID
471496
DataProviderManager.getInstance().removeDataProvider(trace, myId);
472497
assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class));
@@ -501,12 +526,17 @@ private static IDataProviderFactory createCustomFactory(@NonNull String myId) {
501526
@SuppressWarnings("null")
502527
@Override
503528
public @NonNull Collection<IDataProviderDescriptor> getDescriptors(@NonNull ITmfTrace trace) {
504-
return List.of(new DataProviderDescriptor.Builder()
529+
DataProviderDescriptor.Builder builder = new DataProviderDescriptor.Builder()
505530
.setId(myId)
506531
.setName(Objects.requireNonNull(""))
507532
.setDescription(Objects.requireNonNull(""))
508533
.setProviderType(ProviderType.TIME_GRAPH)
509-
.build());
534+
.setConfiguration(sfCconfig);
535+
IDataProviderDescriptor desc1 = builder.build();
536+
builder.setId(myId + "-1");
537+
builder.setConfiguration(sfCconfig2);
538+
IDataProviderDescriptor desc2 = builder.build();
539+
return List.of(desc1, desc2);
510540
}
511541
};
512542
}

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Iterator;
2828
import java.util.List;
2929
import java.util.Map;
30+
import java.util.function.Predicate;
3031
import java.util.regex.Matcher;
3132
import java.util.regex.Pattern;
3233
import java.util.regex.PatternSyntaxException;
@@ -43,6 +44,7 @@
4344
import org.eclipse.jdt.annotation.Nullable;
4445
import org.eclipse.tracecompass.internal.tmf.core.Activator;
4546
import org.eclipse.tracecompass.tmf.core.component.DataProviderConstants;
47+
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
4648
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel;
4749
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
4850
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
@@ -307,11 +309,39 @@ public List<IDataProviderDescriptor> getAvailableProviders(@Nullable ITmfTrace t
307309
if (trace == null) {
308310
return Collections.emptyList();
309311
}
312+
return getAvailableProviders(trace, desc -> true);
313+
}
314+
315+
/**
316+
* Get the list of available providers for this trace / experiment without
317+
* triggering the analysis or creating the provider
318+
*
319+
* @param trace
320+
* queried trace
321+
* @param configuration
322+
* a configuration used to create data providers (and descriptors)
323+
* @return list of the available providers for this trace / experiment
324+
* @since 9.7
325+
*/
326+
public List<IDataProviderDescriptor> getAvailableProviders(@Nullable ITmfTrace trace, @Nullable ITmfConfiguration configuration) {
327+
if (trace == null || configuration == null) {
328+
return Collections.emptyList();
329+
}
330+
Predicate<IDataProviderDescriptor> predicate = desc -> {
331+
ITmfConfiguration cfg = desc.getConfiguration();
332+
return cfg != null &&
333+
cfg.getSourceTypeId().equals(configuration.getSourceTypeId()) &&
334+
cfg.getId().equals(configuration.getId());
335+
};
336+
return getAvailableProviders(trace, predicate);
337+
}
338+
339+
private List<IDataProviderDescriptor> getAvailableProviders(@NonNull ITmfTrace trace, @NonNull Predicate<IDataProviderDescriptor> predicate) {
310340
List<IDataProviderDescriptor> list = new ArrayList<>();
311341
for (IDataProviderFactory factory : fDataProviderFactories.values()) {
312342
Collection<IDataProviderDescriptor> descriptors = factory.getDescriptors(trace);
313343
for (IDataProviderDescriptor descriptor : descriptors) {
314-
if (!isHidden(descriptor.getId(), trace)) {
344+
if (!isHidden(descriptor.getId(), trace) && predicate.test(descriptor)) {
315345
list.add(descriptor);
316346
}
317347
}

0 commit comments

Comments
 (0)