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}