[New] Created new SetParameterValueFromJsonVisitor

This commit is contained in:
Robert von Burg 2022-07-06 17:15:31 +02:00
parent d0c02ffc38
commit 50a5d002a7
Signed by: eitch
GPG Key ID: 75DB9C85C74331F7
1 changed files with 187 additions and 0 deletions

View File

@ -0,0 +1,187 @@
package li.strolch.model.json;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import li.strolch.model.parameter.*;
import li.strolch.model.visitor.ParameterVisitor;
import li.strolch.utils.iso8601.ISO8601;
import li.strolch.utils.time.PeriodDuration;
public class SetParameterValueFromJsonVisitor implements ParameterVisitor<Void> {
private final JsonObject container;
private final boolean ignoreMissing;
public SetParameterValueFromJsonVisitor(JsonObject container, boolean ignoreMissing) {
this.container = container;
this.ignoreMissing = ignoreMissing;
}
private boolean isMissing(Parameter<?> param) {
if (this.ignoreMissing && !this.container.has(param.getId()))
return true;
if (!this.container.has(param.getId()))
throw new IllegalStateException("Field " + param.getId() + " is missing on json data!");
return false;
}
private boolean isNotSet(Parameter<?> param) {
return !this.container.has(param.getId()) || this.container.get(param.getId()).isJsonNull();
}
@Override
public Void visitBooleanParam(BooleanParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsBoolean());
return null;
}
@Override
public Void visitDateParam(DateParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(ISO8601.parseToDate(this.container.get(param.getId()).getAsString()));
return null;
}
@Override
public Void visitDurationParam(DurationParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(PeriodDuration.parse(this.container.get(param.getId()).getAsString()));
return null;
}
@Override
public Void visitFloatParam(FloatParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsDouble());
return null;
}
@Override
public Void visitIntegerParam(IntegerParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsInt());
return null;
}
@Override
public Void visitLongParam(LongParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsLong());
return null;
}
@Override
public Void visitStringParam(StringParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsString());
return null;
}
@Override
public Void visitTextParam(TextParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param))
param.clear();
else
param.setValue(this.container.get(param.getId()).getAsString());
return null;
}
@Override
public Void visitStringListParam(StringListParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param)) {
param.clear();
} else {
JsonElement listJ = this.container.get(param.getId());
param.clear();
if (listJ.isJsonPrimitive())
param.setValueFromString(listJ.getAsString());
else
listJ.getAsJsonArray().forEach(e -> param.addValue(e.getAsString()));
}
return null;
}
@Override
public Void visitIntegerListParam(IntegerListParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param)) {
param.clear();
} else {
JsonElement listJ = this.container.get(param.getId());
param.clear();
if (listJ.isJsonPrimitive())
param.setValueFromString(listJ.getAsString());
else
listJ.getAsJsonArray().forEach(e -> param.addValue(e.getAsInt()));
}
return null;
}
@Override
public Void visitFloatListParam(FloatListParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param)) {
param.clear();
} else {
JsonElement listJ = this.container.get(param.getId());
param.clear();
if (listJ.isJsonPrimitive())
param.setValueFromString(listJ.getAsString());
else
listJ.getAsJsonArray().forEach(e -> param.addValue(e.getAsDouble()));
}
return null;
}
@Override
public Void visitLongListParam(LongListParameter param) {
if (isMissing(param))
return null;
if (isNotSet(param)) {
param.clear();
} else {
JsonElement listJ = this.container.get(param.getId());
param.clear();
if (listJ.isJsonPrimitive())
param.setValueFromString(listJ.getAsString());
else
listJ.getAsJsonArray().forEach(e -> param.addValue(e.getAsLong()));
}
return null;
}
}