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}