[Fix] Sort Parameters in StrolchElementToJsonVisitor by their index

This commit is contained in:
Robert von Burg 2020-03-25 11:31:22 +01:00
parent 6785c54cd5
commit 2b84df3c39
1 changed files with 7 additions and 11 deletions

View File

@ -1,6 +1,7 @@
package li.strolch.model.json; package li.strolch.model.json;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.Comparator.comparing;
import static li.strolch.model.Tags.Json.PARAMETER_BAGS; import static li.strolch.model.Tags.Json.PARAMETER_BAGS;
import static li.strolch.utils.helper.StringHelper.isNotEmpty; import static li.strolch.utils.helper.StringHelper.isNotEmpty;
@ -582,21 +583,18 @@ public class StrolchElementToJsonVisitor implements StrolchElementVisitor<JsonEl
} }
private void addParameterBagFlat(JsonObject rootJ, Set<String> ignoredParamIds, ParameterBag parameterBag) { private void addParameterBagFlat(JsonObject rootJ, Set<String> ignoredParamIds, ParameterBag parameterBag) {
parameterBag.streamOfParameters().sorted(comparing(Parameter::getIndex)).forEach(param -> {
Set<String> parameterKeySet = parameterBag.getParameterKeySet(); String paramId = param.getId();
for (String paramId : parameterKeySet) {
// see if this parameter must be ignored // see if this parameter must be ignored
if (ignoredParamIds != null && ignoredParamIds.contains(paramId)) if (ignoredParamIds != null && ignoredParamIds.contains(paramId))
continue; return;
if (rootJ.has(paramId)) { if (rootJ.has(paramId)) {
throw new StrolchModelException( throw new StrolchModelException(
"JsonObject already has a member with ID " + paramId + ": " + parameterBag.getLocator()); "JsonObject already has a member with ID " + paramId + ": " + parameterBag.getLocator());
} }
Parameter<?> param = parameterBag.getParameter(paramId);
StrolchValueType type = StrolchValueType.parse(param.getType()); StrolchValueType type = StrolchValueType.parse(param.getType());
if (type.isBoolean()) { if (type.isBoolean()) {
rootJ.addProperty(paramId, (Boolean) param.getValue()); rootJ.addProperty(paramId, (Boolean) param.getValue());
@ -605,7 +603,7 @@ public class StrolchElementToJsonVisitor implements StrolchElementVisitor<JsonEl
} else { } else {
rootJ.addProperty(paramId, param.getValueAsString()); rootJ.addProperty(paramId, param.getValueAsString());
} }
} });
} }
private JsonObject parameterBagToJsonFull(ParameterBag bag) { private JsonObject parameterBagToJsonFull(ParameterBag bag) {
@ -616,10 +614,8 @@ public class StrolchElementToJsonVisitor implements StrolchElementVisitor<JsonEl
JsonObject paramsJ = new JsonObject(); JsonObject paramsJ = new JsonObject();
bagJ.add(Json.PARAMETERS, paramsJ); bagJ.add(Json.PARAMETERS, paramsJ);
for (String paramKey : bag.getParameterKeySet()) { bag.streamOfParameters().sorted(comparing(Parameter::getIndex))
Parameter<?> param = bag.getParameter(paramKey); .forEach(param -> paramsJ.add(param.getId(), paramToJsonFull(param)));
paramsJ.add(paramKey, paramToJsonFull(param));
}
if (this.bagHook != null) if (this.bagHook != null)
this.bagHook.accept(bag, bagJ); this.bagHook.accept(bag, bagJ);