/** * Copyright (C) 2013-2016 The Rythm Engine project * for LICENSE and other details see: * https://github.com/rythmengine/rythmengine */ package org.rythmengine.internal; import org.rythmengine.internal.compiler.TemplateClass; import org.rythmengine.template.ITemplate; import org.rythmengine.template.TemplateBase; import org.rythmengine.utils.F; /** * Built in {@link IEvent event}s */ public class RythmEvents<RETURN, PARAM> implements IEvent<RETURN, PARAM> { /** * Right before template parsing started */ public static final IEvent<String, CodeBuilder> ON_PARSE = new RythmEvents<String, CodeBuilder>(true); /** * Before start building java source code. A good place to inject implicit * imports and render args */ public static final IEvent<Void, CodeBuilder> ON_BUILD_JAVA_SOURCE = new RythmEvents<Void, CodeBuilder>(true); /** * Before close generated java source code class. A good place to inject * implicit java source */ public static final IEvent<Void, CodeBuilder> ON_CLOSING_JAVA_CLASS = new RythmEvents<Void, CodeBuilder>(true); /** * Immediately after template get parsed and before final template java * source code generated */ public static final IEvent<Void, CodeBuilder> PARSED = new RythmEvents<Void, CodeBuilder>(true); /** * Triggered upon parse exception */ public static final IEvent<Void, TemplateClass> PARSE_FAILED = new RythmEvents<Void, TemplateClass>(true); /** * Right before template compilation started */ public static final IEvent<Void, String> ON_COMPILE = new RythmEvents<Void, String>(true); /** * Immediately after template compilation finished and before get cached on disk * A good place to do byte code enhancement */ public static final IEvent<byte[], byte[]> COMPILED = new RythmEvents<byte[], byte[]>(true); /** * Triggered upon compilation of a template class failed */ public static final IEvent<Void, TemplateClass> COMPILE_FAILED = new RythmEvents<Void, TemplateClass>(true); /** * Before template render start. A good place to set implicit render args */ public static final IEvent<Void, ITemplate> ON_RENDER = new RythmEvents<Void, ITemplate>(false); /** * After template rendered. */ public static final IEvent<Void, ITemplate> RENDERED = new RythmEvents<Void, ITemplate>(true); /** * Before tag invocation */ public static final IEvent<Void, F.T2<TemplateBase, ITemplate>> ON_TAG_INVOCATION = new RythmEvents<Void, F.T2<TemplateBase, ITemplate>>(false); /** * Triggered immediately when RythmEngine.invokeTemplate() method get called */ public static final IEvent<Void, TemplateBase> ENTER_INVOKE_TEMPLATE = new RythmEvents<Void, TemplateBase>(false); /** * Triggered after RythmEngine.invokeTemplate() method get called */ public static final IEvent<Void, TemplateBase> EXIT_INVOKE_TEMPLATE = new RythmEvents<Void, TemplateBase>(false); /** * Before tag invocation */ public static final IEvent<Void, F.T2<TemplateBase, ITemplate>> TAG_INVOKED = new RythmEvents<Void, F.T2<TemplateBase, ITemplate>>(false); /** * Render execution exception captured */ public static final IEvent<Boolean, F.T2<TemplateBase, Exception>> ON_RENDER_EXCEPTION = new RythmEvents<Boolean, F.T2<TemplateBase, Exception>>(true); private boolean safe = false; private RythmEvents() {} private RythmEvents(boolean isSafe) { safe = isSafe; } public boolean isSafe() { return safe; } @Override public RETURN trigger(IEventDispatcher eventBus, PARAM eventParam) { return (RETURN) eventBus.accept(this, eventParam); } }