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 }