diff --git a/build.gradle b/build.gradle index 6752c8d..a922788 100644 --- a/build.gradle +++ b/build.gradle @@ -32,9 +32,6 @@ repositories { dependencies { implementation 'ch.qos.logback:logback-classic:1.2.3' - implementation 'ch.qos.logback.contrib:logback-json-classic:0.1.5' - implementation 'ch.qos.logback.contrib:logback-jackson:0.1.5' - implementation 'net.logstash.logback:logstash-logback-encoder:5.2' implementation 'org.apache.maven:maven-artifact:3.5.2' implementation 'org.antlr:antlr4-runtime:4.13.1' implementation 'io.vavr:vavr:0.10.4' @@ -122,7 +119,7 @@ nexusPublishing { ext.genOutputDir = file("$buildDir/generated-resources") -task generateVersionTxt() { +task generateVersionTxt() { ext.outputFile = file("$genOutputDir/version.txt") outputs.file(outputFile) doLast { diff --git a/src/main/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluator.java b/src/main/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluator.java index fc95eb4..2329677 100644 --- a/src/main/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluator.java +++ b/src/main/java/com/github/sidhant92/boolparser/application/BooleanExpressionEvaluator.java @@ -85,7 +85,7 @@ private boolean evaluateNumericRangeToken(final NumericRangeNode numericRangeTok private boolean evaluateInToken(final InNode inToken, final Map data) { final Object fieldData = ValueUtils.getValueFromMap(inToken.getField(), data).orElseThrow(DataNotFoundException::new); - final DataType dataType = inToken.getItems().get(0).getLeft(); + final DataType dataType = ValueUtils.getDataType(fieldData); final Object[] values = inToken.getItems() .stream() .map(Pair::getRight).toArray(); diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/AbstractDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/AbstractDataType.java index 0a3c22d..3775e5d 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/AbstractDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/AbstractDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; import lombok.extern.slf4j.Slf4j; @@ -17,33 +16,17 @@ public AbstractDataType(final Class clazz) { this.clazz = clazz; } - protected boolean defaultIsValid(final Object value, final ObjectMapper objectMapper) { - return defaultIsValid(value, objectMapper, false); + protected boolean defaultIsValid(final Object value) { + return defaultIsValid(value, false); } - protected boolean defaultIsValid(final Object value, final ObjectMapper objectMapper, final boolean useStrictValidation) { - try { - if (clazz.isInstance(value)) { - return true; - } - if (useStrictValidation) { - return false; - } - return objectMapper.convertValue(value, clazz) != null; - } catch (final Exception ex) { - log.error("Unable to convert value = {} to type = {}", value, clazz); - } - return false; + protected boolean defaultIsValid(final Object value, final boolean useStrictValidation) { + return clazz.isInstance(value); } - protected Optional defaultGetValue(final Object value, final ObjectMapper objectMapper) { - try { - if (clazz.isInstance(value)) { - return Optional.of(clazz.cast(value)); - } - return Optional.of(objectMapper.convertValue(value, clazz)); - } catch (final Exception ex) { - log.error("Unable to convert value = {} to type = {}", value, clazz); + protected Optional defaultGetValue(final Object value) { + if (clazz.isInstance(value)) { + return Optional.of(clazz.cast(value)); } return Optional.empty(); } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/BooleanDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/BooleanDataType.java index 28ce325..2384f64 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/BooleanDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/BooleanDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -9,11 +8,8 @@ * @since 05/03/2023 */ public class BooleanDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public BooleanDataType(final ObjectMapper objectMapper) { + public BooleanDataType() { super(Boolean.class); - this.objectMapper = objectMapper; } @Override @@ -23,16 +19,31 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + boolean isValid = super.defaultIsValid(value); + if (!isValid) { + final String lowercase = value.toString().toLowerCase(); + return lowercase.equals("true") || lowercase.equals("false"); + } + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + if (this.isValid(value)) { + return Optional.of(Boolean.parseBoolean(value.toString())); + } + return Optional.empty(); } } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/DataTypeFactory.java b/src/main/java/com/github/sidhant92/boolparser/datatype/DataTypeFactory.java index d165e3f..aedeed7 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/DataTypeFactory.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/DataTypeFactory.java @@ -2,7 +2,6 @@ import java.util.EnumMap; import java.util.Map; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -17,13 +16,12 @@ private DataTypeFactory() { } public static void initialize() { - final ObjectMapper objectMapper = new ObjectMapper(); - abstractDataTypeMap.put(DataType.STRING, new StringDataType(objectMapper)); - abstractDataTypeMap.put(DataType.INTEGER, new IntegerDataType(objectMapper)); - abstractDataTypeMap.put(DataType.DECIMAL, new DecimalDataType(objectMapper)); - abstractDataTypeMap.put(DataType.LONG, new LongDataType(objectMapper)); - abstractDataTypeMap.put(DataType.VERSION, new VersionDataType(objectMapper)); - abstractDataTypeMap.put(DataType.BOOLEAN, new BooleanDataType(objectMapper)); + abstractDataTypeMap.put(DataType.STRING, new StringDataType()); + abstractDataTypeMap.put(DataType.INTEGER, new IntegerDataType()); + abstractDataTypeMap.put(DataType.DECIMAL, new DecimalDataType()); + abstractDataTypeMap.put(DataType.LONG, new LongDataType()); + abstractDataTypeMap.put(DataType.VERSION, new VersionDataType()); + abstractDataTypeMap.put(DataType.BOOLEAN, new BooleanDataType()); } public static AbstractDataType getDataType(final DataType dataType) { diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/DecimalDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/DecimalDataType.java index 0b11cb5..532b577 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/DecimalDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/DecimalDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -9,11 +8,8 @@ * @since 05/03/2023 */ public class DecimalDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public DecimalDataType(final ObjectMapper objectMapper) { + public DecimalDataType() { super(Double.class); - this.objectMapper = objectMapper; } @Override @@ -23,16 +19,36 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + boolean isValid = super.defaultIsValid(value); + if (!isValid) { + try { + Double.parseDouble(value.toString()); + return true; + } catch (Exception ex) { + return false; + } + } + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + try { + return Optional.of(Double.parseDouble(value.toString())); + } catch (final Exception ignored) { + } + return Optional.empty(); } } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/IntegerDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/IntegerDataType.java index 3195abe..5e9f387 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/IntegerDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/IntegerDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -9,11 +8,8 @@ * @since 05/03/2023 */ public class IntegerDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public IntegerDataType(final ObjectMapper objectMapper) { + public IntegerDataType() { super(Integer.class); - this.objectMapper = objectMapper; } @Override @@ -23,16 +19,36 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + boolean isValid = super.defaultIsValid(value); + if (!isValid) { + try { + Integer.parseInt(value.toString()); + return true; + } catch (Exception ex) { + return false; + } + } + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + try { + return Optional.of(Integer.parseInt(value.toString())); + } catch (final Exception ignored) { + } + return Optional.empty(); } } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/LongDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/LongDataType.java index 7623dec..16b5afa 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/LongDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/LongDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -9,11 +8,8 @@ * @since 05/03/2023 */ public class LongDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public LongDataType(final ObjectMapper objectMapper) { + public LongDataType() { super(Long.class); - this.objectMapper = objectMapper; } @Override @@ -23,16 +19,36 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + boolean isValid = super.defaultIsValid(value); + if (!isValid) { + try { + Long.parseLong(value.toString()); + return true; + } catch (Exception ex) { + return false; + } + } + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + try { + return Optional.of(Long.parseLong(value.toString())); + } catch (final Exception ignored) { + } + return Optional.empty(); } } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/StringDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/StringDataType.java index 195c991..91f8d21 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/StringDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/StringDataType.java @@ -1,7 +1,6 @@ package com.github.sidhant92.boolparser.datatype; import java.util.Optional; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -9,11 +8,8 @@ * @since 05/03/2023 */ public class StringDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public StringDataType(final ObjectMapper objectMapper) { + public StringDataType() { super(String.class); - this.objectMapper = objectMapper; } @Override @@ -23,16 +19,23 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + return Optional.of(value.toString()); } } diff --git a/src/main/java/com/github/sidhant92/boolparser/datatype/VersionDataType.java b/src/main/java/com/github/sidhant92/boolparser/datatype/VersionDataType.java index 4069148..aeaa782 100644 --- a/src/main/java/com/github/sidhant92/boolparser/datatype/VersionDataType.java +++ b/src/main/java/com/github/sidhant92/boolparser/datatype/VersionDataType.java @@ -2,7 +2,6 @@ import java.util.Optional; import org.apache.maven.artifact.versioning.ComparableVersion; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sidhant92.boolparser.constant.DataType; /** @@ -10,11 +9,8 @@ * @since 05/03/2023 */ public class VersionDataType extends AbstractDataType { - private final ObjectMapper objectMapper; - - public VersionDataType(final ObjectMapper objectMapper) { + public VersionDataType() { super(ComparableVersion.class); - this.objectMapper = objectMapper; } @Override @@ -24,16 +20,36 @@ public DataType getDataType() { @Override public boolean isValid(final Object value) { - return super.defaultIsValid(value, objectMapper); + boolean isValid = super.defaultIsValid(value); + if (!isValid) { + try { + new ComparableVersion(value.toString()); + return true; + } catch (Exception ex) { + return false; + } + } + return true; } @Override public boolean isValid(final Object value, final boolean useStrictValidation) { - return super.defaultIsValid(value, objectMapper, useStrictValidation); + if (!useStrictValidation) { + return isValid(value); + } + return super.defaultIsValid(value); } @Override public Optional getValue(Object value) { - return defaultGetValue(value, objectMapper); + final Optional result = defaultGetValue(value); + if (result.isPresent()) { + return result; + } + try { + return Optional.of(new ComparableVersion(value.toString())); + } catch (final Exception ignored) { + } + return Optional.empty(); } }