[New] Created new SetParameterValueFromJsonVisitor
This commit is contained in:
parent
d0c02ffc38
commit
50a5d002a7
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue