All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.intellimate.izou.system.context.Output Maven / Gradle / Ivy

The newest version!
package org.intellimate.izou.system.context;

import org.intellimate.izou.events.EventModel;
import org.intellimate.izou.identification.Identifiable;
import org.intellimate.izou.identification.Identification;
import org.intellimate.izou.identification.IllegalIDException;
import org.intellimate.izou.output.OutputControllerModel;
import org.intellimate.izou.output.OutputExtensionModel;
import org.intellimate.izou.output.OutputPluginModel;
import ro.fortsoft.pf4j.AddonAccessible;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;

/**
 * @author Leander Kurscheidt
 * @version 1.0
 */
@AddonAccessible
public interface Output {
    /**
     * adds output extension to desired outputPlugin
     *
     * adds output extension to desired outputPlugin, so that the output-plugin can start and stop the outputExtension
     * task as needed. The outputExtension is specific to the output-plugin
     *
     * @param outputExtension the outputExtension to be added
     * @throws IllegalIDException not yet implemented
     */
    void addOutputExtension(OutputExtensionModel outputExtension) throws IllegalIDException;

    /**
     * removes the output-extension of id: extensionId from outputPluginList
     *
     * @param outputExtension the OutputExtension to remove
     */
    void removeOutputExtension(OutputExtensionModel outputExtension);

    /**
     * adds outputPlugin to outputPluginList, starts a new thread for the outputPlugin, and stores the future object in a HashMap
     * @param outputPlugin OutputPlugin to add
     * @throws IllegalIDException not yet implemented
     */
    void addOutputPlugin(OutputPluginModel outputPlugin) throws IllegalIDException;

    /**
     * removes the OutputPlugin and stops the thread
     * @param outputPlugin the outputPlugin to remove
     */
    void removeOutputPlugin(OutputPluginModel outputPlugin);

    /**
     * Adds a new {@link OutputControllerModel} to Izou.
     *
     * @param outputController The OutputController to add to Izou.
     */
    void addOutputController(OutputControllerModel outputController);

    /**
     * Removes an existing {@link OutputControllerModel} from Izou.
     *
     * @param outputController The OutputController to remove from to Izou.
     */
    void removeOutputController(OutputControllerModel outputController);

    /**
     * Returns a {@link Optional} object that may or may not contain the desired {@link OutputControllerModel},
     * depending on whether it was registered with Izou or not.
     *
     * @param identifiable The ID of the OutputController that should be retrieved.
     * @return The {@link Optional} object that may or may not contain the desired {@link OutputControllerModel},
     * depending on whether it was registered with Izou or not.
     */
    Optional getOutputController(Identifiable identifiable);

    /**
     * Returns all the associated OutputExtensions.
     *
     * @param outputPlugin the OutputPlugin to search for
     * @return a List of Identifications
     */
    List getAssociatedOutputExtension(OutputPluginModel outputPlugin);

    /**
     * starts every associated OutputExtension
     * @param outputPlugin the OutputPlugin to generate the Data for
     * @param t the argument or null
     * @param event the Event to generate for
     * @param  the type of the argument
     * @param  the return type
     * @return a List of Future-Objects
     */
     List> generateAllOutputExtensions(OutputPluginModel outputPlugin,
                                                                                   T t, EventModel event);

    /**
     * returns the ID of the Manager
     * @return an instance of Idedntification
     */
    Identification getManagerIdentification();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy