001    package com.mockrunner.mock.jdbc;
002    
003    import java.sql.Ref;
004    import java.sql.SQLException;
005    import java.util.Map;
006    
007    import org.apache.commons.logging.Log;
008    import org.apache.commons.logging.LogFactory;
009    
010    /**
011     * Mock implementation of <code>Ref</code>.
012     */
013    public class MockRef implements Ref, Cloneable
014    {
015        private final static Log log = LogFactory.getLog(MockRef.class);
016        private Object object;
017        private String baseTypeName;
018        
019        public MockRef(Object object)
020        {
021            this.object = object;
022            baseTypeName = "";
023        }
024        
025        public String getBaseTypeName() throws SQLException
026        {
027            return baseTypeName;
028        }
029    
030        /**
031         * Sets the base type name.
032         * @param baseTypeName the base type name
033         */
034        public void setBaseTypeName(String baseTypeName)
035        {
036            this.baseTypeName = baseTypeName;
037        }
038    
039        public Object getObject(Map map) throws SQLException
040        {
041            return object;
042        }
043    
044        public Object getObject() throws SQLException
045        {
046            return object;
047        }
048        
049        public void setObject(Object object) throws SQLException
050        {
051            this.object = object;
052        }
053        
054        public boolean equals(Object obj)
055        {
056            if(null == obj) return false;
057            if(!obj.getClass().equals(this.getClass())) return false;
058            MockRef other = (MockRef)obj;
059            if(null != baseTypeName && !baseTypeName.equals(other.baseTypeName)) return false;
060            if(null != other.baseTypeName && !other.baseTypeName.equals(baseTypeName)) return false;
061            if(null == object && null == other.object) return true;
062            if(null == object || null == other.object) return false;
063            return object.equals(other.object);
064        }
065    
066        public int hashCode()
067        {
068            int hashCode = 0;
069            if(null != baseTypeName) hashCode += 31 * baseTypeName.hashCode();
070            if(null != object) hashCode += 31 * object.hashCode();
071            return hashCode;
072        }
073        
074        public String toString()
075        {
076            return "Ref data: " + object.toString();
077        }
078        
079        public Object clone()
080        {
081            try
082            {
083                return (MockRef)super.clone();
084            } 
085            catch(CloneNotSupportedException exc)
086            {
087                log.error(exc.getMessage(), exc);
088            }
089            return null;
090        }
091    }