001package org.intellimate.izou.sdk.frameworks.common.resources; 002 003import org.intellimate.izou.events.EventModel; 004import org.intellimate.izou.identification.IdentificationManager; 005import org.intellimate.izou.identification.IllegalIDException; 006import org.intellimate.izou.resource.ResourceBuilderModel; 007import org.intellimate.izou.resource.ResourceModel; 008import org.intellimate.izou.sdk.Context; 009import org.intellimate.izou.sdk.frameworks.permanentSoundOutput.resource.UsingSoundResource; 010 011import java.util.ArrayList; 012import java.util.List; 013import java.util.Optional; 014import java.util.stream.Collectors; 015 016/** 017 * base interface to build the resource-providing logic upon (if the project is big enough to have it moved out of 018 * the classes) 019 * @author LeanderK 020 * @version 1.0 021 */ 022public interface ResourcesProviderBase extends ResourceBuilderModel { 023 /** 024 * initialises the Interface 025 * @param context the context to use 026 */ 027 default void resourcesInit(Context context) { 028 try { 029 context.getResources().registerResourceBuilder(this); 030 } catch (IllegalIDException e) { 031 context.getLogger().error("unable to register ResourceBuilder", e); 032 } 033 } 034 035 @Override 036 default List<? extends ResourceModel> announceResources() { 037 List<ResourceModel> resources = new ArrayList<>(); 038 IdentificationManager.getInstance().getIdentification(this) 039 .map(UsingSoundResource::new) 040 .ifPresent(resources::add); 041 return resources; 042 } 043 044 @Override 045 default List<? extends EventModel<?>> announceEvents() { 046 return new ArrayList<>(); 047 } 048 049 @Override 050 default List<ResourceModel> provideResource(List<? extends ResourceModel> list, Optional<EventModel> event) { 051 return list.stream() 052 .map(resourceModel -> generateResource(resourceModel, event)) 053 .filter(Optional::isPresent) 054 .map(optional -> (ResourceModel) optional.get()) 055 .collect(Collectors.toList()); 056 } 057 058 /** 059 * generates the resources 060 * @param resourceModel the resourceModel 061 * @param event the Event 062 * @return a Stream containing the resourceModel(s) 063 */ 064 default Optional<? extends ResourceModel> generateResource(ResourceModel resourceModel, Optional<EventModel> event) { 065 return Optional.empty(); 066 } 067}