/* 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 fedora.server.storage.lowlevel.akubra; import java.io.File; import java.io.InputStream; import java.util.Iterator; import java.util.Map; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import fedora.common.Constants; import fedora.server.Module; import fedora.server.Server; import fedora.server.errors.LowlevelStorageException; import fedora.server.errors.ModuleInitializationException; import fedora.server.storage.lowlevel.IListable; import fedora.server.storage.lowlevel.ILowlevelStorage; /** * Wraps a Spring-configured {@link AkubraLowlevelStore} instance as a * {@link Module}. * <p> * To use this module, edit <code>$FEDORA_HOME/config/akubra-llstore.xml</code> * as appropriate and replace the existing <code>LowlevelStorage</code> * module in <code>fedora.fcfg</code> with the following: * <p> * <pre> * <module role="fedora.server.storage.lowlevel.ILowlevelStorage" * class="fedora.server.storage.lowlevel.akubra.AkubraLowlevelStorageModule"/> * </pre> * * @author Chris Wilper */ public class AkubraLowlevelStorageModule extends Module implements ILowlevelStorage, IListable { private ILowlevelStorage impl; public AkubraLowlevelStorageModule(Map<String, String> moduleParameters, Server server, String role) throws ModuleInitializationException { super(moduleParameters, server, role); } @Override public void postInitModule() throws ModuleInitializationException { File beanFile = new File(new File(Constants.FEDORA_HOME), "server/config/akubra-llstore.xml"); try { Resource beanResource = new FileSystemResource(beanFile); BeanFactory factory = new XmlBeanFactory(beanResource); impl = (ILowlevelStorage) factory.getBean(getRole()); } catch (BeansException e) { throw new ModuleInitializationException("Error initializing " + "from " + beanFile.getPath(), getRole(), e); } } public void addObject(String pid, InputStream content) throws LowlevelStorageException { impl.addObject(pid, content); } public void replaceObject(String pid, InputStream content) throws LowlevelStorageException { impl.replaceObject(pid, content); } public InputStream retrieveObject(String pid) throws LowlevelStorageException { return impl.retrieveObject(pid); } public void removeObject(String pid) throws LowlevelStorageException { impl.removeObject(pid); } public void rebuildObject() throws LowlevelStorageException { impl.rebuildObject(); } public void auditObject() throws LowlevelStorageException { impl.auditObject(); } public void addDatastream(String pid, InputStream content) throws LowlevelStorageException { impl.addDatastream(pid, content); } public void replaceDatastream(String pid, InputStream content) throws LowlevelStorageException { impl.replaceDatastream(pid, content); } public InputStream retrieveDatastream(String pid) throws LowlevelStorageException { return impl.retrieveDatastream(pid); } public void removeDatastream(String pid) throws LowlevelStorageException { impl.removeDatastream(pid); } public void rebuildDatastream() throws LowlevelStorageException { impl.rebuildDatastream(); } public void auditDatastream() throws LowlevelStorageException { impl.auditDatastream(); } // IListable methods public Iterator<String> listObjects() { return ((IListable) impl).listObjects(); } public Iterator<String> listDatastreams() { return ((IListable) impl).listDatastreams(); } }