diff src/main/java/edu/harvard/iq/dataverse/util/json/NullSafeJsonBuilder.java @ 10:a50cf11e5178

Rewrite LGDataverse completely upgrading to dataverse4.0
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Tue, 08 Sep 2015 17:00:21 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/edu/harvard/iq/dataverse/util/json/NullSafeJsonBuilder.java	Tue Sep 08 17:00:21 2015 +0200
@@ -0,0 +1,120 @@
+package edu.harvard.iq.dataverse.util.json;
+
+import edu.harvard.iq.dataverse.DatasetField;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+
+/**
+ * A JSON builder that drops any null values. If we didn't drop'em,
+ * we'd get an NPE from the standard JSON builder. But just omitting them
+ * makes sense. So there.
+ * 
+ * @author michael
+ */
+public class NullSafeJsonBuilder implements JsonObjectBuilder {
+	
+	public static NullSafeJsonBuilder jsonObjectBuilder() {
+		return new NullSafeJsonBuilder();
+	}
+	
+	private final JsonObjectBuilder delegate;
+	
+	public NullSafeJsonBuilder() {
+		delegate = Json.createObjectBuilder();
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, JsonValue value) {
+		if ( value!=null ) delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, String value) {
+		if ( value!=null ) 
+			 delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, BigInteger value) {
+		if ( value!=null ) 
+			 delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, BigDecimal value) {
+		if ( value!=null ) 
+			delegate.add(name, value);
+		
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, int value) {
+		delegate.add(name, value);
+		return this;
+	}
+
+	public NullSafeJsonBuilder add(String name, Long value) {
+        return ( value != null ) ? add(name, value.longValue()) : this;
+    }
+    
+	@Override
+	public NullSafeJsonBuilder add(String name, long value) {
+		delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, double value) {
+		delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, boolean value) {
+		delegate.add(name, value);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder addNull(String name) {
+		delegate.addNull(name);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, JsonObjectBuilder builder) {
+		if ( builder!=null ) 
+			 delegate.add(name, builder);
+		return this;
+	}
+
+	@Override
+	public NullSafeJsonBuilder add(String name, JsonArrayBuilder builder) {
+		if ( builder!=null ) 
+			delegate.add(name, builder);
+		return this;
+	}
+	
+	public NullSafeJsonBuilder addStrValue( String name, DatasetField field ) {
+		if ( field != null ) {
+			delegate.add( name, field.getValue() );
+		}
+		return this;
+	}
+	
+	@Override
+	public JsonObject build() {
+		return delegate.build();
+	}
+	
+	
+}