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     * Get a blob holder adapter instantiated by given factory name.
045     *
046     * @param factoryName the factory name
047     * @return a blob holder adapter
048     * @since 9.3
049     */
050    BlobHolder getBlobHolderAdapter(DocumentModel doc, String factoryName);
051
052    /**
053     * Returns an external blob from given uri.
054     *
055     * @see ExternalBlobAdapter
056     * @param uri the uri describing what adapter handles the file and the needed info to retrieve it.
057     * @return the resolved blob.
058     * @throws PropertyException if the blob cannot be retrieved (if adapter cannot retrieve it or if file is not found
059     *             for instance)
060     */
061    Blob getExternalBlobForUri(String uri) throws PropertyException, IOException;
062
063    /**
064     * Returns the external blob adapter registered for given prefix.
065     *
066     * @see ExternalBlobAdapter
067     */
068    ExternalBlobAdapter getExternalBlobAdapterForPrefix(String prefix);
069
070    /**
071     * Returns the external blob adapter parsed from given URI.
072     *
073     * @see ExternalBlobAdapter
074     */
075    ExternalBlobAdapter getExternalBlobAdapterForUri(String uri);
076
077}