Browse Source

Remove Booleans use from XContent and ToXContent (#28768)

* Remove Booleans use from XContent and ToXContent

This removes the use of the `common.Boolean` class from two of the XContent
classes, so they can be decoupled from the ES code as much as possible.

Related to #28754, #28504
Lee Hinman 7 years ago
parent
commit
97b513e925

+ 46 - 0
server/src/main/java/org/elasticsearch/common/xcontent/Booleans.java

@@ -0,0 +1,46 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.elasticsearch.common.xcontent;
+
+/**
+ * Helpers for dealing with boolean values. Package-visible only so that only XContent classes use them.
+ */
+final class Booleans {
+    /**
+     * Parse {@code value} with values "true", "false", or null, returning the
+     * default value if null or the empty string is used. Any other input
+     * results in an {@link IllegalArgumentException} being thrown.
+     */
+    static boolean parseBoolean(String value, Boolean defaultValue) {
+        if (value != null && value.length() > 0) {
+            switch (value) {
+                case "true":
+                    return true;
+                case "false":
+                    return false;
+                default:
+                    throw new IllegalArgumentException("Failed to parse param [" + value + "] as only [true] or [false] are allowed.");
+            }
+        } else {
+            return defaultValue;
+        }
+    }
+
+}

+ 1 - 2
server/src/main/java/org/elasticsearch/common/xcontent/ToXContent.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.common.xcontent;
 
-import org.elasticsearch.common.Booleans;
-
 import java.io.IOException;
 import java.util.Map;
 
@@ -132,4 +130,5 @@ public interface ToXContent {
     default boolean isFragment() {
         return true;
     }
+
 }

+ 1 - 3
server/src/main/java/org/elasticsearch/common/xcontent/XContent.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.common.xcontent;
 
-import org.elasticsearch.common.Booleans;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -51,7 +49,7 @@ public interface XContent {
      */
     static boolean isStrictDuplicateDetectionEnabled() {
         // Don't allow duplicate keys in JSON content by default but let the user opt out
-        return Booleans.parseBoolean(System.getProperty("es.xcontent.strict_duplicate_detection", "true"));
+        return Booleans.parseBoolean(System.getProperty("es.xcontent.strict_duplicate_detection", "true"), true);
     }
 
     /**