package AgentSystemPluginAPI.Contract;
import AgentSystemPluginAPI.Services.IAgent;
import EnvironmentPluginAPI.Exceptions.TechnicalException;
import AgentSystemPluginAPI.Services.IPluginServiceProvider;
import java.util.List;
/**
* Plugins must implement this interface in order to be recognized by MARLA.
* <br/><br/>
* MARLA uses this interface to identify and load agent system plugins. It expects a correctly working, no-argument constructor to
* create an instance of the plugin descriptor. It uses it for those 2 purposes:<br/>
* - retrieving information about the plugin, i.e for displaying in the GUI<br/>
* - obtaining instances of the agent system for use in cycles.
*/
public interface IAgentSystemPluginDescriptor {
/**
* The MARLA system uses this method to obtain the environment plugin's description. May be called repeatedly.
*
* @return != null
*/
public TAgentSystemDescription getDescription();
/**
* Gets a list of all internal agents of this agent system.
*
* @return A list containing all agents that are used by this AgentSystem.
*/
public List<IAgent> getInternalAgents();
/**
* The MARLA system uses this method to obtain the plugin's agent system implementation.<br/>
* The returned instance will be used for an environment session. It passes an instance of a plugin service provider, which is never null. The agent system may use it to
* load/save agents and settings and to access information.
*
* @see IPluginServiceProvider
* @param serviceProvider != null
* @return != null
*/
public IAgentSystem getInstance(IPluginServiceProvider serviceProvider) throws TechnicalException;
}