in plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/SetEventOccurenceCountAction.java [51:129]
public int execute(Action action, Event event) {
final Condition pastEventCondition = (Condition) action.getParameterValues().get("pastEventCondition");
Condition andCondition = new Condition(definitionsService.getConditionType("booleanCondition"));
andCondition.setParameter("operator", "and");
ArrayList<Condition> conditions = new ArrayList<Condition>();
Condition eventCondition = (Condition) pastEventCondition.getParameter("eventCondition");
definitionsService.resolveConditionType(eventCondition);
conditions.add(eventCondition);
Condition c = new Condition(definitionsService.getConditionType("eventPropertyCondition"));
c.setParameter("propertyName", "profileId");
c.setParameter("comparisonOperator", "equals");
c.setParameter("propertyValue", event.getProfileId());
conditions.add(c);
// may be current event is already persisted and indexed, in that case we filter it from the count to increment it manually at the end
Condition eventIdFilter = new Condition(definitionsService.getConditionType("eventPropertyCondition"));
eventIdFilter.setParameter("propertyName", "itemId");
eventIdFilter.setParameter("comparisonOperator", "notEquals");
eventIdFilter.setParameter("propertyValue", event.getItemId());
conditions.add(eventIdFilter);
Integer numberOfDays = (Integer) pastEventCondition.getParameter("numberOfDays");
String fromDate = (String) pastEventCondition.getParameter("fromDate");
String toDate = (String) pastEventCondition.getParameter("toDate");
if (numberOfDays != null) {
Condition numberOfDaysCondition = new Condition(definitionsService.getConditionType("eventPropertyCondition"));
numberOfDaysCondition.setParameter("propertyName", "timeStamp");
numberOfDaysCondition.setParameter("comparisonOperator", "greaterThan");
numberOfDaysCondition.setParameter("propertyValueDateExpr", "now-" + numberOfDays + "d");
conditions.add(numberOfDaysCondition);
}
if (fromDate != null) {
Condition startDateCondition = new Condition();
startDateCondition.setConditionType(definitionsService.getConditionType("eventPropertyCondition"));
startDateCondition.setParameter("propertyName", "timeStamp");
startDateCondition.setParameter("comparisonOperator", "greaterThanOrEqualTo");
startDateCondition.setParameter("propertyValueDate", fromDate);
conditions.add(startDateCondition);
}
if (toDate != null) {
Condition endDateCondition = new Condition();
endDateCondition.setConditionType(definitionsService.getConditionType("eventPropertyCondition"));
endDateCondition.setParameter("propertyName", "timeStamp");
endDateCondition.setParameter("comparisonOperator", "lessThanOrEqualTo");
endDateCondition.setParameter("propertyValueDate", toDate);
conditions.add(endDateCondition);
}
andCondition.setParameter("subConditions", conditions);
long count = persistenceService.queryCount(andCondition, Event.ITEM_TYPE);
LocalDateTime fromDateTime = null;
if (fromDate != null) {
Calendar fromDateCalendar = DatatypeConverter.parseDateTime(fromDate);
fromDateTime = LocalDateTime.ofInstant(fromDateCalendar.toInstant(), ZoneId.of("UTC"));
}
LocalDateTime toDateTime = null;
if (toDate != null) {
Calendar toDateCalendar = DatatypeConverter.parseDateTime(toDate);
toDateTime = LocalDateTime.ofInstant(toDateCalendar.toInstant(), ZoneId.of("UTC"));
}
LocalDateTime eventTime = LocalDateTime.ofInstant(event.getTimeStamp().toInstant(),ZoneId.of("UTC"));
if (inTimeRange(eventTime, numberOfDays, fromDateTime, toDateTime)) {
count++;
}
if (updatePastEvents(event, (String) pastEventCondition.getParameter("generatedPropertyKey"), count)) {
return EventService.PROFILE_UPDATED;
}
return EventService.NO_CHANGE;
}