package com.w67clement.mineapi.system;
import com.w67clement.mineapi.system.modules.InvalidModuleException;
import com.w67clement.mineapi.system.modules.Module;
import com.w67clement.mineapi.system.modules.ModuleLoader;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
public class ModuleManager
{
private ModuleLoader loader;
public ModuleManager(ModuleLoader loader)
{
this.loader = loader;
}
/**
* Gets an MineAPI's module.
*
* @param name Name of the module.
*
* @return Object of the module.
*/
public Module getModule(String name)
{
return this.loader.getModules().get(name);
}
/**
* Check is module enabled by name.
*
* @param name Name of the module.
*
* @return Module Enable value.
*/
public boolean isModuleEnabled(String name)
{
return this.isModuleEnabled(getModule(name));
}
/**
* Check is module enabled by module Object.
*
* @param module Object of the module.
*
* @return Module enable value.
*/
public boolean isModuleEnabled(Module module)
{
return module != null && module.isEnabled();
}
public Module loadModule(File file)
{
try
{
return this.loader.loadModule(file);
}
catch (InvalidModuleException e)
{
e.printStackTrace();
}
return null;
}
public void enableModule(Module module)
{
this.loader.enableModule(module);
}
public void enableModules()
{
this.getModules().stream().filter(module -> !this.isModuleEnabled(module)).forEach(this::enableModule);
}
public void disableModule(Module module)
{
this.loader.disableModule(module);
}
public void disableModules()
{
this.getModules().stream().filter(this::isModuleEnabled).forEach(this::disableModule);
}
/**
* Lists the modules.
*
* @return All loaded modules.
*/
public List<Module> getModules()
{
return this.loader.getModules().keySet().stream().map(this::getModule).collect(Collectors.toList());
}
}