/* * This file is part of aion-emu <aion-emu.com>. * * aion-emu is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-emu is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-emu. If not, see <http://www.gnu.org/licenses/>. */ package com.aionemu.commons.scripting; import java.io.File; import java.util.Collection; import com.aionemu.commons.scripting.classlistener.ClassListener; /** * This class represents script context that can be loaded, unloaded, etc...<br> */ public interface ScriptContext { /** * Initializes script context. Calls the compilation task.<br> * After compilation static methods marked with {@link com.aionemu.commons.scripting.metadata.OnClassLoad} are * invoked */ public void init(); /** * Notifies all script classes that they must save their data and release resources to prevent memory leaks. It's * done via static methods with {@link com.aionemu.commons.scripting.metadata.OnClassUnload} annotation */ public void shutdown(); /** * Invokes {@link #shutdown()}, after that invokes {@link #init()}. Root folder remains the same, but new compiler * and classloader are used. */ public void reload(); /** * Returns the root directory for script engine. Only one script engine per root directory is allowed. * * @return root directory for script engine */ public File getRoot(); /** * Returns compilation result of this script context * * @return compilation result */ public CompilationResult getCompilationResult(); /** * Returns true if this script context is loaded * * @return true if context is initialized */ public boolean isInitialized(); /** * Sets files that represents jar files, they will be used as libraries * * @param files * that points to jar file, will be used as libraries */ public void setLibraries(Iterable<File> files); /** * Returns list of files that are used as libraries for this script context * * @return list of libraries */ public Iterable<File> getLibraries(); /** * Returns parent script context of this context. Returns null if none. * * @return parent Script context of this context or null */ public ScriptContext getParentScriptContext(); /** * Returns list of child contexts or null if no contextes present * * @return list of child contexts or null */ public Collection<ScriptContext> getChildScriptContexts(); /** * Adds child contexts to this context. If this context is initialized - chiled context will be initialized * immideatly. In other case child context will be just added and initialized when {@link #init()} would be called. * Duplicated child contexts are not allowed, in such case child will be ignored * * @param context * child context */ public void addChildScriptContext(ScriptContext context); /** * Sets the class listener for this script context. * * @param cl * class listener */ public void setClassListener(ClassListener cl); /** * Returns class listener associated with this ScriptContext.<br> * If it's null - returns parent classListener.<br> * If parent is null and classListener is null - it will set * {@link com.aionemu.commons.scripting.classlistener.DefaultClassListener} as class listener and return it * * @return Associated class listener */ public ClassListener getClassListener(); /** * Sets compiler class name for this script context.<br> * Compiler is not inherrited by children.<br> * * @param className * compiler class name */ public void setCompilerClassName(String className); /** * Returns compiler class name that will be used for this script context. * * @return compiler class name that will be used for tis script context */ public String getCompilerClassName(); /** * Tests if this ScriptContext is equal to another ScriptContext. Comparation is done by comparing root files and * parent contexts (if there is any parent) * * @param obj * object to compare with * @return result of comparation */ @Override public boolean equals(Object obj); /** * Returns hashCoded of this ScriptContext. Hashcode is calculated using root file and parent context(if available) * * @return hashcode */ @Override public int hashCode(); /** * This method overrides finalization to ensure that active script context will not be collected by GC. If such * situation happens - {@link #shutdown()} is called to ensure that resources were released. * * @throws Throwable * if something goes wrong during finalization */ void finalize() throws Throwable; }