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