1 /******************************************************************************
2 * DatabaseFacade.java - API into the PicMan database
3 *
4 * PicMan - The BuckoSoft Picture Manager in Java
5 * Copyright(c) 2005 - Dick Balaska
6 *
7 */
8 package com.buckosoft.PicMan.db;
9
10 import java.util.Calendar;
11 import java.util.Date;
12 import java.util.HashMap;
13 import java.util.List;
14
15 import org.springframework.dao.DataAccessException;
16
17 import com.buckosoft.PicMan.business.common.PicManCommonFacade;
18 import com.buckosoft.PicMan.db.logic.MetaSetFilter;
19 import com.buckosoft.PicMan.domain.Chain;
20 import com.buckosoft.PicMan.domain.Contact;
21 import com.buckosoft.PicMan.domain.Filter;
22 import com.buckosoft.PicMan.domain.FilterMicroSet;
23 import com.buckosoft.PicMan.domain.MetaSet;
24 import com.buckosoft.PicMan.domain.Mosaic;
25 import com.buckosoft.PicMan.domain.MosaicBatch;
26 import com.buckosoft.PicMan.domain.MosaicTile;
27 import com.buckosoft.PicMan.domain.Pic;
28 import com.buckosoft.PicMan.domain.Poster;
29 import com.buckosoft.PicMan.domain.Root;
30 import com.buckosoft.PicMan.domain.Set;
31 import com.buckosoft.PicMan.domain.SetSize;
32 import com.buckosoft.PicMan.domain.SyncClient;
33 import com.buckosoft.PicMan.domain.SyncServer;
34 import com.buckosoft.PicMan.domain.System;
35 import com.buckosoft.PicMan.domain.User;
36 import com.buckosoft.PicMan.domain.Virgin;
37 import com.buckosoft.PicMan.domain.mosaic.MosaicVector;
38
39 /** API into the PicMan database
40 * @author Dick Balaska
41 * @since 2006/07/17
42 * @see <a href="http://cvs.buckosoft.com/Projects/PicMan/PicMan/src/com/buckosoft/PicMan/db/DatabaseFacade.java">DatabaseFacade.java</a>
43 * @see <div><a href="http://cvs.buckosoft.com/Projects/PicMan/PicMan/src/JOCLPoolingDriver.jocl">JOCLPoolingDriver.jocl</a> Configuration file for the database</div>
44 */
45 public interface DatabaseFacade {
46
47 /** Enable logger output on the database
48 * @param debugFlag true == turn on debugging.
49 */
50 public void setDEBUG(boolean debugFlag);
51
52 /** Set the callback to the partial main business facade.
53 * We are interested in the error handler.
54 * @param picManCommonFacade Where the error handler lives.
55 */
56 void setPicManCommonFacade(PicManCommonFacade picManCommonFacade);
57
58 ///////////////////////////////////////////////////////////////////////////
59 /* Contacts */
60
61 /** Fetch the {@link com.buckosoft.PicMan.domain.Contact} that was built with these parameters.
62 * This does not return an image, just all of the parameters needed to recreate the image.
63 * Such as which Thumbnail appeared at each coordinates.
64 * @param cid The {@link com.buckosoft.PicMan.domain.Chain} ID
65 * @param name The qualified name of this contact. i.e. "Gail-100-02"
66 * @return The Contact
67 */
68 Contact getContact(int cid, String name);
69
70 /** Fetch the {@link com.buckosoft.PicMan.domain.Contact} that was built with these parameters.
71 * This does not return an image, just all of the parameters needed to recreate the image.
72 * Such as which Thumbnail appeared at each coordinates.
73 * @param cid The {@link com.buckosoft.PicMan.domain.Chain} ID
74 * @param setName The name of the {@link com.buckosoft.PicMan.domain.Set} that was used
75 * @param size The Thumbnail size
76 * @param index Which of this series of contacts
77 * @return The Contact
78 */
79 Contact getContact(int cid, String setName, int size, int index);
80
81 /** Add this {@link com.buckosoft.PicMan.domain.Contact} to the database.
82 * @param c The Contact
83 */
84 void addContact(Contact c);
85
86 /** Fetch the newest {@link com.buckosoft.PicMan.domain.Contact} made. Basically this tells us
87 * the last time Contacts were made.
88 * @return The newest Contact in the database.
89 */
90 Contact getNewestContact();
91
92 /** Return the oldest contact in each set/size in a map
93 * k = SetName i.e. "G-100" / v = Date
94 * @param chain Which {@link com.buckosoft.PicMan.domain.Chain} to process
95 * @return the map
96 */
97 HashMap<String, Date> getContactOldestMap(Chain chain);
98
99 ///////////////////////////////////////////////////////////////////////////
100 /* Chain management */
101
102 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Chain}s in the database.
103 * @return The List
104 */
105 List<Chain> getChains();
106
107 /** Return the number of {@link com.buckosoft.PicMan.domain.Chain}s in the Database.
108 * @return The Count
109 * @throws DataAccessException It broke.
110 */
111 int getChainCount();
112
113 /** Fetch a {@link com.buckosoft.PicMan.domain.Chain} based on its name.
114 * @param chainName The name to query.
115 * @return The chain or <code>null</code> if not found.
116 */
117 Chain getChain(String chainName);
118
119 /** Fetch a {@link com.buckosoft.PicMan.domain.Chain} based on its Chain ID.
120 * @param cid The Chain ID to query.
121 * @return The chain or <code>null</code> if not found.
122 */
123 Chain getChain(int cid);
124
125 /** Delete this {@link com.buckosoft.PicMan.domain.Chain} from the Database.
126 * @param chain The Chain to delete.
127 */
128 void deleteChain(Chain chain);
129
130 /** Store this {@link com.buckosoft.PicMan.domain.Chain} in the Database.
131 * @param chain The Chain to write.
132 */
133 void storeChain(Chain chain);
134
135 /** Return a list of Sets in a {@link com.buckosoft.PicMan.domain.Chain}
136 * @param cid The Chain to query
137 * @return A List of Set
138 */
139 public List<Set> getSetsInChain(int cid);
140
141 /** Return a list of SetSize for this set that are in this {@link com.buckosoft.PicMan.domain.Chain}
142 * @param cid The chain id
143 * @param sid The {@link com.buckosoft.PicMan.domain.Set} id
144 * @return A list of SetSizes
145 */
146 List<SetSize> getSetSizesInChain(int cid, int sid);
147
148 ///////////////////////////////////////////////////////////////////////////
149 /* Filter management */
150
151 /** Get the number of {@link com.buckosoft.PicMan.domain.Filter}s in the database.
152 * @return the count.
153 */
154 int getFilterCount();
155
156 /** Get a list of the {@link com.buckosoft.PicMan.domain.Filter} column names from the database.
157 * @return The List.
158 */
159 List<String> getFilterColumns();
160
161 /** Get a list of all of the {@link com.buckosoft.PicMan.domain.Filter}s in the database.
162 * @return The List.
163 */
164 List<Filter> getFilters();
165
166 /** Get a list of all of the {@link com.buckosoft.PicMan.domain.Filter}s for this set/size.
167 * @param setName The name of the Set to query.
168 * @param size The thumbnail size to query.
169 * @return A List of the <code>Filter</code>s that match this query
170 */
171 List<Filter> getFiltersBySet(String setName, int size);
172
173 /** Get a List of the Pic Names of the {@link com.buckosoft.PicMan.domain.Filter}s that match this query.
174 * @param setName The name of the Set to query
175 * @param size The thumbnail size to query
176 * @return A List of the Pic Names that match this query
177 */
178 List<String> getPicNamesBySet(String setName, int size);
179
180 /** Get a List of the Pic Names of the {@link com.buckosoft.PicMan.domain.Filter}s that match this query.
181 * @param set The Set to query
182 * @param size The thumbnail size to query
183 * @return A List of the Pic Names that match this query
184 */
185 List<String> getPicNamesBySet(Set set, int size);
186
187 /** Get a List of the Pic Names of the {@link com.buckosoft.PicMan.domain.Filter}s that match this query.
188 * @param set The MetaSet to query
189 * @param size The thumbnail size to query
190 * @param rateOp An index into the MetaSet rateOps table. i.e. NONE, =, !=, <, >.
191 * @param rateVal The value to apply with the rateOp against this set
192 * @return A List of the Pic Names that match this query
193 */
194 List<String> getPicNamesBySet(MetaSet set, int size, int rateOp, int rateVal);
195
196 /** Get a List of the Pic Names of the {@link com.buckosoft.PicMan.domain.Filter}s that match this valued query.
197 * This allows to say "mlb < 5".
198 * @param set The Set to query.
199 * @param size The thumbnail size to query.
200 * @param rateOp An index into the MetaSet rateOps table. i.e. NONE, =, !=, <, >.
201 * @param rateVal The value to apply with the rateOp against this set
202 * @return A List of the Pic Names that match this query.
203 */
204 List<String> getPicNamesBySet(Set set, int size, int rateOp, int rateVal);
205
206 /** Get a List of the Pic Names of the {@link com.buckosoft.PicMan.domain.Filter}s that match this valued query.
207 * This allows to say "mlb < 5".
208 * @param setName The name of the Set to query.
209 * @param size The thumbnail size to query.
210 * @return A List of the Pic Names that match this query.
211 */
212 List<String> getPicNamesBySet(String setName, int size, int rateOp, int rateVal);
213
214 /** Get a List of the Pic Names that pass this function filter.
215 * See {@link Set} for the list of valid function numbers.
216 * @param func The Function number to run.
217 * @param size The thumb size to run this filter on.
218 * @param rateOp An index into the MetaSet rateOps table. i.e. NONE, =, !=, <, >.
219 * @param operand A generic operand for the func. i.e. date (-2) takes a date here "2009-07-25"
220 * @return A List of the Pic Names that match this query.
221 */
222 List<String> getPicNamesByFunc(int func, int size, int rateOp, String operand);
223
224 /** Return a hash of the newest filter for each set/size.
225 * k = Set i.e. "G_100" / v = Date
226 * @return The Hash
227 */
228 HashMap<String, Date> getSetTimestamps();
229
230 /** Add a {@link com.buckosoft.PicMan.domain.Filter} to the database, overwriting any existing filter for this pic.
231 * @param filter The new (or used) Filter.
232 */
233 void addFilter(Filter filter);
234
235 /** Get the {@link com.buckosoft.PicMan.domain.Filter} for the pic named.
236 * @param picName The name of the Pic.
237 * @return the Filter
238 */
239 Filter getFilter(String picName);
240
241 /** Get the {@link com.buckosoft.PicMan.domain.FilterMicroSet} for this pic in this set.
242 * @param pid The pid the Pic.
243 * @param sid The sid of the set to query.
244 * @return The <code>FilterMicroSet</code> or null if not found.
245 */
246 FilterMicroSet getPicFromFilterMicroSet(int pid, int sid);
247
248 ///////////////////////////////////////////////////////////////////////////
249 /* MetaSet management */
250
251 /** Get the {@link com.buckosoft.PicMan.domain.MetaSet} that matches this Set ID.
252 * @param sid The SetID to query.
253 * @return The MetaSet
254 */
255 MetaSet getMetaSet(int sid);
256
257 /** Store this {@link com.buckosoft.PicMan.domain.MetaSet} to the database.
258 * @param mset The MetaSet to write.
259 */
260 void storeMetaSet(MetaSet mset);
261
262 /** Get a List of Column names for the {@link com.buckosoft.PicMan.domain.MetaSet}s.
263 * @return a List of "columns" for the known metasets
264 */
265 List<String> getMetaSetColumns();
266
267 /** Fetch a reference to the MetaSet filter processor.
268 * @return A reference to the database's MetaSet filter processor.
269 */
270 MetaSetFilter getMetaSetFilter();
271
272 ///////////////////////////////////////////////////////////////////////////
273 /* Mosaic management */
274
275 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Mosaic}s in the database.
276 * @return The List of Mosaics
277 */
278 List<Mosaic> getMosaics();
279
280 /** Get a {@link com.buckosoft.PicMan.domain.Mosaic} from the database based on this Mosaic ID.
281 * @param mid The Mosaic ID to query.
282 * @return The Mosaic that matches this mid, or null if not found.
283 */
284 Mosaic getMosaic(int mid);
285
286 /** Find the {@link com.buckosoft.PicMan.domain.Mosaic} in the database that matches these parameters.
287 * @param masterPic
288 * @param engine
289 * @param sid
290 * @param tileHeight
291 * @return The mosaic that matches these parameters, or null if not found.
292 */
293 Mosaic getMosaic(String masterPic, String engine, int sid, int tileHeight);
294
295 /** Return the number of tiles we have stored for this {@link com.buckosoft.PicMan.domain.Mosaic}
296 * @param mid The mosaicId
297 * @return The count
298 */
299 int getMosaicTileCount(int mid);
300
301 /** Delete the {@link com.buckosoft.PicMan.domain.Mosaic} from the database that has this Mosaic ID.
302 * @param mid The Mosaic ID to delete.
303 */
304 void deleteMosaic(int mid);
305
306 /** Store this {@link com.buckosoft.PicMan.domain.Mosaic} in the database.
307 * @param mosaic The Mosaic to store.
308 */
309 void storeMosaic(Mosaic mosaic);
310
311 /** Get a List of {@link com.buckosoft.PicMan.domain.MosaicBatch}es in the database.
312 * @return The List of MosaicBatches
313 */
314 List<MosaicBatch> getMosaicBatches();
315
316 /** Get the MosaicBatch that matches this mbid
317 * @param mbid The MosaicBatch id to query.
318 * @return The MosaicBatch that matches or null if not found.
319 */
320 MosaicBatch getMosaicBatch(int mbid);
321
322 /** Store this {@link com.buckosoft.PicMan.domain.MosaicBatch}es in the database.
323 * @param mbatch The MosaicBatch to store
324 */
325 void storeMosaicBatch(MosaicBatch mbatch);
326
327 ///////////////////////////////////////////////////////////////////////////
328 /* MosaicTile management */
329
330 /** Fetch the already built {@link com.buckosoft.PicMan.domain.MosaicTile}s for this Mosaic
331 * @param mid The MosaicID to fetch
332 * @return A List of MosaicTiles
333 */
334 List<MosaicTile> getMosaicTiles(int mid);
335
336 /** Delete the {@link com.buckosoft.PicMan.domain.MosaicTile}s for the Mosaic specified by this Mosaic ID.
337 * @param mid The Mosaic ID to delete.
338 */
339 void deleteMosaicTiles(int mid);
340
341 /** Store this {@link com.buckosoft.PicMan.domain.MosaicTile} in the database.
342 * @param tile The MosaicTile to store.
343 */
344 void storeMosaicTile(MosaicTile tile);
345
346 ///////////////////////////////////////////////////////////////////////////
347 /* MosaicVector management */
348
349 /** Store this {@link com.buckosoft.PicMan.domain.mosaic.MosaicVector} in the database.
350 * @param mv The MosaicVector to store.
351 */
352 void updateMosaicVectors(MosaicVector mv);
353
354 /** Get the List of {@link com.buckosoft.PicMan.domain.mosaic.MosaicVector}s that matches this picList, which probably came from a mosaic Set.
355 * @param picList The List of Pics to query
356 * @return The matching List of <code>MosaicVector</code>s. The List may be empty, but not null.
357 */
358 List<MosaicVector> getMosaicVectors(List<Pic> picList);
359
360 ///////////////////////////////////////////////////////////////////////////
361 /* Poster management */
362
363 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Mosaic}s in the database.
364 * @return The List of Mosaics
365 */
366 List<Poster> getPosters();
367
368 /** Get a {@link com.buckosoft.PicMan.domain.Poster} from the database based on this Poster ID.
369 * @param pid The Poster ID to query.
370 * @return The Poster that matches this pid, or null if not found.
371 */
372 Poster getPoster(int pid);
373
374 /** Delete the {@link com.buckosoft.PicMan.domain.Poster} from the database that has this Poster ID.
375 * @param pid The Poster ID to delete.
376 */
377 void deletePoster(int pid);
378
379 /** Store this {@link com.buckosoft.PicMan.domain.Poster} in the database.
380 * @param poster The Poster to store.
381 */
382 void storePoster(Poster poster);
383
384
385 ///////////////////////////////////////////////////////////////////////////
386 /* Pic management */
387
388 /** Add this {@link com.buckosoft.PicMan.domain.Pic} to the database.
389 * @param pic The Pic to add. pid is assumed to be 0.
390 */
391 void addPic(Pic pic);
392
393 /** Update this {@link com.buckosoft.PicMan.domain.Pic} in the database.
394 * Pic is assumed to exist and pid must not be 0.
395 * @param pic The Pic to update.
396 */
397 void updatePic(Pic pic);
398
399 /** Get a {@link com.buckosoft.PicMan.domain.Pic} who's name matches this picName.
400 * @param picName The name of the <code>Pic</code> to query.
401 * @return The Pic that matches this picName or <code>null</code>.
402 */
403 Pic getPic(String picName);
404
405 /** Get a {@link com.buckosoft.PicMan.domain.Pic} who's pid matches this one.
406 * @param pid The pid to query
407 * @return The Pic that matches this pid, or null if not found.
408 */
409 Pic getPic(int pid);
410
411 /** Get the newest pic in the database.
412 * @return The Pic with the newest Timestamp
413 */
414 Pic getNewestPic();
415
416 /** Return a random pic from the database
417 * @return Any pic from the database
418 */
419 Pic getRandomPic();
420
421
422 /** Return a list of Pics that have this md5Sum
423 * @param md5sum
424 * @return The list, may be empty
425 */
426 List<Pic> getPicsByMD5Sum(long md5sum);
427
428 /** Return a random pic from the database destined to be a thumbnail on the home page
429 * @param user The {@link User} who is requesting the Pic
430 * @return The name of any pic from the database that matches the User's preference
431 */
432 String getRandomHomePagePicName(User user);
433
434 /** Get a HashMap of all of the {@link com.buckosoft.PicMan.domain.Pic} names in the database.
435 * @return The map
436 */
437 HashMap<String, Date> getPicsMap();
438
439 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Pic}s in the database that match this name. Wildcards are supported.
440 * @param picName The name (or partial name) of the pics to fetch.
441 * @return A List of <code>Pic</code>s.
442 */
443 List<Pic> getPics(String picName);
444
445 /** Get a List of all of the Pics.
446 * @return A List of Pic
447 */
448 List<Pic> getPics();
449
450 /** Get a list of {@link com.buckosoft.PicMan.domain.Pic}s for this set at this size.
451 * @param set The set to use as a filter
452 * @param size The size to use as a filter
453 * @return A List of Pic
454 */
455 List<Pic> getPics(Set set, int size);
456
457 /** Get a list of {@link com.buckosoft.PicMan.domain.Pic}s that are in this subdirectory.
458 * @param rid Root id to search under
459 * @param dirName The directory, i.e. "2002/20021225"
460 * @return A List of Pic
461 */
462 List<Pic> getPicsInDir(int rid, String dirName);
463
464 /** Get a list of Pics that are newer than this date
465 * @param calendar The timestamp to compare against
466 * @return The List of Pics
467 */
468 List<Pic> getPicsNewerThan(Calendar calendar);
469
470 /** Determine the highest numbered thumb cache subdirectory used.
471 * @return the highest number, or 0 if no thumbs are cached.
472 */
473 int getPicMaxThumbCacheDirUsed();
474
475 /** Determine the number of cached thumbs in this cache directory. <br>
476 * Note that this doesn't actually check if the thumbs exist, only if they have a database entry.
477 * @param cacheDir The directory to check
478 * @return The Count
479 */
480 int getPicThumbCacheFillCount(int cacheDir);
481
482 /** Get the rating for this pic intersected by this set at this size
483 * @param picName The name of the Pic whose rating we want
484 * @param set The set to do the rating check against.
485 * If a pic is Audrey-7 and we want Carl, then this is probably not one we want.
486 * @param size The size of the pic we care about
487 * @return The rate of the pic. This is a double because we could get (6+7)/2 for a rate.
488 */
489 double getPicRate(String picName, Set set, int size);
490
491 /** Get the rating for this pic intersected by this MetaSet at this size
492 * @param picName The Pic whose rating we want
493 * @param metaSet The metaSet to do the rating check against.
494 * @param size The size of the pic we care about
495 * @return The rate of the pic. This is a double because we could get (6+7)/2 for a rate.
496 */
497 double getPicRate(String picName, MetaSet metaSet, int size);
498
499 ///////////////////////////////////////////////////////////////////////////
500 /* Roots management */
501
502 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Root}s
503 * @return A List of all of the Roots in the database
504 */
505 List<Root> getRoots();
506
507 /** Get the number of {@link com.buckosoft.PicMan.domain.Root}s in the database
508 * @return The number of <code>Root</code>s
509 */
510 int getRootCount();
511
512 /** Fetch a {@link com.buckosoft.PicMan.domain.Root}
513 * @param rid The rootId to match
514 * @return The Root
515 */
516 Root getRoot(int rid);
517
518 /** Fetch a {@link com.buckosoft.PicMan.domain.Root}
519 * @param name The Name of the Root to fetch
520 * @return The Root
521 */
522 Root getRoot(String name);
523
524 /** Set the {@link com.buckosoft.PicMan.domain.Root}s in the Database to be this List.
525 * I'm not sure why you'd want to do this, and it is unused, but here it is.
526 * @param roots A List of {@link com.buckosoft.PicMan.domain.Root}s
527 */
528 void setRoots(List<Root> roots);
529
530 /** Add this {@link com.buckosoft.PicMan.domain.Root} to the Database.
531 * the Root ID must be 0.
532 * @param root The Root to add.
533 * @throws Exception Can't do it.
534 */
535 void addRoot(Root root) throws Exception;
536
537 /** Delete this {@link com.buckosoft.PicMan.domain.Root} from the database.
538 * @param root The Root to delete.
539 * @throws Exception Can't do it.
540 */
541 void deleteRoot(Root root) throws Exception;
542
543 /** Store this existing {@link com.buckosoft.PicMan.domain.Root} in the database.
544 * The Root ID must <b>NOT</b> be 0.
545 * @param root The existing Root to update.
546 */
547 void storeRoot(Root root);
548
549 /** Get a List of Inactive {@link com.buckosoft.PicMan.domain.Root}s.
550 * Inactive <code>Root</code>s will not be scanned for new pics, or included in Sets queries.
551 * @return A List of Roots that the User has disabled.
552 */
553 List<Root> getInactiveRoots();
554
555 /** Get a List of active {@link com.buckosoft.PicMan.domain.Root}s.
556 * @return A List of Roots
557 */
558 List<Root> getActiveRoots();
559
560 ///////////////////////////////////////////////////////////////////////////
561 /* Set management */
562
563 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Set}s in the database.
564 * <b>Note:</b> The Sets are cached in memory. An external app writing to the database will not
565 * be reflected in this running instance.
566 * @return The List of {@link com.buckosoft.PicMan.domain.Set}s
567 */
568 List<Set> getSets();
569
570 /** Get a cloned List of all of the {@link com.buckosoft.PicMan.domain.Set}s in the database.
571 * This is useful for when you want to prune the list without altering the sets cache.
572 * @return The List of {@link com.buckosoft.PicMan.domain.Set}s
573 */
574 List<Set> getSetsClone();
575
576 /** Return the number of {@link com.buckosoft.PicMan.domain.Set}s in the Database.
577 * @return The Number of {@link com.buckosoft.PicMan.domain.Set}s
578 */
579 int getSetCount();
580
581 /** Get the {@link com.buckosoft.PicMan.domain.Set} that matches this Set ID
582 * @param sid The SetID to query
583 * @return The Set that was found or null if no match was made.
584 */
585 Set getSet(int sid);
586
587 /** Get the {@link com.buckosoft.PicMan.domain.Set} that matches this Set ID
588 * @param setName The name of the Set to query
589 * @return The Set that was found or null if no match was made.
590 */
591 Set getSet(String setName);
592
593 /** Set the {@link com.buckosoft.PicMan.domain.Set}s in the Database to be this List.
594 * I'm not sure why you'd want to do this, and it is unused, but here it is.
595 * @param sets A List of {@link com.buckosoft.PicMan.domain.Set}s
596 */
597 void setSets(List<Set> sets);
598
599 /** Add this new {@link com.buckosoft.PicMan.domain.Set} to the database.
600 * The Set ID (sid) is assumed to be 0.
601 * @param set The Set to add
602 * @throws Exception Can't do it
603 */
604 void addSet(Set set) throws Exception;
605
606 /** Delete this {@link com.buckosoft.PicMan.domain.Set} from the database.
607 * This is a very bad thing, as new Set IDs are derived from the number of Sets.
608 * @param set The Set to delete.
609 * @throws Exception Can't do it.
610 */
611 void deleteSet(Set set) throws Exception;
612
613 /** Update this existing {@link com.buckosoft.PicMan.domain.Set} in the database.
614 * @param set The Set to update
615 */
616 void storeSet(Set set);
617
618 /** Rename this Set. Includes changing references from the old setname to the new one.
619 * @param oldName What is this set called?
620 * @param newName What do we want it to be called?
621 */
622 void renameSet(String oldName, String newName);
623
624 /** Get a List of inactive {@link com.buckosoft.PicMan.domain.Set}s
625 * @return The List of {@link com.buckosoft.PicMan.domain.Set}s that the User has marked as inactive.
626 */
627 List<Set> getInactiveSets();
628
629 /** Get a List of active {@link com.buckosoft.PicMan.domain.Set}s
630 * @return The List of {@link com.buckosoft.PicMan.domain.Set}s that are NOT marked inactive.
631 */
632 List<Set> getActiveSets();
633
634 /** Get an array of the number of thumbnail sizes.
635 * Through the years, i have settled on 75,100,150,200,300 as the sizes that i play with and
636 * these numbers are hardcoded in here.
637 * @return An array of the sizes
638 */
639 int[] getSizeArray();
640
641 /** Get the array of Thumbnail Sizes as a List of Integers.
642 * The {@link com.buckosoft.PicMan.domain.Filter}s are keyed to the sizes.
643 * A {@link com.buckosoft.PicMan.domain.Thumbnail} that looks OK as a 75, might not be worthy of a 300.
644 * @return A List of Integers
645 * @see #getSizeArray()
646 */
647 List<Integer> getSizes();
648
649 /** Return the number of sizes that we deal with.
650 * @return That would be the number 5.
651 */
652 int getSizeCount();
653
654 ///////////////////////////////////////////////////////////////////////////
655 /* System */
656
657 /** Fetch a reference to the {@link com.buckosoft.PicMan.domain.System} configuration.
658 * <b>Note:</b> This is a cached object and changes made outside of this application will not be picked up.
659 * @return The cached {@link com.buckosoft.PicMan.domain.System}.
660 */
661 System getSystem();
662
663 /** Flush the {@link com.buckosoft.PicMan.domain.System} configuration back to the database.
664 * @param system The System to write.
665 */
666 void saveSystem(System system);
667
668 /** Get the user's preferred {@link com.buckosoft.PicMan.domain.Thumbnail} height used when running the editors.
669 * @return The height of the Thumnails (I like 140 pixels).
670 */
671 int getThumbHeight();
672
673 /** Return a list of file name extensions that denote pics that we are interested in. <br>
674 * Originally, i expected to use <code>.png</code> in here, but basically i've settled on <code>.jpg</code>. <br>
675 * This is actually convienent, because if there is a pic i want to ignore, i rename it to <code>.jpeg</code>.
676 * @return A List of Extensions, typically just "jpg".
677 */
678 List<String> getPicExtensions();
679
680 ///////////////////////////////////////////////////////////////////////////
681 /* Users */
682
683 /** Get the {@link com.buckosoft.PicMan.domain.User} who has this userid.
684 * @param userid The userid to query.
685 * @return A PicMan User.
686 */
687 User getUser(int userid) throws DataAccessException;
688
689 /** Store this {@link com.buckosoft.PicMan.domain.User} in the database. Does not affect the BSAccount settings of this User.
690 * @param user The User to save.
691 */
692 void storeUser(User user);
693
694 ///////////////////////////////////////////////////////////////////////////
695 /* Utilities */
696
697 /** Make a uuid String based on a setName and a size
698 * @param setName The name of the Set
699 * @param size The size
700 * @return The uuid String. i.e. "G_075"
701 */
702 String getUuid(String setName, int size);
703
704 ///////////////////////////////////////////////////////////////////////////
705 /* Virgin management */
706
707 /** Return the number of {@link com.buckosoft.PicMan.domain.Virgin}s in the database.
708 * @return The count.
709 */
710 int getVirginCount();
711
712 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Virgin}s in the database.
713 * @return The List
714 */
715 List<Virgin> getVirgins();
716
717 /** Get a List of all of the {@link com.buckosoft.PicMan.domain.Virgin}s in the database up to max number. <br>
718 * This is useful for the "process up to 5 virgins" page.
719 * @param max The Maximum number of <code>Virgin</code>s to put in the List
720 * @return The List.
721 */
722 List<Virgin> getVirgins(int max);
723
724 /** Is this picName a {@link com.buckosoft.PicMan.domain.Virgin}?
725 * @param picName The name of the {@link com.buckosoft.PicMan.domain.Pic} to query
726 * @return true if this picName is in the {@link com.buckosoft.PicMan.domain.Virgin}s table.
727 */
728 boolean isVirgin(String picName);
729
730 /** Add this Pic name as a {@link com.buckosoft.PicMan.domain.Virgin} in the database.
731 * @param picName The name of the Pic to add.
732 */
733 void addVirgin(String picName);
734
735 /** Delete this Pic name from the {@link com.buckosoft.PicMan.domain.Virgin}s table. This Pic is no longer a <code>Virgin</code>.
736 * @param picName The name of the {@link com.buckosoft.PicMan.domain.Pic} to remove.
737 */
738 void deleteVirgin(String picName);
739
740 /** Get the last time this client sync'd.
741 * @param host The host to fetch
742 * @return The date/time of sync or null if never synced.
743 */
744 Date getClientSyncTimestamp(String host);
745
746 /** Set the last time this client sync'd to now.
747 * @param host The host to fetch
748 */
749 void setClientSyncTimestamp(String host);
750
751 void updateSetTimestamp(String setSize);
752
753 void storeSyncClient(SyncClient syncClient);
754 List<SyncClient> getSyncClients();
755
756 void storeSyncServer(SyncServer syncServer);
757 List<SyncServer> getSyncServers();
758
759 /** Set the user who is accessing the database.
760 * @param dbUser The database user
761 */
762 void setDbUser(String dbUser);
763
764 /** Get the user who is accessing the database. This is realy a status field, as nothing outside of here accesses the database.
765 * @return Usually "picman" or "picman_dev"
766 */
767 String getDbUser();
768
769 /** Set the database url.
770 * @param dbUrl The dbUrl to set.
771 */
772 void setDbUrl(String dbUrl);
773
774 /** Get the url that is accessing the database. This is realy a status field, as nothing outside of here accesses the database.
775 * @return jdbc:mysql://localhost:3306/{something}
776 */
777 String getDbUrl();
778 }