001package gu.sql2java; 002 003import static com.google.common.base.Preconditions.checkArgument; 004import java.io.IOException; 005import java.net.URL; 006import gu.sql2java.exception.RuntimeDaoException; 007 008/** 009 * URLStore implementation for Store table only<br> 010 * CHAR(32) required for primary key type 011 * @author guyadong 012 * 013 */ 014public class BinaryStoreTable extends BaseColumnStore { 015 016 /** 017 * 构造方法<br> 018 * @param tablename 表名 019 * @param storeColumn 存储数据的字段名 020 * @param extensionColumn 存储扩展名的字段名(可为{@code null}) 021 * @param mimeColumn 存储MIME类型的字段名(可为{@code null}) 022 * @throws IllegalArgumentException 参数错误 023 */ 024 public BinaryStoreTable(String tablename, String storeColumn, String extensionColumn, String mimeColumn) throws IllegalArgumentException { 025 super(tablename, storeColumn, extensionColumn, mimeColumn); 026 027 checkArgument(metaData.primaryKeyCount == 1 && String.class.equals(metaData.primaryKeyTypes[0]), 028 "String type required for primary key of %s",tablename); 029 checkArgument(metaData.columnSizes[metaData.primaryKeyIds[0]] == 32, 030 "size 32 required for %s.%s",tablename,metaData.primaryKeyNames[0]); 031 032 } 033 034 @Override 035 protected URL doStore(byte[] binary, String md5, String extension, boolean makeURLOnly) throws IOException { 036 try{ 037 BaseBean bean = manager.loadByPrimaryKey(md5); 038 if(bean == null){ 039 bean = manager.createBean(); 040 bean.setValue(metaData.primaryKeyIds[0], md5); 041 } 042 fillStoreBean(bean,binary,extension); 043 if(!makeURLOnly){ 044 manager.save(bean); 045 } 046 return makeURL(extension, md5); 047 }catch ( RuntimeDaoException e) { 048 throw new IOException(e); 049 } 050 } 051 052 @Override 053 protected URL doFind(String md5) { 054 BaseBean bean = manager.loadByPrimaryKey(md5); 055 return bean == null ? null : makeURL(getExtension(bean), bean.primaryValues()); 056 } 057 058 @Override 059 protected boolean doExists(URL storedURL) { 060 DatabaseURLConnection connection = new DatabaseURLConnection(storedURL).parse(); 061 return manager.existsPrimaryKey(connection.primaryKeys); 062 } 063 @Override 064 protected Object[] primaryKeysOf(String md5, String extension){ 065 return new Object[]{md5}; 066 } 067 068}