001package gu.sql2java; 002 003import static com.google.common.base.Preconditions.checkArgument; 004 005import java.io.IOException; 006import java.net.URL; 007 008import gu.sql2java.exception.RuntimeDaoException; 009 010/** 011 * URLStore implementation for Store table only<br> 012 * CHAR(32) required for primary key type 013 * @author guyadong 014 * 015 */ 016public class BinaryStoreTable extends BaseColumnStore { 017 018 /** 019 * 构造方法<br> 020 * @param tablename 表名 021 * @param storeColumn 存储数据的字段名 022 * @param extensionColumn 存储扩展名的字段名(可为{@code null}) 023 * @param mimeColumn 存储MIME类型的字段名(可为{@code null}) 024 * @throws IllegalArgumentException 参数错误 025 */ 026 public BinaryStoreTable(String tablename, String storeColumn, String extensionColumn, String mimeColumn) throws IllegalArgumentException { 027 super(tablename, storeColumn, extensionColumn, mimeColumn); 028 029 checkArgument(metaData.primaryKeyCount == 1 && String.class.equals(metaData.primaryKeyTypes[0]), 030 "String type required for primary key of %s",tablename); 031 checkArgument(metaData.columnSizes[metaData.primaryKeyIds[0]] == 32, 032 "size 32 required for %s.%s",tablename,metaData.primaryKeyNames[0]); 033 034 } 035 036 @Override 037 protected URL doStore(byte[] binary, String md5, String extension, boolean overwrite) throws IOException { 038 try{ 039 BaseBean bean = manager.loadByPrimaryKey(md5); 040 if(bean == null || overwrite){ 041 if(bean ==null){ 042 bean = manager.createBean(); 043 bean.setValue(metaData.primaryKeyIds[0], md5); 044 } 045 saveStoreBean(bean,binary,md5,extension); 046 } 047 return makeURL(getExtension(bean), bean.primaryValues()); 048 }catch ( RuntimeDaoException e) { 049 throw new IOException(e); 050 } 051 052 } 053 054 @Override 055 protected URL doFind(String md5) { 056 BaseBean bean = manager.loadByPrimaryKey(md5); 057 return bean == null ? null : makeURL(getExtension(bean), bean.primaryValues()); 058 } 059 060 @Override 061 public int hashCode() { 062 final int prime = 31; 063 int result = super.hashCode(); 064 result = prime * result + extensionId; 065 result = prime * result + mimeId; 066 return result; 067 } 068 069 @Override 070 public boolean equals(Object obj) { 071 if (this == obj) 072 return true; 073 if (!super.equals(obj)) 074 return false; 075 if (!(obj instanceof BinaryStoreTable)) 076 return false; 077 BaseColumnStore other = (BaseColumnStore) obj; 078 if (extensionId != other.extensionId) 079 return false; 080 if (mimeId != other.mimeId) 081 return false; 082 return true; 083 } 084 085 @Override 086 public String toString() { 087 StringBuilder builder = new StringBuilder(); 088 builder.append("BinaryStoreTable [extension="); 089 builder.append(metaData.columnNameOf(extensionId)); 090 builder.append(", mime="); 091 builder.append(metaData.columnNameOf(mimeId)); 092 builder.append(", tablename="); 093 builder.append(tablename); 094 builder.append(", storeColumn="); 095 builder.append(storeColumn); 096 builder.append(", protocol="); 097 builder.append(protocol); 098 builder.append("]"); 099 return builder.toString(); 100 } 101}