From c20d8a41d8c8679493d4af9711f6ae93cfcf27ea Mon Sep 17 00:00:00 2001 From: Patrick Tasse Date: Thu, 9 Oct 2025 16:12:42 +0200 Subject: [PATCH] tmf: Add generic object data provider Add IObjectDataProvider interface that returns an ObjectModel with a generic object, and optional next and previous navigation parameters. Add DATA provider type. Add selectionRange to IDataProviderCapabilities. Signed-off-by: Patrick Tasse --- .../META-INF/MANIFEST.MF | 1 + .../IDataProviderCapabilities.java | 19 +++- .../dataprovider/IDataProviderDescriptor.java | 7 +- .../core/model/DataProviderCapabilities.java | 22 +++++ .../model/object/IObjectDataProvider.java | 29 +++++++ .../tmf/core/model/object/ObjectModel.java | 87 +++++++++++++++++++ .../tmf/core/model/object/package-info.java | 13 +++ 7 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/IObjectDataProvider.java create mode 100644 tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/ObjectModel.java create mode 100644 tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/package-info.java diff --git a/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF b/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF index c5da23c203..276091daa4 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF +++ b/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF @@ -109,6 +109,7 @@ Export-Package: org.eclipse.tracecompass.internal.provisional.tmf.core.model, org.eclipse.tracecompass.tmf.core.model.annotations, org.eclipse.tracecompass.tmf.core.model.filters, org.eclipse.tracecompass.tmf.core.model.genericxy, + org.eclipse.tracecompass.tmf.core.model.object, org.eclipse.tracecompass.tmf.core.model.timegraph, org.eclipse.tracecompass.tmf.core.model.tree, org.eclipse.tracecompass.tmf.core.model.xy, diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderCapabilities.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderCapabilities.java index 4919c50c35..7e108b07cb 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderCapabilities.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderCapabilities.java @@ -15,14 +15,18 @@ /** * Interface to implement to indicate capabilities of a data provider, such as * "canCreate" and "canDelete" capability. - * + *

* "canCreate" indicates that a given data provider can create a derived data * provider. "canDelete" indicates that a given data provider can be deleted. - * + *

* Call method {@link IDataProviderFactory#getAdapter(Class)} with class * {@link ITmfDataProviderConfigurator} to obtain an instance of * {@link ITmfDataProviderConfigurator}, which implements the "canCreate" and * "canDelete" capabilities. + *

+ * "selectionRange" indicates that a given data provider can use the selection + * range to compute its data. Clients should include the selection range in + * query parameters and refresh the data when the selection range changes. * * @since 9.6 * @author Bernd Hufmann @@ -43,4 +47,15 @@ public interface IDataProviderCapabilities { * {@code false} */ boolean canDelete(); + + /** + * Whether the data provider uses the selection range. + * + * @return {@code true} if this data provider uses the selection range, else + * {@code false} + * @since 10.2 + */ + default boolean selectionRange() { + return false; + } } diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderDescriptor.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderDescriptor.java index 080f701989..64aa328b7c 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderDescriptor.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderDescriptor.java @@ -78,7 +78,12 @@ public enum ProviderType { * A provider for generic xy charts with a time-less x-axis * @since 10.1 */ - TREE_GENERIC_XY + TREE_GENERIC_XY, + /** + * A provider of generic data objects + * @since 10.2 + */ + DATA } /** diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/DataProviderCapabilities.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/DataProviderCapabilities.java index 80079b49e9..e332ed5857 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/DataProviderCapabilities.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/DataProviderCapabilities.java @@ -29,6 +29,7 @@ public class DataProviderCapabilities implements IDataProviderCapabilities { private final boolean canCreate; private final boolean canDelete; + private final boolean selectionRange; /** * Constructor @@ -39,6 +40,7 @@ public class DataProviderCapabilities implements IDataProviderCapabilities { public DataProviderCapabilities(Builder builder) { canCreate = builder.canCreate; canDelete = builder.canDelete; + selectionRange = builder.selectionRange; } @Override @@ -51,6 +53,11 @@ public boolean canDelete() { return canDelete; } + @Override + public boolean selectionRange() { + return selectionRange; + } + @Override @SuppressWarnings("nls") public String toString() { @@ -84,6 +91,7 @@ public boolean equals(@Nullable Object obj) { public static class Builder { private boolean canCreate = false; private boolean canDelete = false; + private boolean selectionRange = false; /** * Sets canCreate flag @@ -111,6 +119,20 @@ public Builder setCanDelete(boolean canDelete) { return this; } + /** + * Sets selectionRange flag + * + * @param selectionRange + * {@code true} if this data provider uses the selection + * range, else {@code false} + * @return the builder instance. + * @since 10.2 + */ + public Builder setSelectionRange(boolean selectionRange) { + this.selectionRange = selectionRange; + return this; + } + /** * The method to construct an instance of * {@link IDataProviderCapabilities} diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/IObjectDataProvider.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/IObjectDataProvider.java new file mode 100644 index 0000000000..adc26f1209 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/IObjectDataProvider.java @@ -0,0 +1,29 @@ +package org.eclipse.tracecompass.tmf.core.model.object; + +import java.util.Map; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.tracecompass.tmf.core.model.ITmfDataProvider; +import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse; + +/** + * Interface for a data provider that returns a generic object as model + * + * @since 10.2 + */ +public interface IObjectDataProvider extends ITmfDataProvider { + + /** + * This method computes a generic object model. Then, it returns a + * {@link TmfModelResponse} that contains the model. + * + * @param fetchParameters + * Map of parameters that can be used to compute result object + * @param monitor + * A ProgressMonitor to cancel task + * @return A {@link TmfModelResponse} instance + */ + public TmfModelResponse fetchData(Map fetchParameters, @Nullable IProgressMonitor monitor); + +} diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/ObjectModel.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/ObjectModel.java new file mode 100644 index 0000000000..e6ef024742 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/ObjectModel.java @@ -0,0 +1,87 @@ +/********************************************************************** + * Copyright (c) 2025 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License 2.0 which + * accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + **********************************************************************/ + +package org.eclipse.tracecompass.tmf.core.model.object; + +import org.eclipse.jdt.annotation.Nullable; + +/** + * Represents a generic object with optional navigation parameters. + *

+ * If the object is a partial subdivision of the full object, then the optional + * next and previous navigation parameter objects can be set, and later returned + * as query parameters to get the following or preceding subdivision. + * + * @since 10.2 + */ +public class ObjectModel { + + private final Object fObject; + private @Nullable Object fNext; + private @Nullable Object fPrevious; + + /** + * Constructor + * + * @param object + * the generic object represented by this model + */ + public ObjectModel(Object object) { + fObject = object; + } + + /** + * Get the generic object represented by this model + * + * @return the object + */ + public Object getObject() { + return fObject; + } + + /** + * Get the next navigation parameter object + * + * @return the next navigation parameter object + */ + public @Nullable Object getNext() { + return fNext; + } + + /** + * Get the previous navigation parameter object + * + * @return the previous navigation parameter object + */ + public @Nullable Object getPrevious() { + return fPrevious; + } + + /** + * Set the next navigation parameter object + * + * @param next + * the next navigation parameter object + */ + public void setNext(Object next) { + fNext = next; + } + + /** + * Set the previous navigation parameter object + * + * @param previous + * the previous navigation parameter object + */ + public void setPrevious(Object previous) { + fPrevious = previous; + } +} diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/package-info.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/package-info.java new file mode 100644 index 0000000000..136938f044 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/object/package-info.java @@ -0,0 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2025 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License 2.0 which + * accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +@org.eclipse.jdt.annotation.NonNullByDefault +package org.eclipse.tracecompass.tmf.core.model.object;