Skip to content

Commit

Permalink
#30192 adding the date range parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
jdotcms committed Oct 1, 2024
1 parent 3a6cd47 commit dcfbb41
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ public CubeJSQuery parseQueryToCubeQuery(final AnalyticsQuery query) {
private Collection<CubeJSQuery.TimeDimension> parseTimeDimensions(final String timeDimensions) {
final TimeDimensionParser.TimeDimension parsedTimeDimension = TimeDimensionParser.parseTimeDimension(timeDimensions);
return Stream.of(
new CubeJSQuery.TimeDimension(parsedTimeDimension.getTerm(),
parsedTimeDimension.getField())
new CubeJSQuery.TimeDimension(parsedTimeDimension.getDimension(),
parsedTimeDimension.getGranularity())
).collect(Collectors.toList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,42 +20,60 @@ private TimeDimensionParser() {
// singleton
}

private static final String FIELD_REGEX = "(\\w+\\.\\w+)\\s+(\\w+)";
private static final String FIELD_REGEX = "^(\\w+\\.\\w+)\\s+(\\w+)(?:\\s+(.+))?$";
private static final Pattern PATTERN = Pattern.compile(FIELD_REGEX);

public static class TimeDimension {
private String term;
private String field;

public TimeDimension(final String term, final String field) {
this.term = term;
this.field = field;
private final String dimension;
private final String granularity;
private final String dateRange;

public TimeDimension(final String dimension, final String granularity) {
this.dimension = dimension;
this.granularity = granularity;
this.dateRange = null;
}

public TimeDimension(final String dimension, final String granularity, final String dateRange) {
this.dimension = dimension;
this.granularity = granularity;
this.dateRange = dateRange;
}

public String getDimension() {
return dimension;
}

public String getTerm() {
return term;
public String getGranularity() {
return granularity;
}

public String getField() {
return field;
public String getDateRange() {
return dateRange;
}

@Override
public String toString() {
return "Term: " + term + ", Field: " + field;
return "TimeDimension{" +
"dimension='" + dimension + '\'' +
", granularity='" + granularity + '\'' +
", dateRange='" + dateRange + '\'' +
'}';
}
}

public static TimeDimension parseTimeDimension(final String expression) throws IllegalArgumentException {
// cache and checked
final Pattern pattern = Pattern.compile(FIELD_REGEX);
final Matcher matcher = pattern.matcher(expression.trim());
final Matcher matcher = PATTERN.matcher(expression.trim());

if (matcher.matches()) {

final String term = matcher.group(1); // Ex: Events.day
final String field = matcher.group(2); // Ex: day
final String dimension = matcher.group(1); // Ex: Events.day
final String granularity = matcher.group(2); // Ex: day
final String dateRange = matcher.group(3); // Ex: date range

return new TimeDimension(term, field);
return new TimeDimension(dimension, granularity, dateRange);
} else {
throw new IllegalArgumentException("The expression is not valid. This should be the format 'Term Field'.");
}
Expand Down
13 changes: 13 additions & 0 deletions dotCMS/src/main/java/com/dotcms/cube/CubeJSQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -381,19 +381,32 @@ public Builder timeDimensions(Collection<TimeDimension> timeDimensions) {
public static class TimeDimension {
String dimension;
String granularity;
String dateRange;

public TimeDimension(String dimension, String granularity) {
this.dimension = dimension;
this.granularity = granularity;
}

public TimeDimension(final String dimension,
final String granularity,
final String dateRange) {
this.dimension = dimension;
this.granularity = granularity;
this.dateRange = dateRange;
}

public String getDimension() {
return dimension;
}

public String getGranularity() {
return granularity;
}

public String getDateRange() {
return dateRange;
}
}

public static class OrderItem {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.dotcms.analytics.query;

import org.junit.Assert;
import org.junit.Test;

/**
* Test for {@link TimeDimensionParser}
* @author jsanca
*/
public class TimeDimensionParserTest {

/**
* Parse a simple query with only dimension and granularity
* Events.day day
* should return Events.day and day
*/
@Test
public void test_parseTimeDimension_dimension_plus_granularity_should_be_OK() throws Exception {
final TimeDimensionParser.TimeDimension result =
TimeDimensionParser.parseTimeDimension("Events.day day");

Assert.assertNotNull(result);
Assert.assertEquals("Events.day", result.getDimension());
Assert.assertEquals("day", result.getGranularity());
Assert.assertNull(result.getDateRange());
}

/**
* Parse a simple query with only dimension and granularity
* Events.day day
* should return Events.day and day
*/
@Test
public void test_parseTimeDimension_dimension_plus_granularity_and_dateRange_should_be_OK() throws Exception {
final TimeDimensionParser.TimeDimension result =
TimeDimensionParser.parseTimeDimension("Events.day day This Week");

Assert.assertNotNull(result);
Assert.assertEquals("Events.day", result.getDimension());
Assert.assertEquals("day", result.getGranularity());
Assert.assertEquals("This Week", result.getDateRange());
}
}

0 comments on commit dcfbb41

Please sign in to comment.