/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.wui.common; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.roda.core.RodaCoreFactory; import org.roda.core.data.exceptions.RODAException; import org.roda.core.data.v2.log.LogEntry; import org.roda.core.data.v2.log.LogEntry.LOG_ENTRY_STATE; import org.roda.core.data.v2.log.LogEntryParameter; import org.roda.core.data.v2.user.User; import org.roda.core.util.IdUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class ControllerAssistantUtils { private static final Logger LOGGER = LoggerFactory.getLogger(ControllerAssistantUtils.class); private ControllerAssistantUtils() { // do nothing } protected static void registerAction(User user, String actionComponent, String actionMethod, String relatedObjectId, long duration, LOG_ENTRY_STATE state, Object... parameters) { LogEntry logEntry = createLogEntry(user, actionComponent, actionMethod, relatedObjectId, duration, state, parameters); registerAction(logEntry); } private static LogEntry createLogEntry(User user, String actionComponent, String actionMethod, String relatedObjectId, long duration, LOG_ENTRY_STATE state, Object... parameters) { List<LogEntryParameter> logParameters = new ArrayList<>(); if (parameters != null && parameters.length > 0) { if ((parameters.length % 2) != 0) { LOGGER.warn( "registerAction (actionComponent={}, actionMethod={}) failed because parameters array must have pairs of elements (even length)", actionComponent, actionMethod); } else { for (int i = 0; i < parameters.length; i += 2) { Object key = parameters[i]; Object value = parameters[i + 1]; logParameters.add( new LogEntryParameter(key != null ? key.toString() : "null", value != null ? value.toString() : "null")); } } } return createLogEntry(user, actionComponent, actionMethod, relatedObjectId, duration, state, logParameters); } private static LogEntry createLogEntry(User user, String actionComponent, String actionMethod, String relatedObjectId, long duration, LOG_ENTRY_STATE state, List<LogEntryParameter> parameters) { LogEntry logEntry = new LogEntry(); logEntry.setId(IdUtils.createUUID()); logEntry.setAddress(user.getIpAddress()); logEntry.setUsername(user.getName()); logEntry.setActionComponent(actionComponent); logEntry.setActionMethod(actionMethod); logEntry.setParameters(parameters); logEntry.setDuration(duration); logEntry.setDatetime(new Date()); logEntry.setRelatedObjectID(relatedObjectId); logEntry.setState(state); return logEntry; } private static void registerAction(LogEntry logEntry) { try { RodaCoreFactory.getModelService().addLogEntry(logEntry, RodaCoreFactory.getLogPath()); } catch (RODAException e) { LOGGER.error("Error registering action (actionComponent={}, actionMethod={})", logEntry.getActionComponent(), logEntry.getActionMethod(), e); } } }