/* The contents of this file are subject to the license and copyright terms
* detailed in the license directory at the root of the source tree (also
* available online at http://fedora-commons.org/license/).
*/
package org.fcrepo.server.validation;
import java.util.HashMap;
import java.util.Map;
import org.fcrepo.server.Context;
import org.fcrepo.server.Module;
import org.fcrepo.server.Server;
import org.fcrepo.server.errors.ModuleInitializationException;
import org.fcrepo.server.errors.ObjectValidityException;
import org.fcrepo.server.errors.ServerException;
import org.fcrepo.server.storage.DOReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A module for validating digital objects. Instead of validating the FOXML
* (as per DOValidatorModule), the digital object itself is validated, wrapped
* in a DOReader.
*
* If validators have been configured (see Spring config doobjectvalidator.xml), then
* any object creation or modification will result in the object being validated before
* it is committed to storage. Any validation errors will result in the modification
* being aborted.
*
* @author stephen.bayliss
*
*/
public class DOObjectValidatorModule extends Module implements
DOObjectValidator {
private static final Logger logger = LoggerFactory
.getLogger(DOValidatorModule.class);
// holds the set of validators to validate against
private final Map<String, DOObjectValidator> m_validators =
new HashMap<String, DOObjectValidator>();
private boolean m_enabled = false;
public DOObjectValidatorModule(Map<String, String> moduleParameters,
Server server, String role) throws ModuleInitializationException {
super(moduleParameters, server, role);
}
@Override
public void postInitModule() throws ModuleInitializationException {
try {
} catch (Exception e) {
throw new ModuleInitializationException(e.getMessage(),
"org.fcrepo.server.validation.DOObjectValidatorModule");
}
}
@Override
public void validate(Context context, DOReader reader) throws ServerException {
if (m_enabled) {
// validate against all of the configured validators
for (DOObjectValidator validator : m_validators.values()) {
try {
validator.validate(context, reader);
} catch (ObjectValidityException e) {
logger.error("Object validation error " + reader.GetObjectPID() + ": " + e.getMessage());
throw e;
}
}
}
}
// spring config of the validators
public void setValidators(Map<String,? extends DOObjectValidator> validators){
logger.info("Adding {} object validators", validators.size());
m_validators.putAll(validators);
if (m_validators.size() > 0) {
m_enabled = true;
}
}
}