PropertyParserUtils.java
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com/)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.dynawo.suppliers;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.json.JsonUtil;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
public final class PropertyParserUtils {
private PropertyParserUtils() {
}
public static Property parseProperty(JsonParser parser) {
PropertyBuilder builder = new PropertyBuilder();
JsonUtil.parseObject(parser, name -> {
boolean handled = true;
switch (name) {
case "name" -> builder.name(parser.nextTextValue());
case "value" -> builder.value(parser.nextTextValue());
case "values" -> builder.values(JsonUtil.parseStringArray(parser));
case "arrays" -> parseArrays(parser, builder);
case "type" -> builder.type(PropertyType.valueOf(parser.nextTextValue()));
default -> handled = false;
}
return handled;
});
return builder.build();
}
private static void parseArrays(JsonParser parser, PropertyBuilder builder) throws IOException {
parser.nextToken();
parser.nextToken();
JsonToken token;
List<List<String>> arrays = new ArrayList<>();
List<String> values = new ArrayList<>();
while ((token = parser.nextToken()) != null) {
if (token == JsonToken.VALUE_STRING) {
values.add(parser.getText());
} else if (token == JsonToken.END_ARRAY) {
arrays.add(values);
JsonToken next = parser.nextToken();
if (next == JsonToken.END_ARRAY) {
builder.arrays(arrays);
break;
} else if (next == JsonToken.START_ARRAY) {
values = new ArrayList<>();
} else {
throw new PowsyblException("Unexpected token " + next);
}
} else {
throw new PowsyblException("Unexpected token " + token);
}
}
}
}