From c052911d71b6abdd5e9ee09cd1f5c903c61ca034 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Tue, 26 Jun 2018 18:30:29 +0200 Subject: [PATCH] [Major] Refactored ReportFilterPolicy for easier extension --- .../report/policy/EqualsReportFilter.java | 30 ++------- .../strolch/report/policy/GenericReport.java | 11 +--- .../policy/GreaterThanReportFilter.java | 31 ++------- .../report/policy/ReportFilterPolicy.java | 63 ++++++++++++++++++- 4 files changed, 71 insertions(+), 64 deletions(-) diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/EqualsReportFilter.java b/li.strolch.service/src/main/java/li/strolch/report/policy/EqualsReportFilter.java index b9c2a6853..91765abe5 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/EqualsReportFilter.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/EqualsReportFilter.java @@ -1,40 +1,20 @@ package li.strolch.report.policy; import li.strolch.agent.api.ComponentContainer; -import li.strolch.model.parameter.Parameter; import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.utils.ObjectHelper; public class EqualsReportFilter extends ReportFilterPolicy { - private boolean negate; - private String value; - public EqualsReportFilter(ComponentContainer container, StrolchTransaction tx) { super(container, tx); } @Override - public void init(String value) { - if (value.startsWith("!")) { - this.negate = true; - this.value = value.substring(1); - } else { - this.value = value; - } - } - - @Override - public boolean filter(Parameter parameter) { - String value = parameter.getValueAsString(); - return filter(value); - } - - @Override - public boolean filter(String value) { - if (this.negate) - return !this.value.equals(value); + protected boolean filter(Object left, Object right, boolean negate) { + if (negate) + return !ObjectHelper.equals(left, right, false); else - return this.value.equals(value); - + return ObjectHelper.equals(left, right, false); } } diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java b/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java index a8b56cc5c..df9e8472a 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/GenericReport.java @@ -267,16 +267,7 @@ public class GenericReport extends ReportPolicy { if (fieldRefP.getValue().startsWith("$")) { Object value = evaluateColumnValue(fieldRefP, row); - - String columnValue; - if (value instanceof Date) - columnValue = ISO8601FormatFactory.getInstance().formatDate((Date) value); - else if (value instanceof Parameter) - columnValue = ((Parameter) value).getValueAsString(); - else - columnValue = value.toString(); - - if (!filterPolicy.filter(columnValue)) + if (!filterPolicy.filter(value)) return false; } else { Optional> param = lookupParameter(fieldRefP, column); diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/GreaterThanReportFilter.java b/li.strolch.service/src/main/java/li/strolch/report/policy/GreaterThanReportFilter.java index 94e1a1d6a..4a3531080 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/GreaterThanReportFilter.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/GreaterThanReportFilter.java @@ -1,41 +1,20 @@ package li.strolch.report.policy; import li.strolch.agent.api.ComponentContainer; -import li.strolch.model.parameter.FloatParameter; -import li.strolch.model.parameter.Parameter; import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.utils.ObjectHelper; public class GreaterThanReportFilter extends ReportFilterPolicy { - private boolean negate; - private double value; - public GreaterThanReportFilter(ComponentContainer container, StrolchTransaction tx) { super(container, tx); } @Override - public void init(String value) { - if (value.startsWith("!")) { - this.negate = true; - this.value = Double.parseDouble(value.substring(1)); - } else { - this.value = Double.parseDouble(value); - } - } - - @Override - public boolean filter(Parameter parameter) { - - FloatParameter floatP = (FloatParameter) parameter; - if (this.negate) - return floatP.getValue().doubleValue() <= this.value; + protected boolean filter(Object left, Object right, boolean negate) { + if (negate) + return ObjectHelper.compare(left, right, false) > 0; else - return floatP.getValue().doubleValue() > this.value; - } - - @Override - public boolean filter(String value) { - throw new UnsupportedOperationException("Greater Than not supported on string!"); + return ObjectHelper.compare(right, left, false) > 0; } } diff --git a/li.strolch.service/src/main/java/li/strolch/report/policy/ReportFilterPolicy.java b/li.strolch.service/src/main/java/li/strolch/report/policy/ReportFilterPolicy.java index 7c94ec8e3..e36602239 100644 --- a/li.strolch.service/src/main/java/li/strolch/report/policy/ReportFilterPolicy.java +++ b/li.strolch.service/src/main/java/li/strolch/report/policy/ReportFilterPolicy.java @@ -1,9 +1,12 @@ package li.strolch.report.policy; +import java.util.Date; + import li.strolch.agent.api.ComponentContainer; import li.strolch.model.parameter.Parameter; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.policy.StrolchPolicy; +import li.strolch.utils.iso8601.ISO8601FormatFactory; public abstract class ReportFilterPolicy extends StrolchPolicy { @@ -11,11 +14,65 @@ public abstract class ReportFilterPolicy extends StrolchPolicy { super(container, tx); } - public abstract void init(String value); + private boolean negate; + private String filterValue; + private Object left; - public abstract boolean filter(String value); + public boolean isNegate() { + return this.negate; + } - public abstract boolean filter(Parameter param); + public void setNegate(boolean negate) { + this.negate = negate; + } + + public void setFilterValue(String filterValue) { + this.filterValue = filterValue; + } + + public Object getLeft() { + return this.left; + } + + public void setLeft(Object left) { + this.left = left; + } + + public void init(String value) { + if (value.startsWith("!")) { + setNegate(true); + setFilterValue(value.substring(1)); + } else { + setFilterValue(value); + } + } + + public boolean filter(Object value) { + + Object right; + if (value instanceof Date) { + + if (this.left == null) + this.left = ISO8601FormatFactory.getInstance().parseDate(this.filterValue); + right = value; + + } else if (value instanceof Parameter) { + + Parameter parameter = (Parameter) value; + if (this.left == null) + this.left = parameter.getValueType().parseValue(this.filterValue); + right = parameter.getValue(); + + } else { + if (this.left == null) + this.left = this.filterValue; + right = value.toString(); + } + + return filter(this.left, right, this.negate); + } + + protected abstract boolean filter(Object left, Object right, boolean negate); @Override public void undo() {