/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.easyrec.controller.dev;
import com.google.common.collect.Maps;
import org.easyrec.model.plugin.PluginVO;
import org.easyrec.plugin.Progress;
import org.easyrec.plugin.container.PluginRegistry;
import org.easyrec.plugin.generator.Generator;
import org.easyrec.plugin.generator.GeneratorConfiguration;
import org.easyrec.plugin.model.PluginId;
import org.easyrec.plugin.model.Version;
import org.easyrec.plugin.stats.GeneratorStatistics;
import org.easyrec.store.dao.plugin.PluginDAO;
import org.easyrec.store.dao.web.RemoteTenantDAO;
import org.easyrec.util.core.MessageBlock;
import org.easyrec.util.core.Security;
import org.easyrec.utils.servlet.ServletUtils;
import org.easyrec.vocabulary.MSG;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
/**
*
* @author dmann
*/
public class PluginsController extends MultiActionController {
private RemoteTenantDAO remoteTenantDAO;
private PluginDAO pluginDAO;
private PluginRegistry pluginRegistry;
public void setRemoteTenantDAO(RemoteTenantDAO remoteTenantDAO) {
this.remoteTenantDAO = remoteTenantDAO;
}
public void setPluginDAO(PluginDAO pluginDAO) {
this.pluginDAO = pluginDAO;
}
public void setPluginRegistry(PluginRegistry pluginRegistry) {
this.pluginRegistry = pluginRegistry;
}
private static final String VIEW_PLUGINS = "plugins";
private static final String VIEW_PLUGIN_DESCR = "plugindescription";
private static final String PLUGIN_UPLOAD = "pluginupload";
private static final String PLUGIN_INSTALL = "plugininstall";
private static final String PLUGIN_STOP = "pluginstop";
private static final String PLUGIN_DELETE = "plugindelete";
private static final String PLUGIN_CHANGESTATE = "pluginchangestate";
public ModelAndView plugins(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "plugins");
mav.addObject("signedinOperatorId", Security.signedInOperatorId(request));
List<PluginVO> plugins = pluginDAO.loadPlugins();
Map<PluginId, Generator<GeneratorConfiguration, GeneratorStatistics>> generators = this.pluginRegistry
.getGenerators();
//for each generator, fetch Progress and ExecutionState
//put that into MAV
//display
Map<PluginId, String> executionStates = Maps.newHashMap();
Map<PluginId, Progress> progresses = Maps.newHashMap();
for (PluginId pluginID : generators.keySet()) {
Generator<GeneratorConfiguration, GeneratorStatistics> generator = generators.get(pluginID);
executionStates.put(pluginID, generator.getExecutionState().toString());
progresses.put(pluginID, generator.getProgress());
}
mav.addObject("pluginList", plugins);
mav.addObject("executionStates", executionStates);
mav.addObject("progresses", progresses);
return mav;
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, VIEW_PLUGINS, MSG.ERROR);
}
}
public ModelAndView pluginupload(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "pluginupload");
mav.addObject("tenantId", tenantId);
mav.addObject("operatorId", operatorId);
mav.addObject("signedinOperatorId", Security.signedInOperatorId(request));
return mav;
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, PLUGIN_UPLOAD, MSG.ERROR);
}
}
public ModelAndView plugininstall(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "plugins");
mav.addObject("signedinOperatorId", Security.signedInOperatorId(request));
String pluginId = ServletUtils.getSafeParameter(request, "pluginId", "");
String versionStr = ServletUtils.getSafeParameter(request, "version", "");
Version version = new Version(versionStr);
logger.info("Called plugin install! " + pluginId + ", " + version);
try {
pluginRegistry.installPlugin(new URI(pluginId), version);
} catch (URISyntaxException use) {
// should never happen since the id has been checkec several times before in the workflow
logger.error("PluginId is not a valid URI!");
}
return MessageBlock.createSingle(mav, MSG.PLUGIN_INSTALLED, PLUGIN_INSTALL, MSG.SUCCESS);
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, PLUGIN_INSTALL, MSG.ERROR);
}
}
public ModelAndView pluginchangestate(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "plugins");
String pluginId = ServletUtils.getSafeParameter(request, "pluginId", "");
String versionStr = ServletUtils.getSafeParameter(request, "version", "");
String checked = ServletUtils.getSafeParameter(request, "checked", ""); // Checkbox checked state
if (checked.equalsIgnoreCase("false")) {
pluginRegistry.deactivatePlugin(URI.create(pluginId), Version.parseVersion(versionStr));
} else {
pluginRegistry.installPlugin(URI.create(pluginId), Version.parseVersion(versionStr));
}
// this call is to refresh all tenant settings in the db
remoteTenantDAO.getAllTenants();
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, PLUGIN_CHANGESTATE, MSG.SUCCESS, "");
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, PLUGIN_CHANGESTATE, MSG.ERROR);
}
}
public ModelAndView plugindelete(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "plugins");
String pluginId = ServletUtils.getSafeParameter(request, "pluginId", "");
String versionStr = ServletUtils.getSafeParameter(request, "version", "");
// String pluginIdToStop = pluginId + "/"+ versionStr;
//
// Map<String, Generator<GeneratorConfiguration, GeneratorStatistics>> generators = this.pluginRegistry.getGenerators();
pluginRegistry.deletePlugin(URI.create(pluginId), Version.parseVersion(versionStr));
// this call is to refresh all tenant settings in the db
remoteTenantDAO.getAllTenants();
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, PLUGIN_DELETE, MSG.SUCCESS, "");
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, PLUGIN_DELETE, MSG.ERROR);
}
}
public ModelAndView pluginstop(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
String key = ServletUtils.getSafeParameter(request, "key", "");
String value = ServletUtils.getSafeParameter(request, "value", "");
String enabled = ServletUtils.getSafeParameter(request, "enabled", "");
String executiontime = ServletUtils.getSafeParameter(request, "executiontime", "");
String archiving = ServletUtils.getSafeParameter(request, "archiving", "");
String archivingtime = ServletUtils.getSafeParameter(request, "archivingtime", "");
String backtracking = ServletUtils.getSafeParameter(request, "backtracking", "");
String maxactions = ServletUtils.getSafeParameter(request, "maxactions", "");
String pluginsactive = ServletUtils.getSafeParameter(request, "pluginsactive", "");
int siteNumber = ServletUtils.getSafeParameter(request, "siteNumber", 0);
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
mav.setViewName("dev/page");
mav.addObject("page", "plugins");
String pluginId = ServletUtils.getSafeParameter(request, "pluginId", "");
String versionStr = ServletUtils.getSafeParameter(request, "version", "");
PluginId pluginIdToStop = new PluginId(pluginId, versionStr);
Map<PluginId, Generator<GeneratorConfiguration, GeneratorStatistics>> generators = this.pluginRegistry
.getGenerators();
Generator<GeneratorConfiguration, GeneratorStatistics> generator = generators.get(pluginIdToStop);
generator.abort();
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, "pluginstop", MSG.SUCCESS, "");
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, PLUGIN_STOP, MSG.ERROR);
}
}
public ModelAndView viewplugindescription(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
ModelAndView mav = new ModelAndView("page");
mav.addObject("title", "easyrec :: administration");
mav.addObject("operatorId", operatorId);
mav.addObject("tenantId", tenantId);
if (Security.isDeveloper(request)) {
String pluginId = ServletUtils.getSafeParameter(request, "pluginId", "");
String versionStr = ServletUtils.getSafeParameter(request, "version", "");
String descr = pluginRegistry.getPluginDescription(URI.create(pluginId), Version.parseVersion(versionStr));
mav.addObject("description", descr);
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, VIEW_PLUGIN_DESCR, MSG.SUCCESS, descr);
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, VIEW_PLUGIN_DESCR, MSG.ERROR);
}
}
}