/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.toolkit.core.setup;
import de.rcenvironment.toolkit.core.api.Toolkit;
import de.rcenvironment.toolkit.core.api.ToolkitException;
import de.rcenvironment.toolkit.core.spi.module.ToolkitModule;
/**
* A minimal interface to define a {@link Toolkit}'s configuration before its creation.
*
* @author Robert Mischke
*/
public interface ToolkitSetup {
/**
* Registers a {@link ToolkitModule}. The associated configuration object is automatically instantiated and returned (unless the type is
* {@link Void}). This object can either be ignored to use the default settings, or modified up to the final {@link Toolkit} creation,
* at which point the settings become final.
*
* @param <T> the module's signature
* @param <TModuleConf> the module's configuration object type
* @param module the module class to register
* @return the builder instance (for chaining)
* @throws ToolkitException on internal errors
*/
<T extends ToolkitModule<TModuleConf>, TModuleConf> TModuleConf configureModule(Class<T> module) throws ToolkitException;
}