// Path: src/main/java/org/intellimate/izou/identification/Identification.java
// @AddonAccessible
// public interface Identification {
//     /**
//      * returns the ID of the owner of the Identification
//      * @return a String containing the ID
//      */
//     String getID();
// 
//     /**
//      * this method returns whether this Identification Object was created by the owner
//      * @return true if created by the owner, false if not
//      */
//     boolean isCreatedFromInstance();
// }
// 
// Path: src/main/java/org/intellimate/izou/identification/IllegalIDException.java
// @AddonAccessible
// //This Exception is more of a placeholder, but in future version we will certainly check if an ID is valid
// public class IllegalIDException extends RuntimeException {
//     /**
//      * Constructs a new exception with {@code null} as its detail message.
//      * The cause is not initialized, and may subsequently be initialized by a
//      * call to {@link #initCause}.
//      */
//     public IllegalIDException() {
//         super("The Identification does not fulfil the requirements");
//     }
// 
//     /**
//      * Constructs a new exception with the specified detail message.  The
//      * cause is not initialized, and may subsequently be initialized by
//      * a call to {@link #initCause}.
//      *
//      * @param message the detail message. The detail message is saved for
//      *                later retrieval by the {@link #getMessage()} method.
//      */
//     public IllegalIDException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/org/intellimate/izou/resource/ResourceModel.java
// @AddonAccessible
// public interface ResourceModel<T> extends Identifiable {
//     /**
//      * returns the associated Resource data if set.
//      * This method is thread-safe.
//      * @return null or resource data
//      */
//     T getResource();
// 
//     /**
//      * returns the ID of the Resource.
//      * This method is thread-safe.
//      * @return a String containing the ID of the resource
//      */
//     String getResourceID();
// 
//     /**
//      * returns the provider of the Resource.
//      * This method is thread-safe.
//      * @return an Identification describing the provider of the Resource or null if not set
//      */
//     Identification getProvider();
// 
//     /**
//      * returns whether a provider is set
//      * @return true if this resource has an provider, false if not
//      */
//     boolean hasProvider();
// 
//     /**
//      * returns the consumer of the object (if set).
//      * @return null or an Identification describing the consumer of the Resource
//      */
//     Identification getConsumer();
// }
// 
// Path: src/main/java/org/intellimate/izou/resource/ResourceBuilderModel.java
// @AddonAccessible
// @SuppressWarnings("UnusedDeclaration")
// public interface ResourceBuilderModel extends Identifiable {
//     /**
//      * This method is called to register what resources the object provides.
//      * just pass a List of Resources without Data in it.
//      *
//      * @return a List containing the resources the object provides
//      */
//     List<? extends ResourceModel> announceResources();
//     /**
//      * this method is called to register for what Events it wants to provide Resources.
//      * <p>
//      * The Event has to be in the following format: It should contain only one Descriptor and and one Resource with the
//      * ID "description", which contains an description of the Event.
//      * </p> 
//      * @return a List containing ID's for the Events
//      */
//     List<? extends EventModel<?>> announceEvents();
//     /**
//      * This method is called when an object wants to get a Resource.
//      *
//      * <p>
//      * Don't use the Resources provided as arguments, they are just the requests.
//      * There is a timeout after 1 second.
//      * </p> 
//      * @param resources a list of resources without data
//      * @param event if an event caused the action, it gets passed. It can also be null.
//      * @return a list of resources with data
//      */
//     List<ResourceModel> provideResource(List<? extends ResourceModel> resources, Optional<EventModel> event);
// }


import org.intellimate.izou.identification.Identification;
import org.intellimate.izou.identification.IllegalIDException;
import org.intellimate.izou.resource.ResourceModel;
import org.intellimate.izou.resource.ResourceBuilderModel;
import ro.fortsoft.pf4j.AddonAccessible;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
package org.intellimate.izou.system.context;



/**
 * @author Leander Kurscheidt
 * @version 1.0
 */
@AddonAccessible
public interface Resources {
    /**
     * registers a ResourceBuilder.
     * <p>
     *  this method registers all the events, resourcesID etc.
     * </p>
     * @param resourceBuilder an instance of the ResourceBuilder
     * @throws IllegalIDException not yet implemented
     */
    void registerResourceBuilder(ResourceBuilderModel resourceBuilder) throws IllegalIDException;

    /**
     * unregister a ResourceBuilder.
     * <p>
     * this method unregisters all the events, resourcesID etc.
     * @param resourceBuilder an instance of the ResourceBuilder
     */
// Path: src/main/java/org/intellimate/izou/identification/Identification.java
// @AddonAccessible
// public interface Identification {
//     /**
//      * returns the ID of the owner of the Identification
//      * @return a String containing the ID
//      */
//     String getID();
// 
//     /**
//      * this method returns whether this Identification Object was created by the owner
//      * @return true if created by the owner, false if not
//      */
//     boolean isCreatedFromInstance();
// }
// 
// Path: src/main/java/org/intellimate/izou/identification/IllegalIDException.java
// @AddonAccessible
// //This Exception is more of a placeholder, but in future version we will certainly check if an ID is valid
// public class IllegalIDException extends RuntimeException {
//     /**
//      * Constructs a new exception with {@code null} as its detail message.
//      * The cause is not initialized, and may subsequently be initialized by a
//      * call to {@link #initCause}.
//      */
//     public IllegalIDException() {
//         super("The Identification does not fulfil the requirements");
//     }
// 
//     /**
//      * Constructs a new exception with the specified detail message.  The
//      * cause is not initialized, and may subsequently be initialized by
//      * a call to {@link #initCause}.
//      *
//      * @param message the detail message. The detail message is saved for
//      *                later retrieval by the {@link #getMessage()} method.
//      */
//     public IllegalIDException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/org/intellimate/izou/resource/ResourceModel.java
// @AddonAccessible
// public interface ResourceModel<T> extends Identifiable {
//     /**
//      * returns the associated Resource data if set.
//      * This method is thread-safe.
//      * @return null or resource data
//      */
//     T getResource();
// 
//     /**
//      * returns the ID of the Resource.
//      * This method is thread-safe.
//      * @return a String containing the ID of the resource
//      */
//     String getResourceID();
// 
//     /**
//      * returns the provider of the Resource.
//      * This method is thread-safe.
//      * @return an Identification describing the provider of the Resource or null if not set
//      */
//     Identification getProvider();
// 
//     /**
//      * returns whether a provider is set
//      * @return true if this resource has an provider, false if not
//      */
//     boolean hasProvider();
// 
//     /**
//      * returns the consumer of the object (if set).
//      * @return null or an Identification describing the consumer of the Resource
//      */
//     Identification getConsumer();
// }
// 
// Path: src/main/java/org/intellimate/izou/resource/ResourceBuilderModel.java
// @AddonAccessible
// @SuppressWarnings("UnusedDeclaration")
// public interface ResourceBuilderModel extends Identifiable {
//     /**
//      * This method is called to register what resources the object provides.
//      * just pass a List of Resources without Data in it.
//      *
//      * @return a List containing the resources the object provides
//      */
//     List<? extends ResourceModel> announceResources();
//     /**
//      * this method is called to register for what Events it wants to provide Resources.
//      * <p>
//      * The Event has to be in the following format: It should contain only one Descriptor and and one Resource with the
//      * ID "description", which contains an description of the Event.
//      * </p> 
//      * @return a List containing ID's for the Events
//      */
//     List<? extends EventModel<?>> announceEvents();
//     /**
//      * This method is called when an object wants to get a Resource.
//      *
//      * <p>
//      * Don't use the Resources provided as arguments, they are just the requests.
//      * There is a timeout after 1 second.
//      * </p> 
//      * @param resources a list of resources without data
//      * @param event if an event caused the action, it gets passed. It can also be null.
//      * @return a list of resources with data
//      */
//     List<ResourceModel> provideResource(List<? extends ResourceModel> resources, Optional<EventModel> event);
// }


// Path: src/main/java/org/intellimate/izou/system/context/Resources.java
import org.intellimate.izou.identification.Identification;
import org.intellimate.izou.identification.IllegalIDException;
import org.intellimate.izou.resource.ResourceModel;
import org.intellimate.izou.resource.ResourceBuilderModel;
import ro.fortsoft.pf4j.AddonAccessible;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

package org.intellimate.izou.system.context;



/**
 * @author Leander Kurscheidt
 * @version 1.0
 */
@AddonAccessible
public interface Resources {
    /**
     * registers a ResourceBuilder.
     * <p>
     *  this method registers all the events, resourcesID etc.
     * </p>
     * @param resourceBuilder an instance of the ResourceBuilder
     * @throws IllegalIDException not yet implemented
     */
    void registerResourceBuilder(ResourceBuilderModel resourceBuilder) throws IllegalIDException;

    /**
     * unregister a ResourceBuilder.
     * <p>
     * this method unregisters all the events, resourcesID etc.
     * @param resourceBuilder an instance of the ResourceBuilder
     */
    void unregisterResourceBuilder(ResourceBuilderModel resourceBuilder);