package crash;
import java.util.Collections;
import java.util.Map;
import org.crsh.plugin.PluginContext;
import org.crsh.plugin.PluginDiscovery;
import org.crsh.plugin.PluginLifeCycle;
import org.crsh.plugin.ServiceLoaderDiscovery;
import org.crsh.vfs.FS;
import org.crsh.vfs.Path;
import play.Application;
import play.Configuration;
import play.api.Plugin;
/**
* Simple plugin which initializes CRaSH at application startup.
*
* @author Tim Dettrick <t.dettrick@uq.edu.au>
*
*/
public class CrashPlugin extends PluginLifeCycle implements Plugin {
public static final String CONFIG_KEY = "crash";
private final Application application;
private PluginContext context = null;
public CrashPlugin(Application application) {
super();
this.application = application;
}
@Override
public boolean enabled() {
return application.configuration().getBoolean("crash.enabled", true);
}
public PluginContext getContext() {
// If initialized, return context
if (context != null) return context;
try {
PluginDiscovery discovery = new ServiceLoaderDiscovery(
application.classloader());
context = new PluginContext(discovery, getAttributes(),
(new FS())
.mount(application.classloader(), Path.get("/crash/commands/"))
.mount(application.classloader(), Path.get("/crash/")),
(new FS())
.mount(application.classloader(), Path.get("/crash/")),
application.classloader());
return context;
} catch (Exception e) {
// We can safely call this fatal
throw new RuntimeException(e);
}
}
@Override
public void onStart() {
start(getContext());
}
@Override
public void onStop() {
stop();
}
protected Map<String, Object> getAttributes() {
Configuration config = application.configuration().getConfig(CONFIG_KEY);
if (config == null)
return Collections.emptyMap();
return config.asMap();
}
}