mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
[FEATURE][EXPERIMENTAL] Зависимости модулей
This commit is contained in:
parent
f316b0598b
commit
efa1bf0dd7
3 changed files with 56 additions and 16 deletions
|
@ -8,27 +8,37 @@ public abstract class LauncherModule {
|
|||
|
||||
private Map<Class<? extends Event>, EventHandler> eventMap = new HashMap<>();
|
||||
protected LauncherModulesManager modulesManager;
|
||||
protected final LauncherModuleInfo moduleInfo;
|
||||
protected ModulesConfigManager modulesConfigManager;
|
||||
InitPhase initPhase = InitPhase.CREATED;
|
||||
|
||||
protected LauncherModule() {
|
||||
moduleInfo = new LauncherModuleInfo("UnknownModule");
|
||||
}
|
||||
|
||||
public enum InitPhase
|
||||
{
|
||||
CREATED,
|
||||
INIT,
|
||||
FINISH
|
||||
}
|
||||
public enum EventAction
|
||||
{
|
||||
CONTINUE,
|
||||
INTERRUPT
|
||||
}
|
||||
@FunctionalInterface
|
||||
public interface EventHandler<T extends Event>
|
||||
{
|
||||
EventAction event(T e) throws Exception;
|
||||
void event(T e) throws Exception;
|
||||
}
|
||||
public interface Event
|
||||
public static class Event
|
||||
{
|
||||
public boolean isCancel() {
|
||||
return cancel;
|
||||
}
|
||||
|
||||
public Event cancel() {
|
||||
this.cancel = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
protected boolean cancel;
|
||||
}
|
||||
|
||||
public InitPhase getInitPhase() {
|
||||
|
@ -43,7 +53,8 @@ Map<Class<? extends Event>, EventHandler> setContext(LauncherModulesContext cont
|
|||
this.modulesConfigManager = context.getModulesConfigManager();
|
||||
return eventMap;
|
||||
}
|
||||
public abstract LauncherModuleInfo init();
|
||||
|
||||
public abstract void init();
|
||||
|
||||
<T extends Event> boolean registerEvent(EventHandler<T> handle, Class<T> tClass)
|
||||
{
|
||||
|
@ -51,7 +62,8 @@ <T extends Event> boolean registerEvent(EventHandler<T> handle, Class<T> tClass)
|
|||
return true;
|
||||
}
|
||||
|
||||
<T extends Event> EventAction callEvent(T event) throws Exception
|
||||
@SuppressWarnings("unchecked")
|
||||
<T extends Event> void callEvent(T event) throws Exception
|
||||
{
|
||||
Class<? extends Event> tClass = event.getClass();
|
||||
for(Map.Entry<Class<? extends Event>, EventHandler> e : eventMap.entrySet())
|
||||
|
@ -59,11 +71,9 @@ <T extends Event> EventAction callEvent(T event) throws Exception
|
|||
|
||||
if(e.getKey().isAssignableFrom(tClass))
|
||||
{
|
||||
@SuppressWarnings("unchecked")
|
||||
EventAction action = e.getValue().event(event);
|
||||
if(action.equals(EventAction.INTERRUPT)) return action;
|
||||
e.getValue().event(event);
|
||||
if(event.isCancel()) return;
|
||||
}
|
||||
}
|
||||
return EventAction.CONTINUE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,36 @@
|
|||
import pro.gravit.utils.Version;
|
||||
|
||||
public class LauncherModuleInfo {
|
||||
public String name;
|
||||
public Version version;
|
||||
public final String name;
|
||||
public final Version version;
|
||||
public final int priority;
|
||||
public final String[] dependencies;
|
||||
|
||||
public LauncherModuleInfo(String name, Version version) {
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
this.priority = 0;
|
||||
this.dependencies = new String[]{};
|
||||
}
|
||||
|
||||
public LauncherModuleInfo(String name) {
|
||||
this.name = name;
|
||||
this.version = new Version(1,0,0);
|
||||
this.priority = 0;
|
||||
this.dependencies = new String[]{};
|
||||
}
|
||||
|
||||
public LauncherModuleInfo(String name, Version version, String[] dependencies) {
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
this.priority = 0;
|
||||
this.dependencies = dependencies;
|
||||
}
|
||||
|
||||
public LauncherModuleInfo(String name, Version version, int priority, String[] dependencies) {
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
this.priority = priority;
|
||||
this.dependencies = dependencies;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,5 +19,5 @@ default <T extends LauncherModule> boolean containsModule(Class<? extends T> cl
|
|||
ClassLoader getModuleClassLoader();
|
||||
<T extends LauncherModule> T getModule(Class<? extends T> clazz);
|
||||
<T extends LauncherModule> T findModule(Class<? extends T> clazz, Predicate<Version> versionPredicate);
|
||||
<T extends LauncherModule.Event> LauncherModule.EventAction invokeEvent(T event) throws Exception;
|
||||
<T extends LauncherModule.Event> void invokeEvent(T event) throws Exception;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue