001package gu.sql2java.store;
002
003import java.io.File;
004import java.io.IOException;
005import java.io.InputStream;
006import java.net.URI;
007import java.net.URL;
008import java.nio.ByteBuffer;
009
010/**
011 * 二进制数据存储接口
012 * @author guyadong
013 *
014 */
015public interface URLStore {
016        /**
017         * 判断指定的URL是否当前实例的协议一致
018         * @param url 为{@code null}返回{@code false}
019         * @return 协议一致返回{@code true},否则返回{@code false}
020         */
021        boolean isStored(URL url);
022        /**
023         * 判断URL指定的数据是否存在<br>
024         * @param url 为{@code null}返回{@code false}
025         * @return 数据存在返回{@code true},否则返回{@code false}
026         */
027        boolean exists(URL url);
028        /**
029         * 保存二进制数据<br>
030         * @param <T> 数据类型可以是byte[],{@link InputStream},{@link ByteBuffer},{@link String}(base64编码),
031         * {@link File},{@link URL},{@link URI} 否则抛出{@link IllegalArgumentException}<br>
032         * @param input 二进制数据
033         * @param md5 二进制数据的MD5校验码,为{@code null}时会自动计算 
034         * @param extension 数据类型(文件后缀),可为{@code null}
035         * @param overwrite 是否覆盖已存在数据
036         * @param makeURLOnly 为{@code true}时不存储数据只返回存储URL
037         * @return 保存的URL
038         * @throws IOException
039         */
040        <T> URL store(T input, String md5, String extension, boolean overwrite, boolean makeURLOnly) throws IOException;
041        /**
042         * 删除{@code md5}指定的存储数据
043         * @param md5
044         * @return {@code true} if deleted, otherwise {@code false}
045         * @throws IOException
046         */
047        boolean delete(String md5) throws IOException;
048        /**
049         * 保存二进制数据<br>
050         * 如果数据已经被保存则不做任何事
051         * @param url
052         * @param overwrite 是否覆盖已存在数据
053         * @param makeURLOnly 为{@code true}时不存储数据只返回存储URL
054         * @return 保存的URL
055         * @throws IOException
056         */
057        URL store(URL url, boolean overwrite, boolean makeURLOnly) throws IOException;
058        /**
059         * 删除指定的存储数据
060         * @param url 存储的URL
061         * @return {@code true} if deleted, otherwise {@code false}
062         * @throws IOException
063         */
064        boolean delete(URL url) throws IOException;
065        /**
066         * 返回当前存储实现的协议名
067         * @return 
068         */
069        String getProtocol();
070        
071        /**
072         * 设置当前线程有效的附加参数 
073         * @param name 参数名
074         * @param value 参数值
075         * @return 当前对象
076         */
077        BaseURLStore setAdditionalParam(String name, Object value);
078}