001    package com.mockrunner.jdbc;
002    
003    import java.util.ArrayList;
004    import java.util.Collections;
005    import java.util.List;
006    import java.util.Map;
007    import java.util.TreeMap;
008    
009    import com.mockrunner.mock.jdbc.MockCallableStatement;
010    
011    /**
012     * Concrete handler for {@link MockCallableStatement}.
013     */
014    public class CallableStatementResultSetHandler extends AbstractOutParameterResultSetHandler
015    {
016        private List callableStatements;
017        private Map callbaleStatementMap;
018    
019        public CallableStatementResultSetHandler()
020        {
021            callableStatements = new ArrayList();
022            callbaleStatementMap = new TreeMap();
023        }
024    
025        /**
026         * The <code>Connection</code> adds new statements with
027         * this method.
028         * @param statement the {@link MockCallableStatement}
029         */
030        public void addCallableStatement(MockCallableStatement statement)
031        { 
032            statement.setCallableStatementResultSetHandler(this);
033            List list = (List)callbaleStatementMap.get(statement.getSQL());
034            if(null == list)
035            {
036                list = new ArrayList();
037                callbaleStatementMap.put(statement.getSQL(), list);
038            }
039            list.add(statement);
040            callableStatements.add(statement);
041        }
042    
043        /**
044         * Returns a <code>List</code> of all callable statements.
045         * @return the <code>List</code> of {@link MockCallableStatement} objects
046         */
047        public List getCallableStatements()
048        {
049            return Collections.unmodifiableList(callableStatements);
050        }
051    
052        /**
053         * Returns a <code>Map</code> of all callable statements.
054         * The SQL strings map to the corresponding {@link MockCallableStatement}
055         * object.
056         * @return the <code>Map</code> of {@link MockCallableStatement} objects
057         */
058        public Map getCallableStatementMap()
059        {
060            return Collections.unmodifiableMap(callbaleStatementMap);
061        }
062    
063        /**
064         * Clears all callable statements
065         */
066        public void clearCallableStatements()
067        {
068            callableStatements.clear();
069            callbaleStatementMap.clear();
070        }   
071    }