X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.charts%2Fsrc%2Forg%2Fsimantics%2Fcharts%2Finternal%2FVariableUtils.java;fp=bundles%2Forg.simantics.charts%2Fsrc%2Forg%2Fsimantics%2Fcharts%2Finternal%2FVariableUtils.java;h=8e321c9b4d057bea7ca9ebee15cef199222642ef;hp=0000000000000000000000000000000000000000;hb=c97b685ff67f795fd8cd7b166ee740d234a577f4;hpb=de86e08dadfd2733d23b3fe2817b27ae835d9f3b diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/internal/VariableUtils.java b/bundles/org.simantics.charts/src/org/simantics/charts/internal/VariableUtils.java new file mode 100644 index 000000000..8e321c9b4 --- /dev/null +++ b/bundles/org.simantics.charts/src/org/simantics/charts/internal/VariableUtils.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2017 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - #7313 + *******************************************************************************/ +package org.simantics.charts.internal; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.simantics.databoard.type.Datatype; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.PossibleActiveVariableFromVariable; +import org.simantics.db.layer0.variable.RVI; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.VariableReference; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.modeling.utils.VariableReferences; + +/** + * @author Tuukka Lehtonen + * @since 1.28.1, 1.29.0 + */ +public class VariableUtils { + + public static Datatype getDatatype(ReadGraph graph, Resource resource, RVI rvi) throws DatabaseException { + Variable configuration = Variables.getConfigurationContext(graph, resource); + Variable active = graph.syncRequest(new PossibleActiveVariableFromVariable(configuration)); + Variable var = rvi.resolve(graph, active != null ? active : configuration); + return var.getDatatype(graph); + } + + /** + * @param graph + * @param targetModel + * @param source + * @return null if the value is valid JSON but does not contain + * a variable reference + * @throws DatabaseException + * if the value fails to resolve as either JSON or an RVI string + */ + public static List getVariableReferencesFromString(ReadGraph graph, Resource targetModel, String source) throws DatabaseException { + try { + // JSON ? + Optional v = JsonUtils.tryParseJsonPropertyVariable(graph, source); + if (v.isPresent()) + return graph.syncRequest(VariableReferences.variablesToReferences(targetModel, Collections.singletonList(v.get()))); + // JSON, but no variable info in it. + return null; + } catch (DatabaseException e) { + // RVI as String? + RVI rvi = RVI.fromResourceFormat(graph, source); + return Collections.singletonList(new VariableReference(rvi, getDatatype(graph, targetModel, rvi), null)); + } + } + +}