1 /**
2 * Copyright 2005 Steve Molloy
3 *
4 * This file is part of OV4J.
5 *
6 * OV4J is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
8 *
9 * OV4J is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License along with OV4J; if not, write to the Free Software
13 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
14 *
15 */
16 package org.ov4j;
17
18 import java.io.IOException;
19 import java.io.Serializable;
20
21 import org.ov4j.data.Item;
22
23 /**
24 * Interface to implement to serve as data storage for controler.
25 *
26 * @author smolloy
27 *
28 */
29 public interface IContainer<T extends Comparable<? super T> & Cloneable & Serializable, C extends Comparable<? super C>> {
30 /**
31 * Delete an array of items all at once, items which are not found will simply be ignored.
32 *
33 * @param <T>
34 * Type of object in the items, must extend VersionableObject.
35 * @param items
36 * Items to be deleted.
37 * @param keepTrack
38 * Whether or not the ID should be kept in history.
39 * @throws IOException
40 */
41 public void batchDelete(Item<T, C>[] items, boolean keepTrack) throws IOException;
42
43 /**
44 * Merge an array of items all at once, items which are not found will simply be ignored.
45 *
46 * @param ids
47 * IDs to be merged.
48 * @throws IOException
49 */
50 public void batchMerge(C[] ids) throws IOException;
51
52 /**
53 * Save array of items all at once. If abortOnDuplicate is set to true, data will not be saved if 1 or more item ids
54 * are in use.
55 *
56 * @param <T>
57 * Type of object in the items, must extend VersionableObject.
58 * @param items
59 * Array of items to be saved.
60 * @param abortOnDuplicate
61 * Whether or not saving should abort when an item has an ID already in use.
62 * @throws IOException
63 */
64 public void batchSave(Item<T, C>[] items, boolean abortOnDuplicate) throws IOException;
65
66 /**
67 * Clear all data in the container.
68 *
69 */
70 public void clear();
71
72 /**
73 * Close the container.
74 *
75 * @throws IOException
76 *
77 */
78 public void close() throws IOException;
79
80 /**
81 * Commit all changes.
82 *
83 */
84 public void commit();
85
86 /**
87 * Delete the item.
88 *
89 * @param <T>
90 * Type of object in the item, must extend VersionableObject.
91 * @param it
92 * Item to be deleted.
93 * @param keepTrack
94 * Whether or not the ID should be kept in history.
95 * @throws IOException
96 */
97 public void delete(Item<T, C> it, boolean keepTrack) throws IOException;
98
99 /**
100 * Retrieve list of IDs that have been deleted.
101 *
102 * @return All IDs deleted.
103 * @throws IOException
104 */
105 public C[] deletedIds() throws IOException;
106
107 /**
108 * Retrieve a list of IDs that have been deleted since the given timestamp.
109 *
110 * @param timestamp
111 * Timestamp to use.
112 * @return All IDS deleted since the given timestamp.
113 * @throws IOException
114 */
115 public C[] deletedIdsSince(long timestamp) throws IOException;
116
117 /**
118 * Converts the given IContainer into an hessian implementation.
119 *
120 * @param cont
121 * IContainer to convert.
122 * @throws IOException
123 */
124 public void duplicate(IContainer<T, C> cont) throws IOException;
125
126 /**
127 * Determine if the given id is in use.
128 *
129 * @param id
130 * ID to check.
131 * @return True if the ID is already used in the system.
132 * @throws IOException
133 */
134 public boolean inUse(C id) throws IOException;
135
136 /**
137 * Determine if the container has already been closed.
138 *
139 * @return True if the container has been closed.
140 */
141 public boolean isClosed();
142
143 /**
144 * List all items modified since the given timestamp.
145 *
146 * @param timestamp
147 * Timestamp to use.
148 * @return An array of IDs for items modified since specified timestamp.
149 * @throws IOException
150 */
151 public C[] listModifiedSince(long timestamp) throws IOException;
152
153 /**
154 * Load an item using its id.
155 *
156 * @param id
157 * ID to look for.
158 * @param allVersions
159 * Whether or not all versions should be loaded.
160 * @return The item with specified ID.
161 * @throws IOException
162 */
163 public Item<T, C> load(C id, boolean allVersions) throws IOException;
164
165 /**
166 * Load multiple items at once, using the specified ids.
167 *
168 * @param ids
169 * Array of IDs to look for.
170 * @param allVersions
171 * Whether or not all versions should be loaded.
172 * @return An array of items with specified IDs, not necessarily in the same order.
173 * @throws IOException
174 */
175 public Item<T, C>[] load(C[] ids, boolean allVersions) throws IOException;
176
177 /**
178 * Load all items modified since the given timestamp.
179 *
180 * @param timestamp
181 * Timestamp to use.
182 * @param allVersions
183 * Whether or not all versions should be loaded.
184 * @return An array of items modified since specified timestamp.
185 * @throws IOException
186 */
187 public Item<T, C>[] modifiedSince(long timestamp, boolean allVersions) throws IOException;
188
189 /**
190 * Release the object so it can be garbage collected immediately.
191 *
192 * @param obj
193 * Object to release.
194 */
195 public void release(Object obj);
196
197 /**
198 * Rollback and discard all changes since last commit.
199 *
200 */
201 public void rollback();
202
203 /**
204 * Save the item.
205 *
206 * @param <T>
207 * Type of object in the item, must extend VersionableObject.
208 * @param it
209 * Item to be saved.
210 * @throws IOException
211 */
212 public void save(Item<T, C> it) throws IOException;
213
214 /**
215 * Wait for all saves and deletes pending tasks to finish.
216 *
217 */
218 public void waitForPendingSaves();
219
220 /**
221 * Wait for all tasks pending tasks to finish.
222 *
223 */
224 public void waitForPendingTasks();
225 }