package org.araqne.logdb.groovy.impl; import groovy.util.GroovyScriptEngine; import java.io.IOException; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Invalidate; import org.apache.felix.ipojo.annotations.Provides; import org.apache.felix.ipojo.annotations.Validate; import org.araqne.logdb.groovy.GroovyParserScript; import org.araqne.logdb.groovy.GroovyParserScriptRegistry; import org.osgi.framework.BundleContext; @Component(name = "logdb-groovy-parser-script-registry") @Provides public class GroovyParserScriptRegistryImpl implements GroovyParserScriptRegistry { private BundleContext bc; private GroovyScriptEngine gse; public GroovyParserScriptRegistryImpl(BundleContext bc) { this.bc = bc; } @Validate public void start() throws IOException { String path = ScriptPaths.getPath("parser_scripts"); gse = new GroovyScriptEngine(path); } @Invalidate public void stop() { if (gse != null) gse.getGroovyClassLoader().clearCache(); } @Override public GroovyParserScript newScript(String scriptName) { try { Class<?> clazz = gse.loadScriptByName(scriptName + ".groovy"); Object o = clazz.newInstance(); GroovyParserScript script = (GroovyParserScript) o; script.setBundleContext(bc); return script; } catch (Throwable t) { throw new IllegalStateException("cannot instanciate groovy parser script: " + scriptName, t); } } }