From 9178a5eb40aa68424b21615f8a6bf5f1aeb1e052 Mon Sep 17 00:00:00 2001 From: Tuukka Lehtonen <tuukka.lehtonen@semantum.fi> Date: Wed, 5 Mar 2025 22:59:04 +0000 Subject: [PATCH] Support resolving components referenced by chart items from experiment Previously all RVI -> Variable resolution was performed through the configuration context which naturally doesn't work for entities that only exist in an experiment context. The editor still performs the default action on the first parent variable's resource representation that has one. gitlab #1250 (cherry picked from commit 61450d357063abd027db92e765c4f5c5248dd058) Co-authored-by: Tuukka Lehtonen <tuukka.lehtonen@semantum.fi> --- .../charts/editor/TimeSeriesEditor.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/editor/TimeSeriesEditor.java b/bundles/org.simantics.charts/src/org/simantics/charts/editor/TimeSeriesEditor.java index a36f10f0c..946693d25 100644 --- a/bundles/org.simantics.charts/src/org/simantics/charts/editor/TimeSeriesEditor.java +++ b/bundles/org.simantics.charts/src/org/simantics/charts/editor/TimeSeriesEditor.java @@ -59,16 +59,17 @@ import org.simantics.charts.query.TrendSpecQuery; import org.simantics.charts.ui.ChartLinkData; import org.simantics.charts.ui.LinkTimeHandler; import org.simantics.databoard.Bindings; -import org.simantics.databoard.binding.error.BindingException; import org.simantics.databoard.util.ObjectUtils; import org.simantics.db.AsyncReadGraph; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.common.request.ParametrizedRead; +import org.simantics.db.common.request.PossibleIndexRoot; import org.simantics.db.common.request.UniqueRead; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.Model; +import org.simantics.db.layer0.request.PossibleActiveExperiment; import org.simantics.db.layer0.request.combinations.Combinators; import org.simantics.db.layer0.variable.RVI; import org.simantics.db.layer0.variable.RVIBuilder; @@ -699,15 +700,34 @@ public class TimeSeriesEditor extends ResourceEditorPart { protected Resource resolveReferencedComponent(IResourceEditorInput resourceInput, final String variableId) { try { return getSession().sync(new UniqueRead<Resource>() { + private Resource findFirstParentRepresentation(ReadGraph graph, Variable var) throws DatabaseException { + while (var != null) { + Resource rep = var.getPossibleRepresents(graph); + if (rep != null) + return rep; + var = var.getParent(graph); + } + return null; + } + @Override public Resource perform(ReadGraph graph) throws DatabaseException { - Variable configuration = Variables.getConfigurationContext(graph, getInputResource()); + Resource input = getInputResource(); + Resource root = graph.syncRequest(new PossibleIndexRoot(input)); + if (root == null) + return null; + + Variable configuration = Variables.getConfigurationContext(graph, root); + Resource run = graph.sync(new PossibleActiveExperiment(model)); + Variable experimentContext = run != null ? Variables.getPossibleVariable(graph, run) : null; + RVI rvi = RVI.fromResourceFormat(graph, variableId); rvi = new RVIBuilder(rvi).removeFromFirstRole(Role.PROPERTY).toRVI(); if (rvi.isEmpty()) return null; - Variable var = rvi.resolve(graph, configuration); - return var.getPossibleRepresents(graph); + + Variable var = rvi.resolve(graph, experimentContext != null ? experimentContext : configuration); + return findFirstParentRepresentation(graph, var); } }); } catch (DatabaseException e) { -- GitLab