package org.bonitasoft.forms.server.util; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.bonitasoft.console.common.server.utils.BPMEngineException; import org.bonitasoft.engine.bpm.process.ProcessDefinitionNotFoundException; import org.bonitasoft.forms.client.model.FormFieldValue; public class FormLogger implements IFormLogger { protected Logger LOGGER; public FormLogger(String className) { LOGGER = Logger.getLogger(className); } @Override public void log(Level level, String message, Map<String, Object> context) { this.log(level, message, null, context); } @Override public void log(Level level, String message, Throwable e, Map<String, Object> context) { if (!isLoggable(level)) { return; } FormContextUtil formContextUtil = new FormContextUtil(context); String prefixMessage = ""; if (formContextUtil.getSession() != null && formContextUtil.getUserName() != null) { prefixMessage += "Username<" + formContextUtil.getUserName() + "> "; } if (formContextUtil.getFormName() != null) { prefixMessage += "Form<" + formContextUtil.getFormName() + "> "; } HashMap<String, FormFieldValue> submittedFields = formContextUtil.getSubmittedFields(); if (!submittedFields.isEmpty()) { prefixMessage += "Submitted Fields<"; String fieldStringRepresentation = getFormFieldStringRepresentation("", submittedFields); prefixMessage += fieldStringRepresentation + "> "; } try { // in case of process instantiation if (formContextUtil.getProcessDefinitionId() != null) { prefixMessage += "Process<" + formContextUtil.getProcessName(); if (formContextUtil.getProcessVersion() != null) { prefixMessage += " " + formContextUtil.getProcessVersion(); } prefixMessage += "> "; } else if (formContextUtil.getTaskId() != null) { prefixMessage += "Task<" + formContextUtil.getTaskName() + "> "; } } catch (ProcessDefinitionNotFoundException e1) { prefixMessage += "Process<" + formContextUtil.getProcessDefinitionId() + "> "; } catch (BPMEngineException e1) { prefixMessage += "Process<" + formContextUtil.getProcessDefinitionId() + "> "; } if (!prefixMessage.isEmpty()) { if (message == null) { message = prefixMessage; } else { message = prefixMessage + " " + message; } } internalLog(level, message, e); } protected void internalLog(Level level, String message, Throwable e) { LOGGER.log(level, message, e); } protected String getFormFieldStringRepresentation(String returnedStr, Map<String, FormFieldValue> submittedFields) { int i = 0; for (Map.Entry<String, FormFieldValue> entry : submittedFields.entrySet()) { i = i + 1; FormFieldValue fieldValue = entry.getValue(); String fieldName = entry.getKey(); if (!entry.getValue().hasChildWidgets()) { returnedStr += formatLogField(fieldName, fieldValue); } if (submittedFields.size() > 1) { returnedStr += " ; "; } } return returnedStr; } protected String formatLogField(String fieldName, FormFieldValue fieldValue) { return fieldName + " (" + fieldValue.getValueType() + ")" + " => " + fieldValue.getValue(); } @Override public boolean isLoggable(Level level) { return LOGGER.isLoggable(level); } }