package io.graceland.application; import com.google.common.collect.ImmutableList; import io.graceland.plugin.Plugin; /** * An application defines what plugins will be loaded into the {@link io.graceland.Platform}. * <p/> * It is the user-defined portion of the framework, determining what features, modules, plugins, resources, etc. are * loaded and used in this service. */ public interface Application { /** * Adds the plugin to the list of plugins that will be loaded. * * @param plugin The plugin to load. */ void loadPlugin(Plugin plugin); /** * Provides a list of loaded plugins for this application. Once requested, the list of plugins should not change. * <p/> * At least one plugin must be loaded. * * @return A list of plugins. */ ImmutableList<Plugin> getPlugins(); }