/* * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * bstefanescu */ package org.nuxeo.ecm.automation.core.operations.services; import java.security.Principal; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import org.nuxeo.ecm.automation.OperationContext; import org.nuxeo.ecm.automation.core.Constants; import org.nuxeo.ecm.automation.core.annotations.Context; import org.nuxeo.ecm.automation.core.annotations.Operation; import org.nuxeo.ecm.automation.core.annotations.OperationMethod; import org.nuxeo.ecm.automation.core.annotations.Param; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; import org.nuxeo.ecm.core.api.NuxeoPrincipal; import org.nuxeo.ecm.platform.audit.api.AuditLogger; import org.nuxeo.ecm.platform.audit.api.LogEntry; /** * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> */ @Operation(id = AuditLog.ID, category = Constants.CAT_SERVICES, label = "Log Event In Audit", description = "Log events into audit for each of the input document. The operation accept as input one ore more documents that are returned back as the output.", aliases = { "Audit.Log" }) public class AuditLog { public static final String ID = "Audit.LogEvent"; @Context protected AuditLogger logger; @Context protected OperationContext ctx; @Param(name = "event", widget = Constants.W_AUDIT_EVENT) protected String event; @Param(name = "category", required = false, values = { "Automation" }) protected String category = "Automation"; @Param(name = "comment", required = false, widget = Constants.W_MULTILINE_TEXT) protected String comment = ""; @OperationMethod public DocumentModel run(DocumentModel doc) { Principal principal = ctx.getPrincipal(); String uname = getPrincipalName(principal); LogEntry entry = newEntry(doc, uname, new Date()); logger.addLogEntries(Collections.singletonList(entry)); return doc; } @OperationMethod public DocumentModelList run(DocumentModelList docs) { List<LogEntry> entries = new ArrayList<LogEntry>(); Date date = new Date(); Principal principal = ctx.getPrincipal(); String uname = getPrincipalName(principal); for (DocumentModel doc : docs) { entries.add(newEntry(doc, uname, date)); } logger.addLogEntries(entries); return docs; } protected LogEntry newEntry(DocumentModel doc, String principal, Date date) { LogEntry entry = logger.newLogEntry(); entry.setEventId(event); entry.setEventDate(new Date()); entry.setCategory(category); entry.setDocUUID(doc.getId()); entry.setDocPath(doc.getPathAsString()); entry.setComment(comment); entry.setPrincipalName(principal); entry.setDocType(doc.getType()); entry.setRepositoryId(doc.getRepositoryName()); entry.setDocLifeCycle(doc.getCurrentLifeCycleState()); return entry; } private String getPrincipalName(Principal principal) { String uname; if (principal instanceof NuxeoPrincipal) { uname = ((NuxeoPrincipal) principal).getActingUser(); } else { uname = principal.getName(); } return uname; } }