/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.controller.audit;
import java.net.InetAddress;
import java.util.Date;
import java.util.List;
import org.jboss.as.controller.OperationContext.ResultAction;
import org.jboss.as.controller.registry.Resource;
import org.jboss.as.core.security.AccessMechanism;
import org.jboss.dmr.ModelNode;
/**
*
* @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
*/
abstract class AuditLogItem {
private final Date date = new Date();
private final String asVersion;
protected final boolean readOnly;
protected final boolean booting;
protected final String userId;
protected final String domainUUID;
protected final AccessMechanism accessMechanism;
protected final InetAddress remoteAddress;
AuditLogItem(String asVersion, boolean readOnly, boolean booting, String userId, String domainUUID, AccessMechanism accessMechanism,
InetAddress remoteAddress) {
this.asVersion = asVersion;
this.readOnly = readOnly;
this.booting = booting;
this.userId = userId;
this.domainUUID = domainUUID;
this.accessMechanism = accessMechanism;
this.remoteAddress = remoteAddress;
}
static AuditLogItem createModelControllerItem(String asVersion, boolean readOnly, boolean booting, ResultAction resultAction, String userId,
String domainUUID, AccessMechanism accessMechanism, InetAddress remoteAddress, Resource resultantModel,
List<ModelNode> operations) {
return new ModelControllerAuditLogItem(asVersion, readOnly, booting, resultAction, userId, domainUUID, accessMechanism, remoteAddress, resultantModel, operations);
}
static AuditLogItem createMethodAccessItem(String asVersion, boolean readOnly, boolean booting, String userId, String domainUUID,
AccessMechanism accessMechanism, InetAddress remoteAddress, String methodName, String[] methodSignature,
Object[] methodParams, Throwable error) {
return new JmxAccessAuditLogItem(asVersion, readOnly, booting, userId, domainUUID, accessMechanism, remoteAddress, methodName, methodSignature, methodParams, error);
}
abstract String format(AuditLogItemFormatter formatter);
/**
* Get the asVersion
* @return the asVersion
*/
public String getAsVersion() {
return asVersion;
}
/**
* Get the readOnly
* @return the readOnly
*/
boolean isReadOnly() {
return readOnly;
}
/**
* Get the booting
* @return the booting
*/
boolean isBooting() {
return booting;
}
/**
* Get the userId
* @return the userId
*/
String getUserId() {
return userId;
}
/**
* Get the domainUUID
* @return the domainUUID
*/
String getDomainUUID() {
return domainUUID;
}
/**
* Get the accessMechanism
* @return the accessMechanism
*/
AccessMechanism getAccessMechanism() {
return accessMechanism;
}
/**
* Get the remoteAddress
* @return the remoteAddress
*/
InetAddress getRemoteAddress() {
return remoteAddress;
}
/**
* Get the date
* @return the date
*/
public Date getDate() {
return (Date)date.clone();
}
static class ModelControllerAuditLogItem extends AuditLogItem {
private final ResultAction resultAction;
private final Resource resultantModel;
private final List<ModelNode> operations;
ModelControllerAuditLogItem(String asVersion, boolean readOnly, boolean booting, ResultAction resultAction, String userId,
String domainUUID, AccessMechanism accessMechanism, InetAddress remoteAddress, Resource resultantModel,
List<ModelNode> operations) {
super(asVersion, readOnly, booting, userId, domainUUID, accessMechanism, remoteAddress);
this.resultAction = resultAction;
this.resultantModel = resultantModel;
this.operations = operations;
}
@Override
String format(AuditLogItemFormatter formatter) {
return formatter.formatAuditLogItem(this);
}
/**
* Get the resultAction
* @return the resultAction
*/
ResultAction getResultAction() {
return resultAction;
}
/**
* Get the resultantModel
* @return the resultantModel
*/
Resource getResultantModel() {
return resultantModel;
}
/**
* Get the operations
* @return the operations
*/
List<ModelNode> getOperations() {
return operations;
}
}
static class JmxAccessAuditLogItem extends AuditLogItem {
private final String methodName;
private final String[] methodSignature;
private final Object[] methodParams;
private final Throwable error;
JmxAccessAuditLogItem(String asVersion, boolean readOnly, boolean booting, String userId, String domainUUID,
AccessMechanism accessMechanism, InetAddress remoteAddress, String methodName, String[] methodSignature,
Object[] methodParams, Throwable error) {
super(asVersion, readOnly, booting, userId, domainUUID, accessMechanism, remoteAddress);
this.methodName = methodName;
this.methodSignature = methodSignature;
this.methodParams = methodParams;
this.error = error;
}
@Override
String format(AuditLogItemFormatter formatter) {
return formatter.formatAuditLogItem(this);
}
/**
* Get the methodName
* @return the methodName
*/
String getMethodName() {
return methodName;
}
/**
* Get the methodSignature
* @return the methodSignature
*/
String[] getMethodSignature() {
return methodSignature;
}
/**
* Get the methodParams
* @return the methodParams
*/
Object[] getMethodParams() {
return methodParams;
}
/**
* Get the error
* @return the error
*/
Throwable getError() {
return error;
}
}
}