package org.infinispan.scripting.impl; import org.infinispan.commands.write.ClearCommand; import org.infinispan.commands.write.PutKeyValueCommand; import org.infinispan.commands.write.RemoveCommand; import org.infinispan.commands.write.ReplaceCommand; import org.infinispan.context.InvocationContext; import org.infinispan.factories.annotations.Inject; import org.infinispan.interceptors.BaseCustomAsyncInterceptor; import org.infinispan.scripting.ScriptingManager; /** * Intercepts updates to the script caches, extracts metadata and updates the compiled scripts * accordingly * * @author Tristan Tarrant * @since 7.2 */ public final class ScriptingInterceptor extends BaseCustomAsyncInterceptor { private ScriptingManagerImpl scriptingManager; @Inject public void init(ScriptingManager scriptingManager) { this.scriptingManager = (ScriptingManagerImpl) scriptingManager; } @Override public Object visitPutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable { String name = (String) command.getKey(); String script = (String) command.getValue(); command.setMetadata(scriptingManager.compileScript(name, script)); return invokeNext(ctx, command); } @Override public Object visitClearCommand(InvocationContext ctx, ClearCommand command) throws Throwable { scriptingManager.compiledScripts.clear(); return invokeNext(ctx, command); } @Override public Object visitRemoveCommand(InvocationContext ctx, RemoveCommand command) throws Throwable { scriptingManager.compiledScripts.remove(command.getKey()); return invokeNext(ctx, command); } @Override public Object visitReplaceCommand(InvocationContext ctx, ReplaceCommand command) throws Throwable { String name = (String) command.getKey(); String script = (String) command.getNewValue(); command.setMetadata(scriptingManager.compileScript(name, script)); return invokeNext(ctx, command); } }