package AgentSystemManagement.Interface;
import AgentSystemPluginAPI.Contract.IAgentSystem;
import AgentSystemPluginAPI.Contract.TAgentSystemDescription;
import EnvironmentPluginAPI.Exceptions.TechnicalException;
import PluginLoader.Interface.Exceptions.PluginNotReadableException;
import ZeroTypes.Settings.SettingException;
import java.util.List;
/**
* This Interface provides methods to create a new AgentSystem of a specified type,
* load a bunch of saved AgentSystems or just one specific AgentSystem
*/
public interface IAgentSystemManagement {
/**
* Returns a list of all available agent system plugins.
* @return empty if no plugins found.
*/
public List<TAgentSystemDescription> getAvailableAgentSystems() throws TechnicalException, SettingException, PluginNotReadableException;
/**
* Gets an instance of the specified agent system.
*
* @param toLoad the agent system plugin to load. != null
* @return the agent sytem instance != null
* @throws TechnicalException if any severe technical problems occur (i.e. insufficient file access)
* @throws PluginNotReadableException if the specified plugin does not fully abide the contract
*/
public IAgentSystem getAgentSystem(TAgentSystemDescription toLoad) throws TechnicalException, PluginNotReadableException, SettingException;
}