in services/src/main/java/org/apache/unomi/services/impl/goals/GoalsServiceImpl.java [135:193]
private void createRule(Goal goal, Condition event, String id, boolean testStart) {
Rule rule = new Rule(new Metadata(goal.getMetadata().getScope(), goal.getMetadata().getId() + id + "Event", "Auto generated rule for goal " + goal.getMetadata().getName(), ""));
Condition res = new Condition();
List<Condition> subConditions = new ArrayList<Condition>();
res.setConditionType(definitionsService.getConditionType("booleanCondition"));
res.setParameter("operator", "and");
res.setParameter("subConditions", subConditions);
subConditions.add(event);
Condition notExist = new Condition();
notExist.setConditionType(definitionsService.getConditionType("sessionPropertyCondition"));
notExist.setParameter("propertyName", "systemProperties.goals." + goal.getMetadata().getId() + id + "Reached");
notExist.setParameter("comparisonOperator", "missing");
subConditions.add(notExist);
if (testStart) {
Condition startExists = new Condition();
startExists.setConditionType(definitionsService.getConditionType("sessionPropertyCondition"));
startExists.setParameter("propertyName", "systemProperties.goals." + goal.getMetadata().getId() + "StartReached");
startExists.setParameter("comparisonOperator", "exists");
subConditions.add(startExists);
}
if (goal.getCampaignId() != null) {
Condition engagedInCampaign = new Condition();
engagedInCampaign.setConditionType(definitionsService.getConditionType("sessionPropertyCondition"));
engagedInCampaign.setParameter("propertyName", "systemProperties.campaigns." + goal.getCampaignId() + "Engaged");
engagedInCampaign.setParameter("comparisonOperator", "exists");
subConditions.add(engagedInCampaign);
}
rule.setCondition(res);
rule.getMetadata().setHidden(true);
Action action1 = new Action();
action1.setActionType(definitionsService.getActionType("setPropertyAction"));
String name = "systemProperties.goals." + goal.getMetadata().getId() + id + "Reached";
action1.setParameter("setPropertyName", name);
action1.setParameter("setPropertyValueCurrentEventTimestamp", true);
action1.setParameter("storeInSession", true);
Action action2 = new Action();
action2.setActionType(definitionsService.getActionType("setPropertyAction"));
action2.setParameter("setPropertyName", name);
action2.setParameter("setPropertyValueCurrentEventTimestamp", true);
action2.setParameter("storeInSession", false);
rule.setActions(Arrays.asList(action1, action2));
if (id.equals("Target")) {
Action action3 = new Action();
action3.setActionType(definitionsService.getActionType("sendEventAction"));
action3.setParameter("eventType", "goal");
action3.setParameter("eventTarget", goal);
action3.setParameter("eventProperties", new HashMap<String, Object>());
action3.setParameter("toBePersisted", false);
rule.setActions(Arrays.asList(action1,action2,action3));
}
rulesService.setRule(rule);
}