From 720200b6cf183a64870a195c78eba946712d6db9 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 28 Sep 2022 14:49:46 -0500 Subject: [PATCH] Update to clone query filters --- .../reporting/GenerateReportAction.java | 2 +- .../actions/tables/query/QFilterCriteria.java | 27 +++++++++++- .../actions/tables/query/QFilterOrderBy.java | 20 ++++++++- .../actions/tables/query/QQueryFilter.java | 42 ++++++++++++++++++- 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/GenerateReportAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/GenerateReportAction.java index 1eb83aa6..370f164b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/GenerateReportAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/GenerateReportAction.java @@ -222,7 +222,7 @@ public class GenerateReportAction *******************************************************************************/ private void gatherData(ReportInput reportInput, QReportDataSource dataSource, QReportView tableView, List pivotViews, List variantViews) throws QException { - QQueryFilter queryFilter = dataSource.getQueryFilter(); + QQueryFilter queryFilter = dataSource.getQueryFilter().clone(); setInputValuesInQueryFilter(reportInput, queryFilter); //////////////////////////////////////////////////////////////////////////////////////// diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterCriteria.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterCriteria.java index 251a961b..51653a6b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterCriteria.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterCriteria.java @@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.query; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; @@ -30,7 +31,7 @@ import java.util.List; * A single criteria Component of a Query * *******************************************************************************/ -public class QFilterCriteria implements Serializable +public class QFilterCriteria implements Serializable, Cloneable { private String fieldName; private QCriteriaOperator operator; @@ -38,6 +39,30 @@ public class QFilterCriteria implements Serializable + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public QFilterCriteria clone() + { + try + { + QFilterCriteria clone = (QFilterCriteria) super.clone(); + if(values != null) + { + clone.values = new ArrayList<>(); + clone.values.addAll(values); + } + return clone; + } + catch(CloneNotSupportedException e) + { + throw new AssertionError(); + } + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterOrderBy.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterOrderBy.java index 51118b38..4cfa6395 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterOrderBy.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QFilterOrderBy.java @@ -29,13 +29,31 @@ import java.io.Serializable; ** Bean representing an element of a query order-by clause. ** *******************************************************************************/ -public class QFilterOrderBy implements Serializable +public class QFilterOrderBy implements Serializable, Cloneable { private String fieldName; private boolean isAscending = true; + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public QFilterOrderBy clone() + { + try + { + return (QFilterOrderBy) super.clone(); + } + catch(CloneNotSupportedException e) + { + throw new AssertionError(); + } + } + + + /******************************************************************************* ** Default no-arg constructor *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QQueryFilter.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QQueryFilter.java index 42321380..638f9cda 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QQueryFilter.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/query/QQueryFilter.java @@ -31,10 +31,48 @@ import java.util.List; * Full "filter" for a query - a list of criteria and order-bys * *******************************************************************************/ -public class QQueryFilter implements Serializable +public class QQueryFilter implements Serializable, Cloneable { private List criteria = new ArrayList<>(); - private List orderBys = new ArrayList<>(); + private List orderBys = new ArrayList<>(); + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public QQueryFilter clone() + { + try + { + QQueryFilter clone = (QQueryFilter) super.clone(); + + if(criteria != null) + { + clone.criteria = new ArrayList<>(); + for(QFilterCriteria criterion : criteria) + { + clone.criteria.add(criterion.clone()); + } + } + + if(orderBys != null) + { + clone.orderBys = new ArrayList<>(); + for(QFilterOrderBy orderBy : orderBys) + { + clone.orderBys.add(orderBy.clone()); + } + } + + return clone; + } + catch(CloneNotSupportedException e) + { + throw new AssertionError(); + } + }