[New] Added FromFlatJsonVisitor.nonEmptyParameter()
This commit is contained in:
parent
3ac2952258
commit
66ac578304
|
@ -1,6 +1,7 @@
|
||||||
package li.strolch.model.json;
|
package li.strolch.model.json;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
|
@ -24,7 +25,7 @@ import li.strolch.utils.dbc.DBC;
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* To ignore {@link Parameter Parameters} or {@link ParameterBag ParameterBags} use the {@link #ignoreParameter(String,
|
* To ignore {@link Parameter Parameters} or {@link ParameterBag ParameterBags} use the {@link #ignoreParameter(String,
|
||||||
* * String)} and {@link #ignoreBag(String)} methods
|
* String)} and {@link #ignoreBag(String)} methods
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* {@link Parameter} can be made optional by using the {@link #optionalParameter(String, String)} method
|
* {@link Parameter} can be made optional by using the {@link #optionalParameter(String, String)} method
|
||||||
|
@ -34,18 +35,25 @@ import li.strolch.utils.dbc.DBC;
|
||||||
*/
|
*/
|
||||||
public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
||||||
|
|
||||||
|
private Set<String> ignoredBagTypes;
|
||||||
private MapOfSets<String, String> ignoredKeys;
|
private MapOfSets<String, String> ignoredKeys;
|
||||||
private MapOfSets<String, String> optionalKeys;
|
private MapOfSets<String, String> optionalKeys;
|
||||||
|
private MapOfSets<String, String> nonEmptyParameters;
|
||||||
|
|
||||||
private JsonObject srcObject;
|
private JsonObject srcObject;
|
||||||
|
|
||||||
public FromFlatJsonVisitor() {
|
public FromFlatJsonVisitor() {
|
||||||
|
this.ignoredBagTypes = new HashSet<>();
|
||||||
|
this.nonEmptyParameters = new MapOfSets<>();
|
||||||
this.ignoredKeys = new MapOfSets<>();
|
this.ignoredKeys = new MapOfSets<>();
|
||||||
this.optionalKeys = new MapOfSets<>();
|
this.optionalKeys = new MapOfSets<>();
|
||||||
|
this.nonEmptyParameters = new MapOfSets<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FromFlatJsonVisitor(JsonObject srcObject) {
|
public FromFlatJsonVisitor(JsonObject srcObject) {
|
||||||
this.srcObject = srcObject;
|
this.srcObject = srcObject;
|
||||||
|
this.ignoredBagTypes = new HashSet<>();
|
||||||
|
this.nonEmptyParameters = new MapOfSets<>();
|
||||||
this.ignoredKeys = new MapOfSets<>();
|
this.ignoredKeys = new MapOfSets<>();
|
||||||
this.optionalKeys = new MapOfSets<>();
|
this.optionalKeys = new MapOfSets<>();
|
||||||
}
|
}
|
||||||
|
@ -55,6 +63,16 @@ public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
||||||
this.optionalKeys = new MapOfSets<>();
|
this.optionalKeys = new MapOfSets<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FromFlatJsonVisitor nonEmptyParameter(String bagId, String paramId) {
|
||||||
|
this.nonEmptyParameters.addElement(bagId, paramId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FromFlatJsonVisitor ignoreBagsOfType(String bagType) {
|
||||||
|
this.ignoredBagTypes.add(bagType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public FromFlatJsonVisitor ignoreBag(String bagId) {
|
public FromFlatJsonVisitor ignoreBag(String bagId) {
|
||||||
this.ignoredKeys.addSet(bagId, Collections.emptySet());
|
this.ignoredKeys.addSet(bagId, Collections.emptySet());
|
||||||
return this;
|
return this;
|
||||||
|
@ -131,6 +149,10 @@ public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
||||||
|
|
||||||
ParameterBag parameterBag = dstElement.getParameterBag(bagId);
|
ParameterBag parameterBag = dstElement.getParameterBag(bagId);
|
||||||
|
|
||||||
|
// see if we want to ignore bags of this type
|
||||||
|
if (this.ignoredBagTypes.contains(parameterBag.getType()))
|
||||||
|
continue;
|
||||||
|
|
||||||
Set<String> parameterKeySet = parameterBag.getParameterKeySet();
|
Set<String> parameterKeySet = parameterBag.getParameterKeySet();
|
||||||
for (String paramId : parameterKeySet) {
|
for (String paramId : parameterKeySet) {
|
||||||
|
|
||||||
|
@ -140,8 +162,10 @@ public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
||||||
|
|
||||||
JsonElement jsonElement = this.srcObject.get(paramId);
|
JsonElement jsonElement = this.srcObject.get(paramId);
|
||||||
if (jsonElement == null) {
|
if (jsonElement == null) {
|
||||||
|
|
||||||
if (this.optionalKeys.containsElement(bagId, paramId))
|
if (this.optionalKeys.containsElement(bagId, paramId))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
throw new StrolchModelException(
|
throw new StrolchModelException(
|
||||||
"JsonObject is missing member " + paramId + " for " + parameterBag.getLocator() + "/"
|
"JsonObject is missing member " + paramId + " for " + parameterBag.getLocator() + "/"
|
||||||
+ paramId);
|
+ paramId);
|
||||||
|
@ -154,8 +178,16 @@ public class FromFlatJsonVisitor implements StrolchRootElementVisitor<Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Parameter<?> parameter = parameterBag.getParameter(paramId);
|
Parameter<?> parameter = parameterBag.getParameter(paramId);
|
||||||
|
|
||||||
|
String asString = jsonElement.getAsString();
|
||||||
|
if (asString.isEmpty() && this.nonEmptyParameters.containsElement(bagId, paramId)) {
|
||||||
|
throw new StrolchModelException(
|
||||||
|
"JsonElement " + paramId + " is required to be a non empty value for " + parameter
|
||||||
|
.getLocator());
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
parameter.setValueFromString(jsonElement.getAsString());
|
parameter.setValueFromString(asString);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalStateException("Failed to set parameter " + parameter.getLocator(), e);
|
throw new IllegalStateException("Failed to set parameter " + parameter.getLocator(), e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue