diff --git a/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBooleanInputBuilder.java b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBooleanInputBuilder.java new file mode 100644 index 0000000..a7e540c --- /dev/null +++ b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBooleanInputBuilder.java @@ -0,0 +1,13 @@ +package com.github.kislayverma.rulette.core.ruleinput.value.defaults; + +import com.github.kislayverma.rulette.core.ruleinput.value.IInputValue; +import com.github.kislayverma.rulette.core.ruleinput.value.IInputValueBuilder; + +public class DefaultBooleanInputBuilder implements IInputValueBuilder { + + @Override + public IInputValue build(String value) { + return new InputBooleanValue(value); + } + +} diff --git a/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBuilderRegistry.java b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBuilderRegistry.java index 17f56dc..961ec46 100644 --- a/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBuilderRegistry.java +++ b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/DefaultBuilderRegistry.java @@ -17,6 +17,8 @@ public DefaultBuilderRegistry() { this.builderRegister.put("STRING", new DefaultStringInputBuilder()); this.builderRegister.put("DATE", new DefaultDateInputBuilder()); this.builderRegister.put("NUMBER", new DefaultNumberInputBuilder()); + this.builderRegister.put("BOOLEAN", new DefaultBooleanInputBuilder()); + } public IInputValueBuilder getDefaultBuilder(String dataType) { diff --git a/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/InputBooleanValue.java b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/InputBooleanValue.java new file mode 100644 index 0000000..999e11a --- /dev/null +++ b/rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/InputBooleanValue.java @@ -0,0 +1,70 @@ +package com.github.kislayverma.rulette.core.ruleinput.value.defaults; + +import java.io.Serializable; + +import com.github.kislayverma.rulette.core.ruleinput.value.IInputValue; + +public class InputBooleanValue implements IInputValue, Serializable { + + private static final long serialVersionUID = -474469687493839730L; + + private final Boolean value; + + InputBooleanValue(String value) { + this.value = value == null || value.isEmpty() ? null : Boolean.valueOf(value); + } + + @Override + public String getDataType() { + return Boolean.class.getName(); + } + + @Override + public Boolean getValue() { + return this.value; + } + + @Override + public boolean equals(Object obj) { + IInputValue that = (IInputValue) obj; + if (this.isEmpty() && that.isEmpty()) { + return true; + } else if (!this.isEmpty()) { + return this.value.equals(that.getValue()); + } else { + return that.getValue().equals(this.value); + } + } + + @Override + public int compareTo(String obj) { + if ((obj == null || "".equals(obj)) && (this.value == null)) { + return 0; + } else if (obj == null || "".equals(obj)) { + return 1; + } else if (this.value == null) { + return -1; + } else { + return this.value.compareTo(Boolean.valueOf(obj)); + } + } + + @Override + public int compareTo(IInputValue obj) { + if ((obj == null) && (this.value == null)) { + return 0; + } else if (obj == null || obj.isEmpty()) { + return 1; + } else if (this.value == null) { + return -1; + } else { + return this.value.compareTo((Boolean)obj.getValue()); + } + } + + @Override + public boolean isEmpty() { + return this.value == null; + } + +} diff --git a/rulette-core/src/test/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/impl/DefaultBooleanInputBuilderTest.java b/rulette-core/src/test/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/impl/DefaultBooleanInputBuilderTest.java new file mode 100644 index 0000000..d92cd4c --- /dev/null +++ b/rulette-core/src/test/java/com/github/kislayverma/rulette/core/ruleinput/value/defaults/impl/DefaultBooleanInputBuilderTest.java @@ -0,0 +1,27 @@ +package com.github.kislayverma.rulette.core.ruleinput.value.defaults.impl; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.github.kislayverma.rulette.core.ruleinput.value.IInputValue; +import com.github.kislayverma.rulette.core.ruleinput.value.defaults.DefaultBooleanInputBuilder; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class DefaultBooleanInputBuilderTest { + + @Test + @DisplayName("should return false for a random string") + void shouldReturnFalseForRandomValue() { + IInputValue ivb = new DefaultBooleanInputBuilder().build("xnanannkk"); + assertEquals(Boolean.FALSE, ivb.getValue(), "Random String values are treated as false"); + } + + @Test + @DisplayName("should return true for a String TRUE value") + void shouldReturnTrueForTRUEValue() { + IInputValue ivb = new DefaultBooleanInputBuilder().build("true"); + assertEquals(Boolean.TRUE, ivb.getValue(), "A String True Value treated as true"); + } + +} \ No newline at end of file