001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  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    package org.apache.activemq.kaha;
018    
019    import java.io.IOException;
020    import java.util.Set;
021    
022    /**
023     * A Store is holds persistent containers
024     * 
025     * 
026     */
027    public interface Store {
028        /**
029         * Defauly container name
030         */
031        String DEFAULT_CONTAINER_NAME = "kaha";
032    
033        /**
034         * Byte Marshaller
035         */
036        Marshaller BYTES_MARSHALLER = new BytesMarshaller();
037    
038        /**
039         * Object Marshaller
040         */
041        Marshaller OBJECT_MARSHALLER = new ObjectMarshaller();
042    
043        /**
044         * String Marshaller
045         */
046        Marshaller STRING_MARSHALLER = new StringMarshaller();
047    
048        /**
049         * Command Marshaller
050         */
051        Marshaller COMMAND_MARSHALLER = new CommandMarshaller();
052        
053        /**
054         * MessageId marshaller
055         */
056        Marshaller MESSAGEID_MARSHALLER = new MessageIdMarshaller();
057    
058        /**
059         * close the store
060         * 
061         * @throws IOException
062         */
063        void close() throws IOException;
064    
065        /**
066         * Force all writes to disk
067         * 
068         * @throws IOException
069         */
070        void force() throws IOException;
071    
072        /**
073         * empty all the contents of the store
074         * 
075         * @throws IOException
076         */
077        void clear() throws IOException;
078    
079        /**
080         * delete the store
081         * 
082         * @return true if the delete was successful
083         * @throws IOException
084         */
085        boolean delete() throws IOException;
086    
087        /**
088         * Checks if a MapContainer exists in the default container
089         * 
090         * @param id
091         * @return new MapContainer
092         * @throws IOException
093         */
094        boolean doesMapContainerExist(Object id) throws IOException;
095    
096        /**
097         * Checks if a MapContainer exists in the named container
098         * 
099         * @param id
100         * @param containerName
101         * @return new MapContainer
102         * @throws IOException
103         */
104        boolean doesMapContainerExist(Object id, String containerName) throws IOException;
105    
106        /**
107         * Get a MapContainer with the given id - the MapContainer is created if
108         * needed
109         * 
110         * @param id
111         * @return container for the associated id or null if it doesn't exist
112         * @throws IOException
113         */
114        MapContainer getMapContainer(Object id) throws IOException;
115    
116        /**
117         * Get a MapContainer with the given id - the MapContainer is created if
118         * needed
119         * 
120         * @param id
121         * @param containerName
122         * @return container for the associated id or null if it doesn't exist
123         * @throws IOException
124         */
125        MapContainer getMapContainer(Object id, String containerName) throws IOException;
126    
127        /**
128         * Get a MapContainer with the given id - the MapContainer is created if
129         * needed
130         * 
131         * @param id
132         * @param containerName
133         * @param persistentIndex
134         * @return container for the associated id or null if it doesn't exist
135         * @throws IOException
136         */
137        MapContainer getMapContainer(Object id, String containerName, boolean persistentIndex) throws IOException;
138    
139        /**
140         * delete a container from the default container
141         * 
142         * @param id
143         * @throws IOException
144         */
145        void deleteMapContainer(Object id) throws IOException;
146    
147        /**
148         * delete a MapContainer from the name container
149         * 
150         * @param id
151         * @param containerName
152         * @throws IOException
153         */
154        void deleteMapContainer(Object id, String containerName) throws IOException;
155    
156        /**
157         * Delete Map container
158         * 
159         * @param id
160         * @throws IOException
161         */
162        void deleteMapContainer(ContainerId id) throws IOException;
163    
164        /**
165         * Get a Set of call MapContainer Ids
166         * 
167         * @return the set of ids
168         * @throws IOException
169         */
170        Set<ContainerId> getMapContainerIds() throws IOException;
171    
172        /**
173         * Checks if a ListContainer exists in the default container
174         * 
175         * @param id
176         * @return new MapContainer
177         * @throws IOException
178         */
179        boolean doesListContainerExist(Object id) throws IOException;
180    
181        /**
182         * Checks if a ListContainer exists in the named container
183         * 
184         * @param id
185         * @param containerName
186         * @return new MapContainer
187         * @throws IOException
188         */
189        boolean doesListContainerExist(Object id, String containerName) throws IOException;
190    
191        /**
192         * Get a ListContainer with the given id and creates it if it doesn't exist
193         * 
194         * @param id
195         * @return container for the associated id or null if it doesn't exist
196         * @throws IOException
197         */
198        ListContainer getListContainer(Object id) throws IOException;
199    
200        /**
201         * Get a ListContainer with the given id and creates it if it doesn't exist
202         * 
203         * @param id
204         * @param containerName
205         * @return container for the associated id or null if it doesn't exist
206         * @throws IOException
207         */
208        ListContainer getListContainer(Object id, String containerName) throws IOException;
209    
210        /**
211         * Get a ListContainer with the given id and creates it if it doesn't exist
212         * 
213         * @param id
214         * @param containerName
215         * @param persistentIndex
216         * @return container for the associated id or null if it doesn't exist
217         * @throws IOException
218         */
219        ListContainer getListContainer(Object id, String containerName, boolean persistentIndex) throws IOException;
220    
221        /**
222         * delete a ListContainer from the default container
223         * 
224         * @param id
225         * @throws IOException
226         */
227        void deleteListContainer(Object id) throws IOException;
228    
229        /**
230         * delete a ListContainer from the named container
231         * 
232         * @param id
233         * @param containerName
234         * @throws IOException
235         */
236        void deleteListContainer(Object id, String containerName) throws IOException;
237    
238        /**
239         * delete a list container
240         * 
241         * @param id
242         * @throws IOException
243         */
244        void deleteListContainer(ContainerId id) throws IOException;
245    
246        /**
247         * Get a Set of call ListContainer Ids
248         * 
249         * @return the set of ids
250         * @throws IOException
251         */
252        Set<ContainerId> getListContainerIds() throws IOException;
253    
254        /**
255         * @return the maxDataFileLength
256         */
257        long getMaxDataFileLength();
258    
259        /**
260         * @param maxDataFileLength the maxDataFileLength to set
261         */
262        void setMaxDataFileLength(long maxDataFileLength);
263    
264    
265        /**
266         * @return true if the store has been initialized
267         */
268        boolean isInitialized();
269        
270        /**
271         * @return the amount of disk space the store is occupying
272         */
273        long size();
274        
275        /**
276         * @return true if persistent indexes are used by default
277         */
278        public boolean isPersistentIndex();
279        
280            /**
281             * Set a persistent index as the default if the parameter is true
282             * @param persistentIndex
283             */
284            public void setPersistentIndex(boolean persistentIndex);
285            
286            /**
287             * @return the default container name
288             */
289            public String getDefaultContainerName();
290    
291            /**
292             * set the default container name
293             * @param defaultContainerName
294             */
295        public void setDefaultContainerName(String defaultContainerName);
296    
297            
298            /**
299             * An explict call to initialize - this will also be called
300             * implicitly for any other operation on the store.
301             * @throws IOException
302             */
303            public void initialize() throws IOException;
304            
305    }