package org.easyrec.controller.dev;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import org.easyrec.model.core.web.RemoteTenant;
import org.easyrec.model.plugin.LogEntry;
import org.easyrec.service.domain.TypeMappingService;
import org.easyrec.store.dao.plugin.LogEntryDAO;
import org.easyrec.store.dao.web.RemoteTenantDAO;
import org.easyrec.util.core.MessageBlock;
import org.easyrec.util.core.Security;
import org.easyrec.utils.PageStringGenerator;
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.util.Collection;
import java.util.List;
/**
* @author dmann
*/
public class PluginLogController extends MultiActionController {
private RemoteTenantDAO remoteTenantDAO;
private TypeMappingService typeMappingService;
private LogEntryDAO logEntryDAO;
public void setRemoteTenantDAO(RemoteTenantDAO remoteTenantDAO) {
this.remoteTenantDAO = remoteTenantDAO;
}
public void setLogEntryDAO(LogEntryDAO logEntryDAO) {
this.logEntryDAO = logEntryDAO;
}
public void setTypeMappingService(TypeMappingService typeMappingService) {
this.typeMappingService = typeMappingService;
}
private static final String VIEW_PLUGIN_LOGS = "viewPluginLogs";
private static final String EMPTY_PLUGIN_LOGS = "emptypluginlogs";
public static class LogEntryExtended extends LogEntry {
private String assocType;
private String tenant;
private String operator;
public LogEntryExtended(LogEntry logEntry, String assocType, String tenant, String operator) {
super(logEntry.getId(), logEntry.getTenantId(), logEntry.getPluginId(), logEntry.getStartDate(),
logEntry.getEndDate(), logEntry.getAssocTypeId(), logEntry.getConfiguration(),
logEntry.getStatistics());
this.assocType = assocType;
this.tenant = tenant;
this.operator = operator;
}
public String getAssocType() {
return assocType;
}
public String getTenant() {
return tenant;
}
public String getOperator() {
return operator;
}
}
public ModelAndView viewpluginlogs(HttpServletRequest request, HttpServletResponse httpServletResponse) {
String tenantId = ServletUtils.getSafeParameter(request, "tenantId", "");
String operatorId = ServletUtils.getSafeParameter(request, "operatorId", "");
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", "viewpluginlogs");
String type = ServletUtils.getSafeParameter(request, "type", "");
mav.addObject("type", type);
RemoteTenant remoteTenant = remoteTenantDAO.get(operatorId, tenantId);
mav.addObject("tenant", remoteTenant != null ? remoteTenant.getStringId() : tenantId);
PageStringGenerator psg = new PageStringGenerator(
request.getRequestURL() + "?" + request.getQueryString());
int logCount;
if ((remoteTenant == null) || ("all".equals(type)))
logCount = logEntryDAO.getNumberOfLogEntries();
else
logCount = logEntryDAO.getNumberOfLogEntriesForTenant(remoteTenant.getId());
List<LogEntry> logEntries;
if ((remoteTenant == null) || ("all".equals(type)))
logEntries = logEntryDAO.getLogEntries(siteNumber * psg.getNumberOfItemsPerPage(),
psg.getNumberOfItemsPerPage());
else
logEntries = logEntryDAO.getLogEntriesForTenant(remoteTenant.getId(),
siteNumber * psg.getNumberOfItemsPerPage(),
psg.getNumberOfItemsPerPage());
Collection<LogEntryExtended> extendedLogEntries = Collections2.transform(logEntries, new Function<LogEntry,
LogEntryExtended>() {
public LogEntryExtended apply(LogEntry input) {
RemoteTenant remoteTenant = remoteTenantDAO.get(input.getTenantId());
String assocType = "";
if (input.getAssocTypeId() == 0) { // special handling for assocType "Archive"
assocType = "ARCHIVE";
} else {
assocType = typeMappingService.getAssocTypeById(input.getTenantId(), input.getAssocTypeId());
}
String tenant = remoteTenant.getStringId();
String operator = remoteTenant.getOperatorId();
return new LogEntryExtended(input, assocType, tenant, operator);
}
});
mav.addObject("pageMenuString", psg.getPageMenuString(logCount, siteNumber));
mav.addObject("logCount", logCount);
mav.addObject("logEntries", extendedLogEntries);
return mav;
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, VIEW_PLUGIN_LOGS, MSG.ERROR);
}
}
public ModelAndView emptypluginlogs(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)) {
logEntryDAO.deleteLogEntries();
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, EMPTY_PLUGIN_LOGS, MSG.SUCCESS);
} else {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, EMPTY_PLUGIN_LOGS, MSG.ERROR);
}
}
}