package org.joget.workflow.controller; import org.joget.workflow.model.AuditTrail; import org.joget.workflow.model.dao.AuditTrailDao; import org.joget.commons.util.DatabaseResourceBundleMessageSource; import java.io.IOException; import java.io.Writer; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class AuditTrialJsonController { @Autowired private AuditTrailDao auditTrailDao; @Autowired private DatabaseResourceBundleMessageSource drbms; @RequestMapping("/json/workflow/audittrail/list") public void auditTrailList(Writer writer, @RequestParam(value = "callback", required = false) String callback, @RequestParam(value = "dateFrom", required = false) String dateFrom, @RequestParam(value = "dateTo", required = false) String dateTo, @RequestParam(value = "sort", required = false) String sort, @RequestParam(value = "desc", required = false) Boolean desc, @RequestParam(value = "start", required = false) Integer start, @RequestParam(value = "rows", required = false) Integer rows) throws IOException, JSONException { List<AuditTrail> auditTrailList; if (dateFrom != null && dateFrom.trim().length() > 0 && dateTo != null && dateTo.trim().length() > 0) { String[] dateFroms = dateFrom.split("-"); String[] dateTos = dateTo.split("-"); Calendar dateFromCal = Calendar.getInstance(); dateFromCal.set(Integer.parseInt(dateFroms[0]), Integer.parseInt(dateFroms[1]) - 1, Integer.parseInt(dateFroms[2]), 0, 0, 0); Calendar dateToCal = Calendar.getInstance(); dateToCal.set(Integer.parseInt(dateTos[0]), Integer.parseInt(dateTos[1]) - 1, Integer.parseInt(dateTos[2]), 23, 59, 59); auditTrailList = auditTrailDao.getAuditTrails("where e.timestamp >= ? and e.timestamp <= ?", new Object[]{dateFromCal.getTime(), dateToCal.getTime()}, sort, desc, start, rows); } else { auditTrailList = auditTrailDao.getAuditTrails(sort, desc, start, rows); } JSONObject jsonObject = new JSONObject(); for (AuditTrail auditTrail : auditTrailList) { Map data = new HashMap(); data.put("id", auditTrail.getId()); data.put("username", auditTrail.getUsername()); data.put("clazz", drbms.getMessage(auditTrail.getClazz(), null, auditTrail.getClazz(), Locale.getDefault())); data.put("method", drbms.getMessage(auditTrail.getMethod(), null, auditTrail.getMethod(), Locale.getDefault())); data.put("message", auditTrail.getMessage()); data.put("timestamp", auditTrail.getTimestamp()); jsonObject.accumulate("data", data); } if (dateFrom != null && dateFrom.trim().length() > 0 && dateTo != null && dateTo.trim().length() > 0) { String[] dateFroms = dateFrom.split("-"); String[] dateTos = dateTo.split("-"); Calendar dateFromCal = Calendar.getInstance(); dateFromCal.set(Integer.parseInt(dateFroms[0]), Integer.parseInt(dateFroms[1]) - 1, Integer.parseInt(dateFroms[2]), 0, 0, 0); Calendar dateToCal = Calendar.getInstance(); dateToCal.set(Integer.parseInt(dateTos[0]), Integer.parseInt(dateTos[1]) - 1, Integer.parseInt(dateTos[2]), 23, 59, 59); jsonObject.accumulate("total", auditTrailDao.count("where timestamp >= ? and timestamp <=?", new Object[]{dateFromCal.getTime(), dateToCal.getTime()})); } else { jsonObject.accumulate("total", auditTrailDao.count("", null)); } jsonObject.accumulate("start", start); jsonObject.accumulate("sort", sort); jsonObject.accumulate("desc", desc); if (callback != null && callback.trim().length() != 0) { writer.write(callback + "(" + jsonObject + ");"); } else { jsonObject.write(writer); } } }