001/*
002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Nuxeo - initial API and implementation
018 *
019 */
020
021package org.nuxeo.ecm.core.api.blobholder;
022
023import java.io.IOException;
024
025import org.nuxeo.ecm.core.api.Blob;
026import org.nuxeo.ecm.core.api.DocumentModel;
027import org.nuxeo.ecm.core.api.PropertyException;
028import org.nuxeo.ecm.core.api.externalblob.ExternalBlobAdapter;
029
030/**
031 * Service interface for creating the right {@link BlobHolder} adapter depending on the {@link DocumentModel} type.
032 * <p>
033 * Also provides APIs for external blob adapters, handling blobs that are not stored in the repository (stored in the
034 * file system for instance).
035 *
036 * @author tiry
037 * @author Anahide Tchertchian
038 */
039public interface BlobHolderAdapterService {
040
041    BlobHolder getBlobHolderAdapter(DocumentModel doc);
042
043    /**
044     * Returns an external blob from given uri.
045     *
046     * @see ExternalBlobAdapter
047     * @param uri the uri describing what adapter handles the file and the needed info to retrieve it.
048     * @return the resolved blob.
049     * @throws PropertyException if the blob cannot be retrieved (if adapter cannot retrieve it or if file is not found
050     *             for instance)
051     */
052    Blob getExternalBlobForUri(String uri) throws PropertyException, IOException;
053
054    /**
055     * Returns the external blob adapter registered for given prefix.
056     *
057     * @see ExternalBlobAdapter
058     */
059    ExternalBlobAdapter getExternalBlobAdapterForPrefix(String prefix);
060
061    /**
062     * Returns the external blob adapter parsed from given URI.
063     *
064     * @see ExternalBlobAdapter
065     */
066    ExternalBlobAdapter getExternalBlobAdapterForUri(String uri);
067
068}