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 47151a3722..85aad4fe23 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 @@ -17,6 +17,7 @@ import static org.junit.Assert.assertTrue; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; @@ -31,6 +32,8 @@ import org.eclipse.tracecompass.lttng2.ust.core.tests.shared.LttngUstTestTraceUtils; import org.eclipse.tracecompass.lttng2.ust.core.trace.LttngUstTrace; import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace; +import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration; +import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration; import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager; import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor; import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType; @@ -63,6 +66,14 @@ public class DataProviderManagerTest { private static final Set EXPECTED_UST_DP_DESCRIPTORS = new HashSet<>(); private static final String SEGMENTSTORE_SCATTER_FUTEX_DP_ID = "org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.scatter.dataprovider:lttng.analysis.futex"; + private static final String PATH = "/tmp/my-test.xml"; + private static final String ID = "my-test.xml"; + private static final String DESC = "descriptor"; + private static final String SOURCE_ID = "my-source-id"; + + private static ITmfConfiguration sfCconfig; + private static ITmfConfiguration sfCconfig2; + private static final String CPU_USAGE_DP_ID = "org.eclipse.tracecompass.analysis.os.linux.core.cpuusage.CpuUsageDataProvider"; static { @@ -350,6 +361,16 @@ public static void init() { TmfTraceOpenedSignal openTraceSignal = new TmfTraceOpenedSignal(fExperiment, fExperiment, null); TmfSignalManager.dispatchSignal(openTraceSignal); fExperiment.indexTrace(true); + + TmfConfiguration.Builder builder = new TmfConfiguration.Builder() + .setName(PATH) + .setId(ID) + .setDescription(DESC) + .setSourceTypeId(SOURCE_ID) + .setParameters(Collections.emptyMap()); + sfCconfig = builder.build(); + builder.setSourceTypeId(SOURCE_ID + "-1"); + sfCconfig2 = builder.build(); } /** @@ -467,6 +488,10 @@ public void testRemoveDataProviderMethods() { ITimeGraphDataProvider dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class); assertNotNull(dp); + List configDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace, sfCconfig); + assertEquals(1, configDescriptors.size()); + assertEquals(myId, configDescriptors.get(0).getId()); + // test remove by ID DataProviderManager.getInstance().removeDataProvider(trace, myId); assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class)); @@ -501,12 +526,17 @@ private static IDataProviderFactory createCustomFactory(@NonNull String myId) { @SuppressWarnings("null") @Override public @NonNull Collection getDescriptors(@NonNull ITmfTrace trace) { - return List.of(new DataProviderDescriptor.Builder() + DataProviderDescriptor.Builder builder = new DataProviderDescriptor.Builder() .setId(myId) .setName(Objects.requireNonNull("")) .setDescription(Objects.requireNonNull("")) .setProviderType(ProviderType.TIME_GRAPH) - .build()); + .setConfiguration(sfCconfig); + IDataProviderDescriptor desc1 = builder.build(); + builder.setId(myId + "-1"); + builder.setConfiguration(sfCconfig2); + IDataProviderDescriptor desc2 = builder.build(); + return List.of(desc1, desc2); } }; } 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 841091e650..0380ad8576 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 @@ -27,6 +27,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -43,6 +44,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.internal.tmf.core.Activator; import org.eclipse.tracecompass.tmf.core.component.DataProviderConstants; +import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration; import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel; import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; @@ -307,11 +309,39 @@ public List getAvailableProviders(@Nullable ITmfTrace t if (trace == null) { return Collections.emptyList(); } + return getAvailableProviders(trace, desc -> true); + } + + /** + * Get the list of available providers for this trace / experiment without + * triggering the analysis or creating the provider + * + * @param trace + * queried trace + * @param configuration + * a configuration used to create data providers (and descriptors) + * @return list of the available providers for this trace / experiment + * @since 9.7 + */ + public List getAvailableProviders(@Nullable ITmfTrace trace, @Nullable ITmfConfiguration configuration) { + if (trace == null || configuration == null) { + return Collections.emptyList(); + } + Predicate predicate = desc -> { + ITmfConfiguration cfg = desc.getConfiguration(); + return cfg != null && + cfg.getSourceTypeId().equals(configuration.getSourceTypeId()) && + cfg.getId().equals(configuration.getId()); + }; + return getAvailableProviders(trace, predicate); + } + + private List getAvailableProviders(@NonNull ITmfTrace trace, @NonNull Predicate predicate) { List list = new ArrayList<>(); for (IDataProviderFactory factory : fDataProviderFactories.values()) { Collection descriptors = factory.getDescriptors(trace); for (IDataProviderDescriptor descriptor : descriptors) { - if (!isHidden(descriptor.getId(), trace)) { + if (!isHidden(descriptor.getId(), trace) && predicate.test(descriptor)) { list.add(descriptor); } }