001    package com.mockrunner.mock.jdbc;
002    
003    import java.sql.Array;
004    import java.sql.ResultSet;
005    import java.sql.SQLException;
006    import java.util.Map;
007    
008    import org.apache.commons.logging.Log;
009    import org.apache.commons.logging.LogFactory;
010    
011    import com.mockrunner.util.common.ArrayUtil;
012    
013    /**
014     * Mock implementation of <code>Array</code>.
015     */
016    public class MockArray implements Array, Cloneable
017    {
018        private final static Log log = LogFactory.getLog(MockArray.class);
019        private Object array;
020        
021        public MockArray(Object array)
022        {
023            this.array = ArrayUtil.convertToArray(array);
024        }
025        
026        public int getBaseType() throws SQLException
027        {
028            return 0;
029        }
030        
031        public String getBaseTypeName() throws SQLException
032        {
033            return "";
034        }
035    
036        public Object getArray() throws SQLException
037        {
038            return array;
039        }
040        
041        public Object getArray(Map map) throws SQLException
042        {
043            return getArray();
044        }
045    
046        public Object getArray(long index, int count) throws SQLException
047        {
048            return ArrayUtil.truncateArray(getArray(), (int)(index - 1), count);
049        }
050        
051        public Object getArray(long index, int count, Map map) throws SQLException
052        {
053            return getArray(index, count);
054        }
055    
056        public ResultSet getResultSet() throws SQLException
057        {
058            return getResultSet(1, java.lang.reflect.Array.getLength(array));
059        }
060    
061        public ResultSet getResultSet(long index, int count) throws SQLException
062        {
063            Integer[] firstColumn = new Integer[count];
064            for(int ii = 0; ii < count; ii++)
065            {
066                firstColumn[ii] = new Integer(ii + 1);
067            }
068            Object[] secondColumn = ArrayUtil.convertToObjectArray(array);
069            secondColumn = (Object[])ArrayUtil.truncateArray(secondColumn, (int)(index - 1), count);
070            MockResultSet resultSet = new MockResultSet(String.valueOf(hashCode()));
071            resultSet.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
072            resultSet.setResultSetConcurrency(ResultSet.CONCUR_READ_ONLY);
073            resultSet.addColumn(firstColumn);
074            resultSet.addColumn(secondColumn);
075            return resultSet;
076        }
077    
078        public ResultSet getResultSet(long index, int count, Map map) throws SQLException
079        {
080            return getResultSet(index, count);
081        }
082    
083        public ResultSet getResultSet(Map map) throws SQLException
084        {
085            return getResultSet();
086        }
087        
088        public String toString()
089        {
090            StringBuffer buffer = new StringBuffer("Array data: ");
091            Object[] arrayData = ArrayUtil.convertToObjectArray(array);
092            for(int ii = 0; ii < arrayData.length; ii++)
093            {
094                buffer.append("[" + arrayData[ii].toString() + "] ");
095            }
096            return buffer.toString();
097        }
098        
099        public Object clone()
100        {
101            try
102            {
103                MockArray copy = (MockArray)super.clone();
104                copy.array = ArrayUtil.copyArray(array);
105                return copy;
106            }
107            catch(CloneNotSupportedException exc)
108            {
109                log.error(exc.getMessage(), exc);
110            }
111            return null;
112        }
113    }