001    /**
002     * 
003     * Copyright 2004 Hiram Chirino
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.activemq.store.jdbc.adapter;
019    
020    import org.activemq.store.jdbc.StatementProvider;
021    
022    /**
023     * A StatementProvider filter that caches the responses
024     * of the filtered StatementProvider.
025     * 
026     * @version $Revision: 1.1 $
027     */
028    public class CachingStatementProvider implements StatementProvider {
029        
030        final private StatementProvider statementProvider;
031    
032        private String addMessageStatment;
033        private String addXidStatment;
034        private String[] createSchemaStatments;
035        private String[] dropSchemaStatments;
036        private String findAllMessagesStatment;
037        private String findAllXidStatment;
038        private String findLastSequenceIdInMsgs;
039        private String findMessageStatment;
040        private String findMessageAttributesStatment;
041        private String findMessageAttributesForUpdateStatment;
042        private String removeMessageStatment;
043        private String removeXidStatment;
044        private String updateMessageStatment;
045            private String createDurableSubStatment;
046            private String updateDurableSubStatment;
047            private String findDurableSubStatment;
048            private String findAllDurableSubMessagesStatment;
049            private String updateLastAckOfDurableSub;
050            private String findMessageSequenceIdStatment;
051        private String removeAllMessagesStatment;
052        private String removeAllSubscriptionsStatment;
053        private String deleteSubscriptionStatment;
054        private String deleteOldMessagesStatment;
055        private String findExpiredMessagesStatement;
056        private String deleteMessageStatement;
057        private String findLastSequenceIdInAcks;
058        private String setDeadLetterFlagStatement;
059    
060        public CachingStatementProvider(StatementProvider statementProvider) {
061            this.statementProvider = statementProvider;
062        }
063        
064        public StatementProvider getNext() {
065            return statementProvider;
066        }
067        
068        public String getAddMessageStatment() {
069            if (addMessageStatment == null) {
070                addMessageStatment = statementProvider.getAddMessageStatment();
071            }
072            return addMessageStatment;
073        }
074    
075        public String getAddXidStatment() {
076            if (addXidStatment == null) {
077                addXidStatment = statementProvider.getAddXidStatment();
078            }
079            return addXidStatment;
080        }
081    
082        public String[] getCreateSchemaStatments() {
083            if( createSchemaStatments==null ) {
084                createSchemaStatments = statementProvider.getCreateSchemaStatments();
085            }
086            return createSchemaStatments;
087        }
088    
089        public String[] getDropSchemaStatments() {
090            if( dropSchemaStatments==null ) {
091                dropSchemaStatments = statementProvider.getDropSchemaStatments();
092            }
093            return dropSchemaStatments;
094        }
095    
096        public String getFindAllMessagesStatment() {
097            if( findAllMessagesStatment==null ) {
098                findAllMessagesStatment = statementProvider.getFindAllMessagesStatment();
099            }
100            return findAllMessagesStatment;
101        }
102    
103        public String getFindAllXidStatment() {
104            if( findAllXidStatment==null ) {
105                findAllXidStatment = statementProvider.getFindAllXidStatment();
106            }
107            return findAllXidStatment;
108        }
109    
110        public String getFindLastSequenceIdInMsgs() {
111            if( findLastSequenceIdInMsgs==null ) {
112                findLastSequenceIdInMsgs = statementProvider.getFindLastSequenceIdInMsgs();
113            }
114            return findLastSequenceIdInMsgs;
115        }
116    
117        public String getFindLastSequenceIdInAcks() {
118            if( findLastSequenceIdInAcks==null ) {
119                findLastSequenceIdInAcks = statementProvider.getFindLastSequenceIdInAcks();
120            }
121            return findLastSequenceIdInAcks;
122        }
123    
124        public String getFindMessageStatment() {
125            if( findMessageStatment==null ) {
126                findMessageStatment = statementProvider.getFindMessageStatment();
127            }
128            return findMessageStatment;
129        }
130    
131        public String getFindMessageAttributesStatment() {
132            if( findMessageAttributesStatment==null ) {
133                    findMessageAttributesStatment = statementProvider.getFindMessageAttributesStatment();
134            }
135            return findMessageAttributesStatment;
136        }
137    
138        public String getFindMessageAttributesForUpdateStatment() {
139            if( findMessageAttributesForUpdateStatment==null ) {
140                    findMessageAttributesForUpdateStatment = statementProvider.getFindMessageAttributesForUpdateStatment();
141            }
142            return findMessageAttributesForUpdateStatment;
143        }
144    
145        /**
146         * @return
147         */
148        public String getRemoveMessageStatment() {
149            if( removeMessageStatment==null ) {
150                removeMessageStatment = statementProvider.getRemoveMessageStatment();
151            }
152            return removeMessageStatment;
153        }
154    
155        public String getRemoveXidStatment() {
156            if( removeXidStatment==null ) {
157                removeXidStatment = statementProvider.getRemoveXidStatment();
158            }
159            return removeXidStatment;
160        }
161    
162        public String getUpdateMessageStatment() {
163            if( updateMessageStatment==null ) {
164                updateMessageStatment = statementProvider.getUpdateMessageStatment();
165            }
166            return updateMessageStatment;
167        }
168    
169            public String getCreateDurableSubStatment() {
170                    if(createDurableSubStatment==null) {
171                            createDurableSubStatment = statementProvider.getCreateDurableSubStatment();
172                    }
173                    return createDurableSubStatment;
174            }
175    
176            public String getUpdateDurableSubStatment() {
177                    if( updateDurableSubStatment == null ) {
178                            updateDurableSubStatment = statementProvider.getUpdateDurableSubStatment();
179                    }
180                    return updateDurableSubStatment;
181            }
182    
183            public String getFindDurableSubStatment() {
184                    if(findDurableSubStatment==null) {
185                            findDurableSubStatment = statementProvider.getFindDurableSubStatment();
186                    }
187                    return findDurableSubStatment;
188            }
189    
190            public String getFindAllDurableSubMessagesStatment() {
191                    if(findAllDurableSubMessagesStatment==null) {
192                            findAllDurableSubMessagesStatment = statementProvider.getFindAllDurableSubMessagesStatment();
193                    }
194                    return findAllDurableSubMessagesStatment;
195            }
196    
197            public String getUpdateLastAckOfDurableSub() {
198                    if(updateLastAckOfDurableSub==null) {
199                            updateLastAckOfDurableSub = statementProvider.getUpdateLastAckOfDurableSub();
200                    }
201                    return updateLastAckOfDurableSub;
202            }
203    
204            public String getFindMessageSequenceIdStatment() {
205                    if ( findMessageSequenceIdStatment==null ) {
206                            findMessageSequenceIdStatment = statementProvider.getFindMessageSequenceIdStatment();
207                    }
208                    return findMessageSequenceIdStatment;
209            }
210    
211        public String getRemoveAllMessagesStatment() {
212                    if ( removeAllMessagesStatment==null ) {
213                        removeAllMessagesStatment = statementProvider.getRemoveAllMessagesStatment();
214                    }
215                    return removeAllMessagesStatment;
216        }
217    
218        public String getRemoveAllSubscriptionsStatment() {
219                    if ( removeAllSubscriptionsStatment==null ) {
220                        removeAllSubscriptionsStatment = statementProvider.getRemoveAllSubscriptionsStatment();
221                    }
222                    return removeAllSubscriptionsStatment;
223        }
224    
225        public String getDeleteSubscriptionStatment() {
226            if ( deleteSubscriptionStatment==null ) {
227                deleteSubscriptionStatment = statementProvider.getDeleteSubscriptionStatment();
228            }
229            return deleteSubscriptionStatment;
230        }
231    
232        public String getDeleteOldMessagesStatment() {
233            if ( deleteOldMessagesStatment==null ) {
234                deleteOldMessagesStatment = statementProvider.getDeleteOldMessagesStatment();
235            }
236            return deleteOldMessagesStatment;
237        }
238        
239        public String getFindExpiredMessagesStatment() {
240            if ( findExpiredMessagesStatement==null) {
241                    findExpiredMessagesStatement = statementProvider.getFindExpiredMessagesStatment();
242            }
243            return findExpiredMessagesStatement;
244        }
245        
246        public String getDeleteMessageStatement() {
247            if ( deleteMessageStatement==null) {
248                    deleteMessageStatement = statementProvider.getDeleteMessageStatement();
249            }
250            return deleteMessageStatement;
251        }
252        
253        public String getSetDeadLetterFlagStatement() {
254            if ( setDeadLetterFlagStatement==null) {
255                    setDeadLetterFlagStatement = statementProvider.getSetDeadLetterFlagStatement();
256            }
257            return setDeadLetterFlagStatement;
258        }
259    
260        public void setTablePrefix(String tablePrefix) {
261            statementProvider.setTablePrefix(tablePrefix);
262        }
263    
264        public String getTablePrefix() {
265            return statementProvider.getTablePrefix();
266        }
267    }