@Override
  public void process(IPatternMatch match) {

    Map<String, Object> keyObjectMap = constraint.getSpecification().getKeyObjects(match);

    if (!keyObjectMap.isEmpty()) {

      ViolationKey key = constraint.getViolationKey(match);

      Violation violation = constraint.getViolation(key);

      if (violation == null) {
        violation = new Violation();
        violation.setConstraint(constraint);
        violation.setKeyObjects(constraint.getSpecification().getKeyObjects(match));
        violation.setMessage(
            IncQueryRuntimeHelper.getMessage(
                match, constraint.getSpecification().getMessageFormat()));
        constraint.addViolation(key, violation);

        constraint.notifyListenersViolationAppeared(violation);
      }

      if (violation.addMatch(match)) {
        violation.notifyListenersViolationEntryAppeared(match);
      }
    } else {
      logger.error("Error getting Violation key objects!");
    }
  }