From 17526effda099757713036ee0bf5afdf95a464c5 Mon Sep 17 00:00:00 2001 From: Jan Lolling Date: Thu, 11 May 2023 20:07:55 +0200 Subject: [PATCH 1/2] Filter improved: use , or ; to distinguish between OR and AND --- doc/tGoogleAnalytics4Input.docx | Bin 2357963 -> 2357925 bytes pom.xml | 2 +- .../ga4/v1/FilterExpressionBuilder.java | 144 ++++++++++++++++++ .../ga4/v1/GoogleAnalyticsInput.java | 92 ++++++++--- 4 files changed, 217 insertions(+), 21 deletions(-) diff --git a/doc/tGoogleAnalytics4Input.docx b/doc/tGoogleAnalytics4Input.docx index 66cc7438454278e22b16dc88155797ed2d31b487..17b60055b26690688d7953ada7602e0962ba1f51 100644 GIT binary patch delta 23447 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

&Y*;`IK$~_izJGck_@@i{X1>XN1&9$m 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

vfe-Wdf|GJy< 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 OU4mKe@gl&$vHt^}HQh1* diff --git a/pom.xml b/pom.xml index 1986797..0df6d7a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.jlo.talendcomp.google jlo-talendcomp-google-analytics4 - 1.3 + 2.0 GoogleAnalytics Talend Component for GA4 UTF-8 diff --git a/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/FilterExpressionBuilder.java b/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/FilterExpressionBuilder.java index ea0a7b1..3817505 100644 --- a/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/FilterExpressionBuilder.java +++ b/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/FilterExpressionBuilder.java @@ -1,7 +1,11 @@ package de.jlo.talendcomp.google.analytics.ga4.v1; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import com.google.analytics.data.v1beta.Filter; import com.google.analytics.data.v1beta.FilterExpression; +import com.google.analytics.data.v1beta.FilterExpressionList; import com.google.analytics.data.v1beta.NumericValue; import com.google.analytics.data.v1beta.Filter.NumericFilter; import com.google.analytics.data.v1beta.Filter.StringFilter; @@ -10,6 +14,7 @@ public class FilterExpressionBuilder { + private static Logger log = LogManager.getLogger(FilterExpressionBuilder.class); /* Filter operators for String and Numeric filters */ private static final String FILTER_OP_EXACT = "=="; @@ -21,9 +26,145 @@ public class FilterExpressionBuilder { private static final String STRING_FILTER_OP_REGEX_EXCL = "!~"; private static final String STRING_FILTER_OP_CONTAINS = "=@"; private static final String STRING_FILTER_OP_CONTAINS_NOT = "!@"; + + /** + * Setup filter expressions in th UA style + * Examples: + * dim1==value1,dim2==value2,dim3!=value3 + * dim1==value1;dim2==value2;dim3!=value3 + * + * comma means OR + * semicolon means AND + * + * @param completeFilter + * @param isNumericFilter if true, otherwise it is a String filter + * @return FilterExpression object + * @throws Exception + */ + public static FilterExpression buildCombinedFilterExpression(String completeFilter, boolean isNumericFilter) throws Exception { + FilterExpression.Builder fb = FilterExpression.newBuilder(); + FilterExpressionList.Builder list = FilterExpressionList.newBuilder(); + boolean or = false; + boolean and = false; + StringBuilder oneFilterTerm = new StringBuilder(); + for (int i = 0, n = completeFilter.length(); i < n; i++) { + char c = completeFilter.charAt(i); + if (c == '(') { + // start of group + throw new Exception("Invalid filter: " + completeFilter + ". Groups are not allowed yet! Position: " + i); + } else if (c == ')') { + throw new Exception("Invalid filter: " + completeFilter + ". Groups are not allowed yet! Position: " + i); + } else if (c == ',') { + // OR found + if (i == 0) { + throw new Exception("Invalid filter: " + completeFilter + ". <,> cannot be the first char! Position: " + i); + } + if (and) { + throw new Exception("Invalid filter: " + completeFilter + ". OR(,) found with previous AND. Within one filter you can only combine all with OR (,) or all with AND(;). Position: " + i); + } + if (oneFilterTerm.length() == 0) { + throw new Exception("Invalid filter: " + completeFilter + ". OR(,) found but no filter term as operand before. Position: " + i); + } + or = true; + String term = oneFilterTerm.toString(); + oneFilterTerm.setLength(0); + if (isNumericFilter) { + if (log.isDebugEnabled()) { + log.debug("add numeric filter term: " + term); + } + list.addExpressions(buildNumericFilterExpression(term)); + } else { + if (log.isDebugEnabled()) { + log.debug("add string filter term: " + term); + } + list.addExpressions(buildStringFilterExpression(term)); + } + } else if (c == ';') { + // AND found + if (i == 0) { + throw new Exception("Invalid filter: " + completeFilter + ". <;> cannot be the first char! Position: " + i); + } + if (or) { + throw new Exception("Invalid filter: " + completeFilter + ". AND(;) found with previous OR. Within one filter you can only combine all with OR (,) or all with AND(;). Position: " + i); + } + if (oneFilterTerm.length() == 0) { + throw new Exception("Invalid filter: " + completeFilter + ". AND(;) found but no filter term as operand before. Position: " + i); + } + and = true; + String term = oneFilterTerm.toString(); + oneFilterTerm.setLength(0); + if (isNumericFilter) { + if (log.isDebugEnabled()) { + log.debug("add numeric filter term: " + term); + } + list.addExpressions(buildNumericFilterExpression(term)); + } else { + if (log.isDebugEnabled()) { + log.debug("add string filter term: " + term); + } + list.addExpressions(buildStringFilterExpression(term)); + } + } else if (c == ' ') { + // skip this + continue; + } else if (i == n-1) { + // we are at the very last char + if (oneFilterTerm.length() == 0) { + throw new Exception("Invalid filter: " + completeFilter + ". Found end of filter but no filter term as operand before. Position: " + i); + } + if (and == false && or == false) { + String term = oneFilterTerm.toString(); + oneFilterTerm.setLength(0); + if (isNumericFilter) { + if (log.isDebugEnabled()) { + log.debug("add numeric filter term: " + term); + } + list.addExpressions(buildNumericFilterExpression(term)); + } else { + if (log.isDebugEnabled()) { + log.debug("add string filter term: " + term); + } + list.addExpressions(buildStringFilterExpression(term)); + } + } else { + String term = oneFilterTerm.toString(); + oneFilterTerm.setLength(0); + if (isNumericFilter) { + if (log.isDebugEnabled()) { + log.debug("add numeric filter term: " + term); + } + list.addExpressions(buildNumericFilterExpression(term)); + } else { + if (log.isDebugEnabled()) { + log.debug("add string filter term: " + term); + } + list.addExpressions(buildStringFilterExpression(term)); + } + if (and) { + if (log.isDebugEnabled()) { + log.debug("set AND filter list with count expressions: " + list.getExpressionsCount()); + } + fb.setAndGroup(list); + } else if (or) { + if (log.isDebugEnabled()) { + log.debug("set OR filter list with count expressions: " + list.getExpressionsCount()); + } + fb.setOrGroup(list); + } + } + } else { + // we must be in a filter term + oneFilterTerm.append(c); + } + } + return fb.build(); + } public static FilterExpression buildStringFilterExpression(String oneFilterTerm) throws Exception { if (oneFilterTerm != null && oneFilterTerm.trim().isEmpty() == false) { + if (log.isDebugEnabled()) { + log.debug("Build string filter for term: " + oneFilterTerm); + } String operand1 = null; String operand2 = null; FilterExpression fe = null; @@ -160,6 +301,9 @@ public static FilterExpression buildStringFilterExpression(String oneFilterTerm) public static FilterExpression buildNumericFilterExpression(String oneFilterTerm) throws Exception { if (oneFilterTerm != null && oneFilterTerm.trim().isEmpty() == false) { + if (log.isDebugEnabled()) { + log.debug("Build numeric filter for term: " + oneFilterTerm); + } String operand1 = null; String operand2 = null; FilterExpression fe = null; diff --git a/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/GoogleAnalyticsInput.java b/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/GoogleAnalyticsInput.java index efb17c8..ba42756 100644 --- a/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/GoogleAnalyticsInput.java +++ b/src/main/java/de/jlo/talendcomp/google/analytics/ga4/v1/GoogleAnalyticsInput.java @@ -23,7 +23,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.concurrent.TimeUnit; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; @@ -44,6 +46,7 @@ public class GoogleAnalyticsInput extends GoogleAnalyticsBase { + private static Logger log = LogManager.getLogger(GoogleAnalyticsInput.class); private static final Map clientCache = new HashMap(); private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); private String startDate = null; @@ -539,19 +542,43 @@ private void setupDimensions() { } } - private void setupDimensionFilters() throws Exception { reportRequestBuilder.clearDimensionFilter(); - if (dimensionFilters != null) { - String[] filters = dimensionFilters.split(","); - if (filters.length > 1) { - for (String f : filters) { - reportRequestBuilder.setDimensionFilter(FilterExpression.newBuilder() - .setAndGroup(FilterExpressionList.newBuilder() - .addExpressions(FilterExpressionBuilder.buildStringFilterExpression(f)))); + if (dimensionFilters != null && dimensionFilters.trim().isEmpty() == false) { + if (dimensionFilters.contains(";")) { + String[] filters = dimensionFilters.split(";"); + if (filters.length > 1) { + FilterExpressionList.Builder flb = FilterExpressionList.newBuilder(); + for (String f : filters) { + if (f.contains(",")) { + throw new Exception("DimensionFilter cannot have AND(;) and OR(,) operators together. Invalid filter term: " + f); + } + flb.addExpressions(FilterExpressionBuilder.buildStringFilterExpression(f)); + } + reportRequestBuilder.setDimensionFilter(FilterExpression + .newBuilder() + .setAndGroup(flb.build())); + } else if (filters.length == 1) { + reportRequestBuilder.setDimensionFilter(FilterExpressionBuilder.buildStringFilterExpression(filters[0])); + } + } else if (dimensionFilters.contains(",")) { + String[] filters = dimensionFilters.split(","); + if (filters.length > 1) { + FilterExpressionList.Builder flb = FilterExpressionList.newBuilder(); + for (String f : filters) { + if (f.contains(";")) { + throw new Exception("DimensionFilter cannot have OR(,) and AND(;) operators together. Invalid filter term: " + f); + } + flb.addExpressions(FilterExpressionBuilder.buildStringFilterExpression(f)); + } + reportRequestBuilder.setDimensionFilter(FilterExpression + .newBuilder() + .setOrGroup(flb.build())); + } else if (filters.length == 1) { + reportRequestBuilder.setDimensionFilter(FilterExpressionBuilder.buildStringFilterExpression(filters[0])); } - } else if (filters.length == 1) { - reportRequestBuilder.setDimensionFilter(FilterExpressionBuilder.buildStringFilterExpression(filters[0])); + } else { + reportRequestBuilder.setDimensionFilter(FilterExpressionBuilder.buildStringFilterExpression(dimensionFilters)); } } } @@ -559,16 +586,41 @@ private void setupDimensionFilters() throws Exception { private void setupMetricsFilters() throws Exception { reportRequestBuilder.clearMetricFilter(); - if (metricFilters != null) { - String[] filters = metricFilters.split(","); - if (filters.length > 1) { - for (String f : filters) { - reportRequestBuilder.setMetricFilter(FilterExpression.newBuilder() - .setAndGroup(FilterExpressionList.newBuilder() - .addExpressions(FilterExpressionBuilder.buildNumericFilterExpression(f)))); + if (metricFilters != null && metricFilters.trim().isEmpty() == false) { + if (metricFilters.contains(";")) { + String[] filters = metricFilters.split(";"); + if (filters.length > 1) { + FilterExpressionList.Builder flb = FilterExpressionList.newBuilder(); + for (String f : filters) { + if (f.contains(",")) { + throw new Exception("MetricFilter cannot have AND(;) and OR(,) operators together. Invalid filter term: " + f); + } + flb.addExpressions(FilterExpressionBuilder.buildNumericFilterExpression(f)); + } + reportRequestBuilder.setMetricFilter(FilterExpression + .newBuilder() + .setAndGroup(flb.build())); + } else if (filters.length == 1) { + reportRequestBuilder.setMetricFilter(FilterExpressionBuilder.buildNumericFilterExpression(filters[0])); } - } else if (filters.length == 1) { - reportRequestBuilder.setMetricFilter(FilterExpressionBuilder.buildNumericFilterExpression(filters[0])); + } else if (metricFilters.contains(",")) { + String[] filters = metricFilters.split(","); + if (filters.length > 1) { + FilterExpressionList.Builder flb = FilterExpressionList.newBuilder(); + for (String f : filters) { + if (f.contains(";")) { + throw new Exception("MetricFilter cannot have OR(,) and AND(;) operators together. Invalid filter term: " + f); + } + flb.addExpressions(FilterExpressionBuilder.buildNumericFilterExpression(f)); + } + reportRequestBuilder.setMetricFilter(FilterExpression + .newBuilder() + .setOrGroup(flb.build())); + } else if (filters.length == 1) { + reportRequestBuilder.setMetricFilter(FilterExpressionBuilder.buildNumericFilterExpression(filters[0])); + } + } else { + reportRequestBuilder.setMetricFilter(FilterExpressionBuilder.buildNumericFilterExpression(metricFilters)); } } } From 22a9ac2e9e0b431c111071a1e16aac9487ee63a7 Mon Sep 17 00:00:00 2001 From: Jan Lolling Date: Thu, 11 May 2023 20:08:08 +0200 Subject: [PATCH 2/2] doc updated --- doc/tGoogleAnalytics4Input.docx | Bin 2357925 -> 2358067 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/tGoogleAnalytics4Input.docx b/doc/tGoogleAnalytics4Input.docx index 17b60055b26690688d7953ada7602e0962ba1f51..cb29de16b83435a0563bcdd230441807eaafb8c7 100644 GIT binary patch delta 11226 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 delta 11114 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 H*ZThh-2r*T