/*
* Copyright (c) 2014-2015 Janith Bandara, This source is a part of
* Audit4j - An open source auditing framework.
* http://audit4j.org
*
* 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.
*/
package org.audit4j.core;
import java.io.ByteArrayOutputStream;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import org.audit4j.core.dto.AuditEvent;
import org.audit4j.core.exception.ValidationException;
import org.audit4j.core.handler.file.FileAuditHandler;
import org.audit4j.core.util.Log;
/**
* The Class ValidationManager.
*
* @author <a href="mailto:janith3000@gmail.com">Janith Bandara</a>
*
* @since 1.0.0
*/
public final class ValidationManager {
/**
* Instantiates a new validation manager.
*/
private ValidationManager() {
}
/**
* Validate event.
*
* @param event
* the event
* @throws ValidationException
* the validation exception
*/
public static void validateEvent(AuditEvent event) throws ValidationException {
if (event == null) {
throw new ValidationException("Invalid Input", ValidationException.VALIDATION_LEVEL_WARN);
}
}
/**
* Validate configurations.
*
* @param conf
* the conf
* @throws ValidationException
* the validation exception
*/
static void validateConfigurations(Configuration conf) throws ValidationException {
if (null == conf.getHandlers()) {
Log.error(
"Handler should not be null, One or more handler implementation shuld be configured in the configuration",
ErrorGuide.getGuide(ErrorGuide.EMPTY_HANDLERS));
throw new ValidationException("Configuration error", ValidationException.VALIDATION_LEVEL_INVALID);
}
if (null == conf.getLayout()) {
Log.error("Layout should not be null, A layout implementation shuld be configured in the configuration",
ErrorGuide.getGuide(ErrorGuide.EMPTY_LAYOUT));
throw new ValidationException("Configuration error", ValidationException.VALIDATION_LEVEL_INVALID);
}
}
/**
* Checks if is serializable.
*
* @param object
* the object
* @return true, if is serializable
*/
static boolean isSerializable(Object object) {
final boolean retVal;
if (implementsInterface(object)) {
retVal = attemptToSerialize(object);
} else {
retVal = false;
}
return retVal;
}
/**
* Implements interface.
*
* @param o
* the o
* @return true, if successful
*/
private static boolean implementsInterface(final Object o) {
final boolean retVal;
retVal = (o instanceof Serializable) || (o instanceof Externalizable);
return retVal;
}
/**
* Attempt to serialize.
*
* @param o
* the o
* @return true, if successful
*/
private static boolean attemptToSerialize(final Object o) {
final OutputStream sink;
ObjectOutputStream stream;
stream = null;
try {
sink = new ByteArrayOutputStream();
stream = new ObjectOutputStream(sink);
stream.writeObject(o);
// could also re-serilalize at this point too
} catch (final IOException ex) {
return false;
} finally {
if (stream != null) {
try {
stream.close();
} catch (final IOException ex) {
// should not be able to happen
}
}
}
return true;
}
public static void main(String[] args) {
System.out.println(isSerializable(new FileAuditHandler()));
}
}