Package org.fcrepo.server.storage.lowlevel

Source Code of org.fcrepo.server.storage.lowlevel.DefaultLowlevelStorage

/* 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.storage.lowlevel;

import java.io.InputStream;


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


import org.fcrepo.common.FaultException;
import org.fcrepo.server.errors.LowlevelStorageException;
import org.fcrepo.server.storage.lowlevel.defaultstore.Store;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



/**
* @author Bill Niebel
*/
public class DefaultLowlevelStorage
        implements ILowlevelStorage, IListable, ISizable, ICheckable {

    private static final Logger logger =
            LoggerFactory.getLogger(DefaultLowlevelStorage.class);
    public static final String REGISTRY_NAME = "registryName";

    public static final String OBJECT_REGISTRY_TABLE = "objectPaths";

    public static final String DATASTREAM_REGISTRY_TABLE = "datastreamPaths";

    public static final String OBJECT_STORE_BASE = "object_store_base";

    public static final String DATASTREAM_STORE_BASE = "datastream_store_base";

    public static final String FILESYSTEM = "file_system";

    public static final String PATH_ALGORITHM = "path_algorithm";

    public static final String PATH_REGISTRY = "path_registry";

    private final Store objectStore;

    private final Store datastreamStore;

    public DefaultLowlevelStorage(Map<String, Object> configuration)
            throws LowlevelStorageException {
        String objectStoreBase = (String) configuration.get(OBJECT_STORE_BASE);
        String datastreamStoreBase =
                (String) configuration.get(DATASTREAM_STORE_BASE);

        Map<String, Object> objConfig = new HashMap<String, Object>();
        objConfig.putAll(configuration);
        objConfig.put(REGISTRY_NAME, OBJECT_REGISTRY_TABLE);
        objConfig.put("storeBase", objectStoreBase);
        objConfig.put("storeBases", new String[] {objectStoreBase});
        objectStore = new Store(objConfig);

        Map<String, Object> dsConfig = new HashMap<String, Object>();
        dsConfig.putAll(configuration);
        dsConfig.put(REGISTRY_NAME, DATASTREAM_REGISTRY_TABLE);
        dsConfig.put("storeBase", datastreamStoreBase);
        dsConfig.put("storeBases", new String[] {datastreamStoreBase});
        datastreamStore = new Store(dsConfig);
    }

    @Override
    public void addObject(String pid, InputStream content, Map<String, String> hints)
            throws LowlevelStorageException {
        objectStore.add(pid, content);
    }

    @Override
    public void replaceObject(String pid, InputStream content, Map<String, String> hints)
            throws LowlevelStorageException {
        objectStore.replace(pid, content);
    }

    @Override
    public InputStream retrieveObject(String pid)
            throws LowlevelStorageException {
        return objectStore.retrieve(pid);
    }

    @Override
    public void removeObject(String pid) throws LowlevelStorageException {
        objectStore.remove(pid);
    }

    @Override
    public void rebuildObject() throws LowlevelStorageException {
        objectStore.rebuild();
    }

    @Override
    public void auditObject() throws LowlevelStorageException {
        objectStore.audit();
    }

    @Override
    public long addDatastream(String pid, InputStream content, Map<String, String> hints)
            throws LowlevelStorageException {
        return datastreamStore.add(pid, content);
    }

    @Override
    public long replaceDatastream(String pid, InputStream content, Map<String, String>hints)
            throws LowlevelStorageException {
        return datastreamStore.replace(pid, content);
    }

    @Override
    public InputStream retrieveDatastream(String pid)
            throws LowlevelStorageException {
        return datastreamStore.retrieve(pid);
    }

    @Override
    public void removeDatastream(String pid) throws LowlevelStorageException {
        datastreamStore.remove(pid);
    }

    @Override
    public void rebuildDatastream() throws LowlevelStorageException {
        datastreamStore.rebuild();
    }

    @Override
    public void auditDatastream() throws LowlevelStorageException {
        datastreamStore.audit();
    }

    //IListable methods
    @Override
    public Iterator<String> listObjects() {
        return objectStore.list();
    }

    @Override
    public Iterator<String> listDatastreams() {
        return datastreamStore.list();
    }
   
    //ISizable methods
    @Override
    public long getDatastreamSize(String dsKey) throws LowlevelStorageException {
        return datastreamStore.getSize(dsKey);
    }

    // ICheckable methods
    @Override
    public boolean objectExists(String objectKey) {
        try {
            return objectStore.exists(objectKey);
        } catch (LowlevelStorageException e) {
            logger.error(e.toString(),e);
            throw new FaultException(
                    "System error determining existence of blob", e);
        }
    }
}
TOP

Related Classes of org.fcrepo.server.storage.lowlevel.DefaultLowlevelStorage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.