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}