From 6d65064117ebbf5fc2a3fc4d8c68596ae6c0ef27 Mon Sep 17 00:00:00 2001
From: Robert von Burg
Date: Sat, 17 Sep 2016 17:20:45 +0200
Subject: [PATCH] [New] Allow for optional parameters in to flat json
---
.../rest/visitor/FromFlatJsonVisitor.java | 22 +++++++++++++++----
.../rest/visitor/ToFlatJsonVisitor.java | 6 ++---
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/visitor/FromFlatJsonVisitor.java b/li.strolch.rest/src/main/java/li/strolch/rest/visitor/FromFlatJsonVisitor.java
index 7ffed4ed5..d38194e01 100644
--- a/li.strolch.rest/src/main/java/li/strolch/rest/visitor/FromFlatJsonVisitor.java
+++ b/li.strolch.rest/src/main/java/li/strolch/rest/visitor/FromFlatJsonVisitor.java
@@ -23,6 +23,10 @@ import li.strolch.utils.collections.MapOfSets;
* empty set with the bag id.
*
*
+ *
+ * Optional values are handled similar, but only a parameter can be optional, not a whole bag
+ *
+ *
* @author Robert von Burg
*
* @param
@@ -30,13 +34,16 @@ import li.strolch.utils.collections.MapOfSets;
public class FromFlatJsonVisitor {
private MapOfSets ignoredKeys;
+ private MapOfSets optionalKeys;
public FromFlatJsonVisitor() {
this.ignoredKeys = new MapOfSets<>();
+ this.optionalKeys = new MapOfSets<>();
}
public FromFlatJsonVisitor(MapOfSets ignoredParams) {
this.ignoredKeys = new MapOfSets<>();
+ this.optionalKeys = new MapOfSets<>();
}
public void ignoreBag(String bagId) {
@@ -47,14 +54,18 @@ public class FromFlatJsonVisitor {
this.ignoredKeys.addElement(bagId, paramId);
}
+ public void optionalParameter(String bagId, String paramId) {
+ this.optionalKeys.addElement(bagId, paramId);
+ }
+
public void visit(T element, JsonObject jsonObject) {
Set bagKeySet = element.getParameterBagKeySet();
for (String bagId : bagKeySet) {
// see if we have to ignore this bag i.e. empty set existing
- Set paramIds = this.ignoredKeys.getSet(bagId);
- if (paramIds != null && paramIds.isEmpty())
+ Set ignoredParamIds = this.ignoredKeys.getSet(bagId);
+ if (ignoredParamIds != null && ignoredParamIds.isEmpty())
continue;
ParameterBag parameterBag = element.getParameterBag(bagId);
@@ -63,12 +74,15 @@ public class FromFlatJsonVisitor {
for (String paramId : parameterKeySet) {
// see if this parameter must be ignored
- if (paramIds != null && paramIds.contains(paramId))
+ if (ignoredParamIds != null && ignoredParamIds.contains(paramId))
continue;
JsonElement jsonElement = jsonObject.get(paramId);
- if (jsonElement == null)
+ if (jsonElement == null) {
+ if (this.optionalKeys.containsElement(bagId, paramId))
+ continue;
throw new StrolchModelException("JsonObject is missing member with ID " + paramId);
+ }
if (!jsonElement.isJsonPrimitive()) {
throw new StrolchModelException("JsonElement " + paramId + " is not a json primitive but a "
diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/visitor/ToFlatJsonVisitor.java b/li.strolch.rest/src/main/java/li/strolch/rest/visitor/ToFlatJsonVisitor.java
index 9cac20e3b..e9c297110 100644
--- a/li.strolch.rest/src/main/java/li/strolch/rest/visitor/ToFlatJsonVisitor.java
+++ b/li.strolch.rest/src/main/java/li/strolch/rest/visitor/ToFlatJsonVisitor.java
@@ -69,8 +69,8 @@ public class ToFlatJsonVisitor {
for (String bagId : bagKeySet) {
// see if we have to ignore this bag i.e. empty set existing
- Set paramIds = this.ignoredKeys.getSet(bagId);
- if (paramIds != null && paramIds.isEmpty())
+ Set ignoredParamIds = this.ignoredKeys.getSet(bagId);
+ if (ignoredParamIds != null && ignoredParamIds.isEmpty())
continue;
ParameterBag parameterBag = element.getParameterBag(bagId);
@@ -79,7 +79,7 @@ public class ToFlatJsonVisitor {
for (String paramId : parameterKeySet) {
// see if this parameter must be ignored
- if (paramIds != null && paramIds.contains(paramId))
+ if (ignoredParamIds != null && ignoredParamIds.contains(paramId))
continue;
if (jsonObject.has(paramId)) {