001package gu.sql2java; 002 003import static com.google.common.base.Preconditions.checkArgument; 004 005import java.io.IOException; 006import java.net.URL; 007import java.nio.ByteBuffer; 008 009import com.google.common.base.Throwables; 010 011/** 012 * URLStore implementation for Store table only<br> 013 * CHAR(32) required for primary key type 014 * @author guyadong 015 * 016 */ 017public class BinaryStoreTableURL extends BaseColumnStore { 018 019 public BinaryStoreTableURL(String tablename, String storeColumn) { 020 super(tablename, storeColumn); 021 checkArgument(metaData.primaryKeyCount == 1 && String.class.equals(metaData.primaryKeyTypes[0]), 022 "String type required for primary key of %s",tablename); 023 checkArgument(metaData.columnSizes[metaData.primaryKeyIds[0]] == 32, 024 "size 32 required for %s.%s",tablename,metaData.primaryKeyNames[0]); 025 } 026 027 protected String getSuffix(BaseBean bean){ 028 return null; 029 } 030 031 @Override 032 protected URL doStore(byte[] binary, String md5, String suffix, boolean overwrite) throws IOException { 033 BaseBean bean = manager.loadByPrimaryKey(md5); 034 if(bean == null || overwrite){ 035 try{ 036 if(bean ==null){ 037 bean = manager.createBean(); 038 bean.setValue(metaData.primaryKeyIds[0], md5); 039 } 040 if(ByteBuffer.class.equals(columnType)){ 041 bean.setValue(storeColumn, ByteBuffer.wrap(binary)); 042 }else{ 043 bean.setValue(storeColumn, binary); 044 } 045 manager.save(bean); 046 } catch (Exception e) { 047 Throwables.throwIfInstanceOf(e, IOException.class); 048 throw new IOException(e); 049 } 050 } 051 return makeURL(getSuffix(bean), bean.primaryValues()); 052 } 053 054 @Override 055 protected URL doFind(String md5) { 056 BaseBean bean = manager.loadByPrimaryKey(md5); 057 if(bean != null){ 058 return makeURL(getSuffix(bean), bean.primaryValues()); 059 } 060 return null; 061 } 062}