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 020package org.apache.james.mime4j.storage; 021 022import java.io.IOException; 023import java.io.InputStream; 024 025/** 026 * Can be used to read data that has been stored by a {@link StorageProvider}. 027 */ 028public 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}