001package org.intellimate.izou.sdk.frameworks.presence.provider; 002 003import org.intellimate.izou.identification.IdentificationManager; 004import org.intellimate.izou.sdk.frameworks.presence.events.LeavingEvent; 005import org.intellimate.izou.sdk.frameworks.presence.events.PresenceEvent; 006import org.intellimate.izou.sdk.util.FireEvent; 007 008import java.util.ArrayList; 009import java.util.List; 010import java.util.Optional; 011 012/** 013 * util functions for providing presence 014 * @author LeanderK 015 * @version 1.0 016 */ 017public interface PresenceHelper extends PresenceProvider, FireEvent { 018 /** 019 * fires the presence-Event 020 * @param known whether it is highly likely that the user cause the event and not a random person 021 */ 022 default void firePresence(boolean known) { 023 firePresence(new ArrayList<>(), known); 024 } 025 026 /** 027 * fires the presence-Event 028 * @param descriptors the descriptors 029 * @param known whether it is highly likely that the user cause the event and not a random person 030 */ 031 default void firePresence(List<String> descriptors, boolean known) { 032 Optional<PresenceEvent> startEvent = IdentificationManager.getInstance().getIdentification(this) 033 .flatMap(id -> PresenceEvent.createPresenceEvent(id, isStrict(), known, isFirstEncountering(), descriptors)); 034 if (!startEvent.isPresent()) { 035 getContext().getLogger().error("unable to fire startEvent"); 036 } else { 037 fire(startEvent.get(), 5); 038 } 039 } 040 041 /** 042 * fires the leaving-Event 043 */ 044 default void fireLeaving() { 045 Optional<LeavingEvent> startEvent = IdentificationManager.getInstance().getIdentification(this) 046 .flatMap(id -> LeavingEvent.createLeavingEvent(id, isStrict(), new ArrayList<>())); 047 if (!startEvent.isPresent()) { 048 getContext().getLogger().error("unable to fire startEvent"); 049 } else { 050 fire(startEvent.get(), 5); 051 } 052 } 053}