001package gu.sql2java.store; 002 003import static gu.sql2java.store.BinaryUtils.*; 004 005import java.io.IOException; 006import java.net.URL; 007 008/** 009 * 二进制数据对象定义 010 * @author guyadong 011 * 012 */ 013public class URLInfo { 014 /** 015 * 数据文件位置 016 */ 017 public URL location=null; 018 019 /** 020 * 文件后缀 021 */ 022 public String extension=null; 023 024 private volatile String md5; 025 private URLInfo() { 026 } 027 /** 028 * 返回二进制数据MD5 029 * @return 二进制数据MD5 030 */ 031 public String getMD5(){ 032 if( null == md5){ 033 synchronized (this) { 034 if( null == md5){ 035 try { 036 md5 = location == null ? null : getMD5String(getBytes(location)); 037 } catch (DataNotFoundException e) { 038 // DO NOTHING 039 }catch (IOException e) { 040 throw new IllegalArgumentException(e); 041 } 042 } 043 } 044 } 045 return md5; 046 } 047 /** 048 * 填充{@link URLInfo}相关字段字段<br> 049 * {@link URLInfo#location}和imgURL不能 同时为null,否则抛出{@link IllegalArgumentException} 050 * @param url 数据位置 051 * @param annImage 052 * @return 053 */ 054 URLInfo fill(URL url) { 055 if(null == url){ 056 throw new NullPointerException("url is null"); 057 } 058 location = url; 059 try{ 060 int lastDot = url.getFile().lastIndexOf('.'); 061 extension = lastDot < 0 ? null : url.getFile().substring(lastDot + 1); 062 }catch (IndexOutOfBoundsException e) { 063 extension = null; 064 } 065 return this; 066 } 067 /** 068 * 根据{@link URL}创建{@link URLInfo}对象,填充必要的图像参数字段<br> 069 * 异常封装到{@link RuntimeException}抛出 070 * @param url 071 * @return 072 * @see {@link #fill(URL, URLInfo)} 073 */ 074 public static URLInfo wrap(URL url) { 075 return new URLInfo().fill(url); 076 } 077 078}