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%2FJsonUtils.java;fp=bundles%2Forg.simantics.charts%2Fsrc%2Forg%2Fsimantics%2Fcharts%2Finternal%2FJsonUtils.java;h=31861ea274bb45a40f4df85d88acbf7142c6408c;hp=0000000000000000000000000000000000000000;hb=777f66ad0fc587dd8d313705442dd2338c65ad30;hpb=8a847992137e9da5922f12d9f70273e65d77fe8d diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/internal/JsonUtils.java b/bundles/org.simantics.charts/src/org/simantics/charts/internal/JsonUtils.java new file mode 100644 index 000000000..31861ea27 --- /dev/null +++ b/bundles/org.simantics.charts/src/org/simantics/charts/internal/JsonUtils.java @@ -0,0 +1,71 @@ +package org.simantics.charts.internal; + +import java.io.IOException; +import java.util.Optional; + +import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; +import org.simantics.db.common.request.UniqueRead; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; + +/** + * @author Tuukka Lehtonen + * + */ +public class JsonUtils { + + public static Optional tryParseJsonPropertyVariable(RequestProcessor processor, String json) throws DatabaseException { + return processor.syncRequest(new UniqueRead>() { + @Override + public Optional perform(ReadGraph graph) throws DatabaseException { + return tryParseJsonPropertyVariable(graph, json); + } + }); + } + + public static Optional tryParseJsonPropertyVariable(ReadGraph graph, String json) throws DatabaseException { + try (JsonParser jp = new JsonFactory().createParser(json)) { + return JsonUtils.readPossibleVariable(graph, jp); + } catch (IOException e) { + throw new DatabaseException(e); + } + } + + public static Optional readPossibleVariable(ReadGraph graph, JsonParser jp) throws IOException, DatabaseException { + Optional uri = readPossibleVariableUri(jp); + return uri.isPresent() ? Optional.ofNullable(Variables.getPossibleVariable(graph, uri.get())) : Optional.empty(); + } + + public static Optional readPossibleVariableUri(JsonParser jp) throws IOException { + // Sanity check: verify that we got "Json Object": + if (jp.nextToken() != JsonToken.START_OBJECT) + throw new IOException("Expected data to start with an Object"); + + String uri = null; + String type = null; + String defaultPropertyUri = null; + + while (jp.nextToken() != JsonToken.END_OBJECT) { + String fieldName = jp.getCurrentName(); + jp.nextToken(); + if (fieldName.equals("uri")) { + uri = jp.getValueAsString(); + } else if (fieldName.equals("type")) { + type = jp.getValueAsString(); + } else if (fieldName.equals("defaultPropertyUri")) { + defaultPropertyUri = jp.getValueAsString(); + } + } + + return Optional.ofNullable("Variable".equals(type) ? + defaultPropertyUri != null ? defaultPropertyUri : uri + : null); + } + +}