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}