001 /****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one *
003 * or more contributor license agreements. See the NOTICE file *
004 * distributed with this work for additional information *
005 * regarding copyright ownership. The ASF licenses this file *
006 * to you under the Apache License, Version 2.0 (the *
007 * "License"); you may not use this file except in compliance *
008 * with the License. You may obtain a copy of the License at *
009 * *
010 * http://www.apache.org/licenses/LICENSE-2.0 *
011 * *
012 * Unless required by applicable law or agreed to in writing, *
013 * software distributed under the License is distributed on an *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015 * KIND, either express or implied. See the License for the *
016 * specific language governing permissions and limitations *
017 * under the License. *
018 ****************************************************************/
019
020 package org.apache.james.mime4j.storage;
021
022 import java.io.IOException;
023 import java.io.InputStream;
024
025 /**
026 * Can be used to read data that has been stored by a {@link StorageProvider}.
027 */
028 public interface Storage {
029 /**
030 * Returns an <code>InputStream</code> that can be used to read the stored
031 * data. The input stream should be closed by the caller when it is no
032 * longer needed.
033 * <p>
034 * Note: The stream should NOT be wrapped in a
035 * <code>BufferedInputStream</code> by the caller. If the implementing
036 * <code>Storage</code> creates a stream which would benefit from being
037 * buffered it is the <code>Storage</code>'s responsibility to wrap it.
038 *
039 * @return an <code>InputStream</code> for reading the stored data.
040 * @throws IOException
041 * if an I/O error occurs.
042 * @throws IllegalStateException
043 * if this <code>Storage</code> instance has been deleted.
044 */
045 InputStream getInputStream() throws IOException;
046
047 /**
048 * Deletes the data held by this <code>Storage</code> as soon as possible.
049 * Deleting an already deleted <code>Storage</code> has no effect.
050 */
051 void delete();
052
053 }