public boolean process(List<Object> appearAttrs, long occurTime) { // initialize window if (processor == null) { processor = nextProcessor(occurTime); LOG.info("initialized a new window {}", processor); } processor.process(appearAttrs, occurTime); AbsenceWindowProcessor.OccurStatus status = processor.checkStatus(); boolean expired = processor.checkExpired(); boolean isAbsenceAlert = false; if (expired) { if (status == AbsenceWindowProcessor.OccurStatus.absent) { // send alert LOG.info("==================="); LOG.info("|| Absence Alert ||"); LOG.info("==================="); isAbsenceAlert = true; // figure out next window and set the new window } processor = nextProcessor(occurTime); LOG.info("created a new window {}", processor); } return isAbsenceAlert; }