001package org.intellimate.izou.sdk.frameworks.presence.provider;
002
003import org.intellimate.izou.events.EventModel;
004import org.intellimate.izou.identification.IdentificationManager;
005import org.intellimate.izou.resource.ResourceModel;
006import org.intellimate.izou.sdk.frameworks.common.resources.ResourcesProviderBase;
007import org.intellimate.izou.sdk.frameworks.presence.resources.PresenceResource;
008
009import java.util.ArrayList;
010import java.util.List;
011import java.util.Optional;
012
013/**
014 * provides the resources
015 * @author LeanderK
016 * @version 1.0
017 */
018public interface PresenceResourceProvider extends ResourcesProviderBase, PresenceProvider {
019    @Override
020    default List<? extends ResourceModel> announceResources() {
021        List<ResourceModel> resources = new ArrayList<>();
022        IdentificationManager.getInstance().getIdentification(this)
023                .ifPresent(id -> {
024                    resources.add(new PresenceResource(id));
025                });
026        return resources;
027    }
028
029    /**
030     * generates the resources
031     * @param resourceModel the resourceModel
032     * @param event the Event
033     * @return a Stream containing the resourceModel(s)
034     */
035    @Override
036    default Optional<? extends ResourceModel> generateResource(ResourceModel resourceModel, Optional<EventModel> event) {
037        if (resourceModel.getResourceID().equals(PresenceResource.ID)) {
038            return createPresenceResource();
039        } else {
040            return ResourcesProviderBase.super.generateResource(resourceModel, event);
041        }
042    }
043
044    /**
045     * creates a PresenceResource ready to return
046     * @return the resource
047     */
048    default Optional<PresenceResource> createPresenceResource() {
049        return IdentificationManager.getInstance()
050                .getIdentification(this)
051                .map(id -> new PresenceResource(id, new Presence(getLevel(), isPresent(), isStrict(), isKnown())));
052    }
053}