1 package de.fhdw.wtf.persistence.facade; 2 3 import java.math.BigInteger; 4 import java.util.Collection; 5 import java.util.Date; 6 7 import de.fhdw.wtf.persistence.exception.PersistenceException; 8 import de.fhdw.wtf.persistence.meta.Association; 9 import de.fhdw.wtf.persistence.meta.Link; 10 import de.fhdw.wtf.persistence.meta.MapAssociation; 11 import de.fhdw.wtf.persistence.meta.MapLink; 12 import de.fhdw.wtf.persistence.meta.Object; 13 import de.fhdw.wtf.persistence.meta.Transaction; 14 import de.fhdw.wtf.persistence.meta.UnidirectionalAssociation; 15 import de.fhdw.wtf.persistence.meta.UnidirectionalLink; 16 import de.fhdw.wtf.persistence.meta.UserObject; 17 import de.fhdw.wtf.persistence.meta.UserType; 18 import de.fhdw.wtf.persistence.utils.Tuple; 19 20 /** 21 * An Interface to represent a facade towards the database to manipulate the Instance Layer of the database. 22 * 23 */ 24 public interface ObjectFacade { 25 26 /** 27 * Wildcard character in use for Kleene closure 28 */ 29 char REGEX_CHAR_KLEENE_STAR = '%'; 30 31 // ---------- Date:Find ---------- 32 33 /** 34 * Provides a Collection of {@link de.fhdw.wtf.persistence.meta.UserObject User Objects} which are owners of the 35 * {@link de.fhdw.wtf.persistence.meta.Association Association} {@code association}, which points to a String value 36 * which is like {@code string} and the link between the user Object and the String has been published before 37 * {@code date} and if the link has been deleted, the deletion date must be before {@code date}. SQL wildcards in 38 * {@code string} are allowed. 39 * 40 * @param association 41 * An UnidirectionalAssociation, which target is a String 42 * @param string 43 * A given String value 44 * @param date 45 * The moment in time the object graph is queried. 46 * @return A Set of User Objects. 47 * @throws PersistenceException 48 * This exception occurs if there are any problems contacting the database. 49 */ 50 Collection<UserObject> find(Association association, String string, Date date) throws PersistenceException; 51 52 /** 53 * Provides a Collection of User Objects which are owners of the Association association, which points to a Integer 54 * value which is like s and the link between the user Object and the String has been published before d and if the 55 * link has been deleted, the deletion date must be before d. 56 * 57 * @param association 58 * An UnidirectionalAssociation, which target is an Integer 59 * @param integer 60 * A given Integer value 61 * @param date 62 * The moment in time the object graph is queried. 63 * @return A Set of User Objects. 64 * @throws PersistenceException 65 * This exception occurs if there are any problems contacting the database. 66 */ 67 Collection<UserObject> find(Association association, BigInteger integer, Date date) throws PersistenceException; 68 69 // ---------- Date:Get ---------- 70 71 /** 72 * Provides a collection of Tuples of Links and Objects. The Links are instances of association and their owner is 73 * owner. The Objects are the targets of each link. The published date of the link are before date and possible 74 * deletion dates of the links are after date. So date specifies the moment of time the object graph is queried. 75 * 76 * @param owner 77 * An User Object. 78 * @param association 79 * An association where the owner points to type(o) 80 * @param date 81 * A moment in time the object graph is queried. 82 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 83 * @throws PersistenceException 84 * This exception occurs if there are any problems contacting the database. 85 */ 86 Collection<Tuple<UnidirectionalLink, Object>> get(UserObject owner, UnidirectionalAssociation association, Date date) 87 throws PersistenceException; 88 89 // ---------- Date:Get:Map ---------- 90 91 /** 92 * Provides a collection of Objects for a map. The Links are instances of association and their owner is owner. The 93 * Objects are the targets of each link. The published date of the link are before date and possible deletion dates 94 * of the links are after date. So date specifies the moment of time the object graph is queried. 95 * 96 * @param owner 97 * An User Object. 98 * @param association 99 * An association where the owner points to type(o) 100 * @param key 101 * The map-key 102 * @param date 103 * A moment in time the object graph is queried. 104 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 105 * @throws PersistenceException 106 * This exception occurs if there are any problems contacting the database. 107 */ 108 Collection<Object> get(UserObject owner, MapAssociation association, String key, Date date) 109 throws PersistenceException; 110 111 /** 112 * Provides a collection of Objects for a map. The Links are instances of association and their owner is owner. The 113 * Objects are the targets of each link. The published date of the link are before date and possible deletion dates 114 * of the links are after date. So date specifies the moment of time the object graph is queried. 115 * 116 * @param owner 117 * An User Object. 118 * @param association 119 * An association where the owner points to type(o) 120 * @param key 121 * The map-key 122 * @param date 123 * A moment in time the object graph is queried. 124 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 125 * @throws PersistenceException 126 * This exception occurs if there are any problems contacting the database. 127 */ 128 Collection<Object> get(UserObject owner, MapAssociation association, BigInteger key, Date date) 129 throws PersistenceException; 130 131 /** 132 * Provides a collection of Objects for a map. The Links are instances of association and their owner is owner. The 133 * Objects are the targets of each link. The published date of the link are before date and possible deletion dates 134 * of the links are after date. So date specifies the moment of time the object graph is queried. 135 * 136 * @param owner 137 * An User Object. 138 * @param association 139 * An association where the owner points to type(o) 140 * @param key 141 * The map-key 142 * @param date 143 * A moment in time the object graph is queried. 144 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 145 * @throws PersistenceException 146 * This exception occurs if there are any problems contacting the database. 147 */ 148 Collection<Object> get(UserObject owner, MapAssociation association, UserObject key, Date date) 149 throws PersistenceException; 150 151 // ---------- Date:InverseGet ---------- 152 153 /** 154 * Provides a collection of Tuples of Links and UserObjects. The Links are instances of a and their owner is o. The 155 * Objects are the targets of each link. The published date of the link are before d and possible deletion dates of 156 * the links are after d. So d specifies the moment of time the object graph is queried. 157 * 158 * @param s 159 * A String. 160 * @param association 161 * An association where the owner points to type(o) 162 * @param date 163 * A moment in time the object graph is queried. 164 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 165 * object. 166 * @throws PersistenceException 167 * This exception occurs if there are any problems contacting the database. 168 */ 169 // Collection<Tuple<UnidirectionalLink, UserObject>> 170 // inverseGet(String s, UnidirectionalAssociation association, Date date) 171 // throws PersistenceException; 172 173 /** 174 * Provides a collection of Tuples of Links and Objects. The Links are instances of a and their owner is o. The 175 * Objects are the targets of each link. The published date of the link are before d and possible deletion dates of 176 * the links are after d. So d specifies the moment of time the object graph is queried. 177 * 178 * @param i 179 * An Interger. 180 * @param association 181 * An association where the owner points to type(o) 182 * @param date 183 * A moment in time the object graph is queried. 184 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 185 * object. 186 * @throws PersistenceException 187 * This exception occurs if there are any problems contacting the database. 188 */ 189 // Collection<Tuple<UnidirectionalLink, UserObject>> 190 // inverseGet(Integer i, UnidirectionalAssociation association, Date date) 191 // throws PersistenceException; 192 193 /** 194 * Provides a collection of Tuples of Links and Objects. The Links are instances of association and their target is 195 * target. The Objects are the targets of each link. The published date of the link are before date and possible 196 * deletion dates of the links are after date. So date specifies the moment of time the object graph is queried. 197 * 198 * @param target 199 * An User Object. 200 * @param association 201 * An association where the owner points to type(o) 202 * @param date 203 * A moment in time the object graph is queried. 204 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 205 * object. 206 * @throws PersistenceException 207 * This exception occurs if there are any problems contacting the database. 208 */ 209 Collection<Tuple<UnidirectionalLink, UserObject>> inverseGet(UserObject target, 210 UnidirectionalAssociation association, 211 Date date) throws PersistenceException; 212 213 // ---------- Date:InverseGet:Map ---------- 214 215 /** 216 * Provides a owner for a map association. The UserObjects are the owner of each link. The published date of the 217 * link are before date and possible deletion dates of the links are after date. So date specifies the moment of 218 * time the object graph is queried. 219 * 220 * @param target 221 * An User Object represents the target. 222 * @param association 223 * An association where the owner points to type(o) 224 * @param date 225 * A moment in time the object graph is queried. 226 * @return A Set of Tuples, where the first component is the owner and the second is the key. 227 * @throws PersistenceException 228 * This exception occurs if there are any problems contacting the database. 229 */ 230 Collection<Tuple<UserObject, Object>> inverseGet(UserObject target, MapAssociation association, Date date) 231 throws PersistenceException; 232 233 /** 234 * Provides a owner for a map association. The UserObjects are the owner of each link. The published date of the 235 * link are before date and possible deletion dates of the links are after date. So date specifies the moment of 236 * time the object graph is queried. 237 * 238 * @param target 239 * An User Object represents the target. 240 * @param association 241 * An association where the owner points to type(o) 242 * @param date 243 * A moment in time the object graph is queried. 244 * @return A Set of Tuples, where the first component is the owner and the second is the key. 245 * @throws PersistenceException 246 * This exception occurs if there are any problems contacting the database. 247 */ 248 Collection<Tuple<UserObject, Object>> inverseGet(String target, MapAssociation association, Date date) 249 throws PersistenceException; 250 251 // 252 /** 253 * Provides a owner for a map association. The UserObjects are the owner of each link. The published date of the 254 * link are before date and possible deletion dates of the links are after date. So date specifies the moment of 255 * time the object graph is queried. 256 * 257 * @param target 258 * An User Object represents the target. 259 * @param association 260 * An association where the owner points to type(o) 261 * @param date 262 * A moment in time the object graph is queried. 263 * @return A Set of Tuples, where the first component is the owner and the second is the key. 264 * @throws PersistenceException 265 * This exception occurs if there are any problems contacting the database. 266 */ 267 Collection<Tuple<UserObject, Object>> inverseGet(BigInteger target, MapAssociation association, Date date) 268 throws PersistenceException; 269 270 // ---------- Trans:Find ---------- 271 272 /** 273 * Provides a Set of User Objects which have an association to a String Value, which value is like string and which 274 * are in the scope of the transaction transaction. User Objects which are in the scope of transaction are created 275 * by transaction or currently published and not not yet deleted by transaction. 276 * 277 * @param association 278 * An UnidirectionalAssociation towards a String, where the owner is a supertype to the type of the User 279 * Objects. 280 * @param string 281 * A given String value. SQL Wildcards are allowed. 282 * @param transaction 283 * A currently open Transaction. 284 * @return A Set of User Objects. 285 * @throws PersistenceException 286 * This exception occurs if there are any problems contacting the database. 287 */ 288 Collection<UserObject> find(Association association, String string, Transaction transaction) 289 throws PersistenceException; 290 291 /** 292 * Provides a Set of User Objects which have an association to an Integer Value, which value is like integer and 293 * which are in the scope of the transaction. User Objects which are in the scope of transaction are created by 294 * transaction or currently published and not not yet deleted by transaction. 295 * 296 * @param association 297 * An UnidirectionalAssociation towards an Integer, where the owner is a supertype to the type of the 298 * User Objects. 299 * @param integer 300 * A given Integer Value. 301 * @param transaction 302 * A currently open Transaction. 303 * @return A Set of User Objects. 304 * @throws PersistenceException 305 * This exception occurs if there are any problems contacting the database. 306 */ 307 Collection<UserObject> find(Association association, BigInteger integer, Transaction transaction) 308 throws PersistenceException; 309 310 // ---------- Trans:Get ---------- 311 312 /** 313 * Provides a collection of Tuples of Links and Objects. The Links are instances of the UnidirectionalAssociation 314 * association. And the Objects are the owner of the Links. type(owner) has to be is subtype of the owner of the 315 * UnidirectionalAssociation association. The Links and Objects are in the scope of the Transaction transaction. 316 * This means, that they are either created by transaction or currently published and not yet deleted. 317 * 318 * @param owner 319 * A User Objects, which type has an association a. 320 * @param association 321 * An UnidirectionalAssociation with type(o) = owner 322 * @param transaction 323 * A currently open Transaction. 324 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 325 * @throws PersistenceException 326 * This exception occurs if there are any problems contacting the database. 327 */ 328 Collection<Tuple<UnidirectionalLink, Object>> get(UserObject owner, 329 UnidirectionalAssociation association, 330 Transaction transaction) throws PersistenceException; 331 332 // ---------- Trans:Get:Map ---------- 333 334 /** 335 * Provides the target from a map link. The Links are instances of the MapAssociation association. And the Objects 336 * are the owner of the Links. type(owner) has to be is subtype of the owner of the MapAssociation association. The 337 * Links and Objects are in the scope of the Transaction transaction. This means, that they are either created by 338 * transaction or currently published and not yet deleted. 339 * 340 * @param owner 341 * A User Objects, which type has an association a. 342 * @param association 343 * An UnidirectionalAssociation with type(o) = owner 344 * @param key 345 * The map-key 346 * @param transaction 347 * A currently open Transaction. 348 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 349 * @throws PersistenceException 350 * This exception occurs if there are any problems contacting the database. 351 */ 352 Collection<Tuple<MapLink, Object>> get(UserObject owner, 353 MapAssociation association, 354 String key, 355 Transaction transaction) throws PersistenceException; 356 357 /** 358 * Provides the target from a map link. The Links are instances of the MapAssociation association. And the Objects 359 * are the owner of the Links. type(owner) has to be is subtype of the owner of the MapAssociation association. The 360 * Links and Objects are in the scope of the Transaction transaction. This means, that they are either created by 361 * transaction or currently published and not yet deleted. 362 * 363 * @param owner 364 * A User Objects, which type has an association a. 365 * @param association 366 * An UnidirectionalAssociation with type(o) = owner 367 * @param key 368 * The map-key 369 * @param transaction 370 * A currently open Transaction. 371 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 372 * @throws PersistenceException 373 * This exception occurs if there are any problems contacting the database. 374 */ 375 Collection<Tuple<MapLink, Object>> get(UserObject owner, 376 MapAssociation association, 377 BigInteger key, 378 Transaction transaction) throws PersistenceException; 379 380 /** 381 * Provides the target from a map link. The Links are instances of the MapAssociation association. And the Objects 382 * are the owner of the Links. type(owner) has to be is subtype of the owner of the MapAssociation association. The 383 * Links and Objects are in the scope of the Transaction transaction. This means, that they are either created by 384 * transaction or currently published and not yet deleted. 385 * 386 * @param owner 387 * A User Objects, which type has an association a. 388 * @param association 389 * An UnidirectionalAssociation with type(o) = owner 390 * @param key 391 * The map-key 392 * @param transaction 393 * A currently open Transaction. 394 * @return A Set of Tuples, where the first component is a link and the second component is an Object. 395 * @throws PersistenceException 396 * This exception occurs if there are any problems contacting the database. 397 */ 398 Collection<Tuple<MapLink, Object>> get(UserObject owner, 399 MapAssociation association, 400 UserObject key, 401 Transaction transaction) throws PersistenceException; 402 403 // ---------- Trans:InverseGet ---------- 404 405 /** 406 * Provides a collection of Tuples of Links and User Objects. The Links are instances of the 407 * UnidirectionalAssociation association. And the User Objects are the targets of the Links. type(target) has to be 408 * is subtype of the target of the UnidirectionalAssociation association. The Links and Objects are in the scope of 409 * the Transaction transaction. This means, that they are either created by transaction or currently published and 410 * not yet deleted. 411 * 412 * @param target 413 * A User Object, which type is target of an association a 414 * @param association 415 * An UnidirectionalAssociation with type(o) = target 416 * @param transaction 417 * A currently open Transaction. 418 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 419 * object. 420 * @throws PersistenceException 421 * This exception occurs if there are any problems contacting the database. 422 */ 423 Collection<Tuple<UnidirectionalLink, UserObject>> inverseGet(UserObject target, 424 UnidirectionalAssociation association, 425 Transaction transaction) throws PersistenceException; 426 427 /** 428 * Provides a collection of Tuples of Links and User Objects. The Links are instances of the 429 * UnidirectionalAssociation a. And the User Objects are the owners of the Links. type(o) has to be is subtype of 430 * the target of the UnidirectionalAssociation a. The Links and Objects are in the scope of the Transaction t. This 431 * means, that they are either created by t or currently published and not yet deleted. 432 * 433 * @param o 434 * A User Object, which type is target of an association a 435 * @param association 436 * An UnidirectionalAssociation with type(o) = target 437 * @param transaction 438 * A currently open Transaction. 439 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 440 * object. 441 * @throws PersistenceException 442 * This exception occurs if there are any problems contacting the database. 443 */ 444 // Collection<Tuple<UnidirectionalLink, UserObject>> 445 // inverseGet(String s, UnidirectionalAssociation association, Transaction 446 // transaction) throws PersistenceException; 447 448 /** 449 * Provides a collection of Tuples of Links and User Objects. The Links are instances of the 450 * UnidirectionalAssociation a. And the User Objects are the owners of the Links. type(o) has to be is subtype of 451 * the target of the UnidirectionalAssociation a. The Links and Objects are in the scope of the Transaction t. This 452 * means, that they are either created by t or currently published and not yet deleted. 453 * 454 * @param o 455 * A User Object, which type is target of an association a 456 * @param association 457 * An UnidirectionalAssociation with type(o) = target 458 * @param transaction 459 * A currently open Transaction. 460 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 461 * object. 462 * @throws PersistenceException 463 * This exception occurs if there are any problems contacting the database. 464 */ 465 // Collection<Tuple<UnidirectionalLink, UserObject>> 466 // inverseGet(Integer i, UnidirectionalAssociation association, Transaction 467 // transaction) throws PersistenceException; 468 469 // ---------- Trans:InverseGet:Map ---------- 470 471 /** 472 * Provides a collection of Tuples of the Owner and Key for a map association. The User Objects are the owners. 473 * type(target) has to be is subtype of the target of the MapAssociation association. The Keys and Owner are in the 474 * scope of the Transaction transaction. This means, that they are either created by transaction or currently 475 * published and not yet deleted. 476 * 477 * @param target 478 * A User Object, which type is target of an association a 479 * @param association 480 * An UnidirectionalAssociation with type(o) = target 481 * @param transaction 482 * A currently open Transaction. 483 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 484 * object. 485 * @throws PersistenceException 486 * This exception occurs if there are any problems contacting the database. 487 */ 488 Collection<Tuple<UserObject, Object>> inverseGet(UserObject target, 489 MapAssociation association, 490 Transaction transaction) throws PersistenceException; 491 492 /** 493 * Provides a collection of Tuples of the Owner and Key for a map association. The User Objects are the owners. 494 * type(target) has to be is subtype of the target of the MapAssociation association. The Keys and Owner are in the 495 * scope of the Transaction transaction. This means, that they are either created by transaction or currently 496 * published and not yet deleted. 497 * 498 * @param target 499 * A User Object, which type is target of an association a 500 * @param association 501 * An UnidirectionalAssociation with type(o) = target 502 * @param transaction 503 * A currently open Transaction. 504 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 505 * object. 506 * @throws PersistenceException 507 * This exception occurs if there are any problems contacting the database. 508 */ 509 Collection<Tuple<UserObject, Object>> inverseGet(String target, MapAssociation association, Transaction transaction) 510 throws PersistenceException; 511 512 /** 513 * Provides a collection of Tuples of the Owner and Key for a map association. The User Objects are the owners. 514 * type(target) has to be is subtype of the target of the MapAssociation association. The Keys and Owner are in the 515 * scope of the Transaction transaction. This means, that they are either created by transaction or currently 516 * published and not yet deleted. 517 * 518 * @param target 519 * A User Object, which type is target of an association a 520 * @param association 521 * An UnidirectionalAssociation with type(o) = target 522 * @param transaction 523 * A currently open Transaction. 524 * @return A Set of Tuples, where the first component is a UnidirectionalLink and the second component is an user 525 * object. 526 * @throws PersistenceException 527 * This exception occurs if there are any problems contacting the database. 528 */ 529 Collection<Tuple<UserObject, Object>> inverseGet(BigInteger target, 530 MapAssociation association, 531 Transaction transaction) throws PersistenceException; 532 533 // ---------- Other ---------- 534 535 /** 536 * Provides true if before and after are in conflict, e.g. accessing Objects and Links in a modifying manner, when 537 * before is committed before after. 538 * 539 * @param before 540 * A currently open transaction. 541 * @param after 542 * A currently open transaction. 543 * @return Provides true if the two transactions are in conflict, when before commits before after. 544 * @throws PersistenceException 545 * This exception occurs if there are any problems contacting the database. 546 */ 547 boolean isInConflict(Transaction before, Transaction after) throws PersistenceException; 548 549 /** 550 * Checks if a given Transaction is a transaction which is not yet committed or rolled back if t is an adhoc 551 * transaction. 552 * 553 * @param transaction 554 * A possible open Transaction. 555 * @return Provides true if t is an open transaction. 556 * @throws PersistenceException 557 * This exception occurs if there are any problems contacting the database. 558 */ 559 boolean isOpenTransaction(Transaction transaction) throws PersistenceException; 560 561 /** 562 * This Method creates an instance of a given User Type. The User Type has to be a concrete Type, otherwise an 563 * exception will be thrown. If the the type is also a user transaction, a new transaction will be opened. 564 * 565 * @param type 566 * A User Type which is not abstract. 567 * @param transaction 568 * A Transaction in which scope the instance will be created. 569 * @return Provides the new Instance to type. 570 * @throws PersistenceException 571 * This exception occurs if there are any problems contacting the database. 572 */ 573 UserObject create(UserType type, Transaction transaction) throws PersistenceException; 574 575 /** 576 * This Method deletes a given User Object in the scope of transaction transaction. This method only works if there 577 * are Links anymore, where object is owner or target of the link (defensive manner). 578 * 579 * @param object 580 * A User Objects, which is accessible in the scope of transaction and there are links anymore pointing 581 * to. 582 * @param transaction 583 * A currently open transaction. 584 * @throws PersistenceException 585 * This exception occurs if there are any problems contacting the database. 586 */ 587 void delete(UserObject object, Transaction transaction) throws PersistenceException; 588 589 // ---------- Set ---------- 590 591 /** 592 * This method creates a link between the user Object owner and the user object target. If the association is 593 * essential a modified flag from transaction will be set for owner. Also if the association is unique, the previos 594 * existing link will be deleted. The UnidirectionalLink will be an instance of the UnidirectionalAssociation 595 * association. The owner has to be a subtype of association.owner and the target has to be a subtype of 596 * association.target otherwise an exception will be thrown. Also owner and target have to be in scope of 597 * transaction. The link also will be created in scope of transaction. 598 * 599 * @param owner 600 * A User Object, where type <= a.owner 601 * @param association 602 * An UnidirectionalAssociation 603 * @param target 604 * A User Object, where type <= a.target 605 * @param transaction 606 * A currently open Transaction. 607 * @return Provides a new UnidirectionalLink, which is an instance of a. 608 * @throws PersistenceException 609 * This exception occurs if there are any problems contacting the database or there are consistencies 610 * violated. 611 */ 612 UnidirectionalLink set(UserObject owner, 613 UnidirectionalAssociation association, 614 UserObject target, 615 Transaction transaction) throws PersistenceException; 616 617 /** 618 * This method creates a link between the user Object owner and the user object target. If the association is 619 * essential a modified flag from transaction will be set for owner. Also if the association is unique, the previos 620 * existing link will be deleted. The UnidirectionalLink will be an instance of the UnidirectionalAssociation 621 * association. The owner has to be a subtype of association.owner and the target has to be a subtype of 622 * association.target otherwise an exception will be thrown. Also owner and target have to be in scope of 623 * transaction. The link also will be created in scope of transaction. 624 * 625 * @param owner 626 * A User Object, where type <= a.owner 627 * @param association 628 * An UnidirectionalAssociation 629 * @param target 630 * An Integer Value 631 * @param transaction 632 * A currently open Transaction. 633 * @return Provides a new UnidirectionalLink, which is an instance of a. 634 * @throws PersistenceException 635 * This exception occurs if there are any problems contacting the database or there consistencies are 636 * violated. 637 */ 638 UnidirectionalLink set(UserObject owner, 639 UnidirectionalAssociation association, 640 BigInteger target, 641 Transaction transaction) throws PersistenceException; 642 643 /** 644 * This method creates a link between the user Object owner and the user object target. If the association is 645 * essential a modified flag from transaction will be set for owner. Also if the association is unique, the previos 646 * existing link will be deleted. The UnidirectionalLink will be an instance of the UnidirectionalAssociation 647 * association. The owner has to be a subtype of association.owner and the target has to be a subtype of 648 * association.target otherwise an exception will be thrown. Also owner and target have to be in scope of 649 * transaction. The link also will be created in scope of transaction. 650 * 651 * @param owner 652 * A User Object, where type <= a.owner 653 * @param association 654 * An UnidirectionalAssociation 655 * @param target 656 * An String Value. 657 * @param transaction 658 * A currently open Transaction. 659 * @return Provides a new UnidirectionalLink, which is an instance of a. 660 * @throws PersistenceException 661 * This exception occurs if there are any problems contacting the database or there are consistencies 662 * violated. 663 */ 664 UnidirectionalLink set(UserObject owner, 665 UnidirectionalAssociation association, 666 String target, 667 Transaction transaction) throws PersistenceException; 668 669 // ---------- Put ---------- 670 671 /** 672 * This method creates a link between the user Object owner, the user object target and the map key. If the 673 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 674 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 675 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 676 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 677 * transaction. The link also will be created in scope of transaction. 678 * 679 * @param owner 680 * A User Object, where type <= a.owner 681 * @param association 682 * An MapAssociation 683 * @param target 684 * A User Object, where type <= a.target 685 * @param key 686 * The key-Object 687 * @param transaction 688 * A currently open Transaction. 689 * @return Provides a new MapLink, which is an instance of association. 690 * @throws PersistenceException 691 * This exception occurs if there are any problems contacting the database or there are consistencies 692 * violated. 693 */ 694 MapLink put(UserObject owner, MapAssociation association, UserObject target, String key, Transaction transaction) 695 throws PersistenceException; 696 697 /** 698 * This method creates a link between the user Object owner, the user object target and the map key. If the 699 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 700 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 701 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 702 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 703 * transaction. The link also will be created in scope of transaction. 704 * 705 * @param owner 706 * A User Object, where type <= a.owner 707 * @param association 708 * An MapAssociation 709 * @param target 710 * An Integer Value 711 * @param key 712 * The key-Object 713 * @param transaction 714 * A currently open Transaction. 715 * @return Provides a new MapLink, which is an instance of association. 716 * @throws PersistenceException 717 * This exception occurs if there are any problems contacting the database or there consistencies are 718 * violated. 719 */ 720 MapLink put(UserObject owner, MapAssociation association, BigInteger target, String key, Transaction transaction) 721 throws PersistenceException; 722 723 /** 724 * This method creates a link between the user Object owner, the user object target and the map key. If the 725 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 726 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 727 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 728 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 729 * transaction. The link also will be created in scope of transaction. 730 * 731 * @param owner 732 * A User Object, where type <= a.owner 733 * @param association 734 * An MapAssociation 735 * @param target 736 * An String Value. 737 * @param key 738 * The key-Object 739 * @param transaction 740 * A currently open Transaction. 741 * @return Provides a new MapLink, which is an instance of association. 742 * @throws PersistenceException 743 * This exception occurs if there are any problems contacting the database or there are consistencies 744 * violated. 745 */ 746 MapLink put(UserObject owner, MapAssociation association, String target, String key, Transaction transaction) 747 throws PersistenceException; 748 749 /** 750 * This method creates a link between the user Object owner, the user object target and the map key. If the 751 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 752 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 753 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 754 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 755 * transaction. The link also will be created in scope of transaction. 756 * 757 * @param owner 758 * A User Object, where type <= a.owner 759 * @param association 760 * An MapAssociation 761 * @param target 762 * A User Object, where type <= a.target 763 * @param key 764 * The key-Object 765 * @param transaction 766 * A currently open Transaction. 767 * @return Provides a new MapLink, which is an instance of association. 768 * @throws PersistenceException 769 * This exception occurs if there are any problems contacting the database or there are consistencies 770 * violated. 771 */ 772 MapLink put(UserObject owner, MapAssociation association, UserObject target, BigInteger key, Transaction transaction) 773 throws PersistenceException; 774 775 /** 776 * This method creates a link between the user Object owner, the user object target and the map key. If the 777 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 778 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 779 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 780 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 781 * transaction. The link also will be created in scope of transaction. 782 * 783 * @param owner 784 * A User Object, where type <= a.owner 785 * @param association 786 * An MapAssociation 787 * @param target 788 * An Integer Value 789 * @param key 790 * The key-Object 791 * @param transaction 792 * A currently open Transaction. 793 * @return Provides a new MapLink, which is an instance of association. 794 * @throws PersistenceException 795 * This exception occurs if there are any problems contacting the database or there consistencies are 796 * violated. 797 */ 798 MapLink put(UserObject owner, MapAssociation association, BigInteger target, BigInteger key, Transaction transaction) 799 throws PersistenceException; 800 801 /** 802 * This method creates a link between the user Object owner, the user object target and the map key. If the 803 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 804 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 805 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 806 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 807 * transaction. The link also will be created in scope of transaction. 808 * 809 * @param owner 810 * A User Object, where type <= a.owner 811 * @param association 812 * An MapAssociation 813 * @param target 814 * An String Value. 815 * @param key 816 * The key-Object 817 * @param transaction 818 * A currently open Transaction. 819 * @return Provides a new MapLink, which is an instance of association. 820 * @throws PersistenceException 821 * This exception occurs if there are any problems contacting the database or there are consistencies 822 * violated. 823 */ 824 MapLink put(UserObject owner, MapAssociation association, String target, BigInteger key, Transaction transaction) 825 throws PersistenceException; 826 827 /** 828 * This method creates a link between the user Object owner, the user object target and the map key. If the 829 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 830 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 831 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 832 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 833 * transaction. The link also will be created in scope of transaction. 834 * 835 * @param owner 836 * A User Object, where type <= a.owner 837 * @param association 838 * An MapAssociation 839 * @param target 840 * A User Object, where type <= a.target 841 * @param key 842 * The key-Object 843 * @param transaction 844 * A currently open Transaction. 845 * @return Provides a new MapLink, which is an instance of association. 846 * @throws PersistenceException 847 * This exception occurs if there are any problems contacting the database or there are consistencies 848 * violated. 849 */ 850 MapLink put(UserObject owner, MapAssociation association, UserObject target, UserObject key, Transaction transaction) 851 throws PersistenceException; 852 853 /** 854 * This method creates a link between the user Object owner, the user object target and the map key. If the 855 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 856 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 857 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 858 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 859 * transaction. The link also will be created in scope of transaction. 860 * 861 * @param owner 862 * A User Object, where type <= a.owner 863 * @param association 864 * An MapAssociation 865 * @param target 866 * An Integer Value 867 * @param key 868 * The key-Object 869 * @param transaction 870 * A currently open Transaction. 871 * @return Provides a new MapLink, which is an instance of association. 872 * @throws PersistenceException 873 * This exception occurs if there are any problems contacting the database or there consistencies are 874 * violated. 875 */ 876 MapLink put(UserObject owner, MapAssociation association, BigInteger target, UserObject key, Transaction transaction) 877 throws PersistenceException; 878 879 /** 880 * This method creates a link between the user Object owner, the user object target and the map key. If the 881 * association is essential a modified flag from t will be set for owner. The previos existing link will be deleted. 882 * The MapLink will be an instance of the MapAssociation association. The owner has to be a subtype of 883 * association.owner, the target has to be a subtype of association.target and the key has to be a subtype of 884 * association.keyType otherwise an exception will be thrown. Also owner, target and key have to be in scope of 885 * transaction. The link also will be created in scope of transaction. 886 * 887 * @param owner 888 * A User Object, where type <= a.owner 889 * @param association 890 * An MapAssociation 891 * @param target 892 * An String Value. 893 * @param key 894 * The key-Object 895 * @param transaction 896 * A currently open Transaction. 897 * @return Provides a new MapLink, which is an instance of association. 898 * @throws PersistenceException 899 * This exception occurs if there are any problems contacting the database or there are consistencies 900 * violated. 901 */ 902 MapLink put(UserObject owner, MapAssociation association, String target, UserObject key, Transaction transaction) 903 throws PersistenceException; 904 905 // ---------- Other ---------- 906 907 /** 908 * This method deletes a given Link in the scope of the transaction transaction. If the type of the link has an 909 * essential flag an modified flag for the owner of the Link will be set. 910 * 911 * @param link 912 * A UnidirectionalLink which will be deleted. 913 * @param transaction 914 * A currently open transaction. 915 * @throws PersistenceException 916 * This exception occurs if there are any problems contacting the database. 917 */ 918 void unset(Link link, Transaction transaction) throws PersistenceException; 919 920 /** 921 * This Methods commits a currently open transaction, so all modification transaction has done will be accessible to 922 * all other transaction and can be seen in future revisions. If there are other open Transactions transaction', 923 * where isInConflict(transaction',transaction) = true, then each transaction' will be rolled back. 924 * 925 * @param transaction 926 * A currently open transaction. 927 * @throws PersistenceException 928 * This exception occurs if there are any problems contacting the database. 929 */ 930 void commit(Transaction transaction) throws PersistenceException; 931 932 /** 933 * This methods rolls a transaction back, this means that all modifications of transaction will be removed. If 934 * transaction is an adhoc Transaction transaction will also be closed. 935 * 936 * @param transaction 937 * A currently open Transaction. 938 * @throws PersistenceException 939 * This exception occurs if there are any problems contacting the database. 940 */ 941 void rollback(Transaction transaction) throws PersistenceException; 942 943 /** 944 * This Methods creates a save point inside a transaction. So modifications of transaction until now are saved so it 945 * is possible to rollback to this save point later. 946 * 947 * @param transaction 948 * A currently open transaction. 949 * @throws PersistenceException 950 * This exception occurs if there are any problems contacting the database. 951 */ 952 void savePoint(Transaction transaction) throws PersistenceException; 953 954 /** 955 * This Method deletes all modifications of transaction since the last created save point of transaction. If 956 * transaction has never created a save point all modifications will be lost. 957 * 958 * @param transaction 959 * A currently open transaction. 960 * @throws PersistenceException 961 * This exception occurs if there are any problems contacting the database. 962 */ 963 void rollbackToSavePoint(Transaction transaction) throws PersistenceException; 964 965 /** 966 * This Method provides an Integer Value with the given Id. If there is no Integer value with the given id, an 967 * exception will be thrown. 968 * 969 * @param id 970 * An id of an integer value inside the database. 971 * @return Provides a Big Integer Value Object. 972 * @throws PersistenceException 973 * This exception occurs if there are any problems contacting the database or there is not Integer Value 974 * with the given id. 975 */ 976 BigInteger getIntForId(long id) throws PersistenceException; 977 978 /** 979 * This Method provides a String Value with the given Id. If there is no String value with the given id, an 980 * exception will be thrown. 981 * 982 * @param id 983 * An id of a string value inside the database. 984 * @return Provides a String Value Object. 985 * @throws PersistenceException 986 * This exception occurs if there are any problems contacting the database or there is no String with 987 * the given id. 988 */ 989 String getStringForId(long id) throws PersistenceException; 990 991 /** 992 * Provides the id of a given String value string. If there is no String value same as string is present inside the 993 * database a new String Value will be created in the database. 994 * 995 * @param string 996 * A String s 997 * @return The Id of s in the database. 998 * @throws PersistenceException 999 * This exception occurs if there are any problems contacting the database. 1000 */ 1001 long getIdForString(String string) throws PersistenceException; 1002 1003 /** 1004 * Provides the id of a given Integer value integer. If there is no Integer value same as is is present inside the 1005 * database a new Integer value will be created in the database. 1006 * 1007 * @param integer 1008 * An Integer i 1009 * @return The Id of i in the database. 1010 * @throws PersistenceException 1011 * This exception occurs if there are any problems contacting the database. 1012 */ 1013 long getIdForInteger(BigInteger integer) throws PersistenceException; 1014 1015 /** 1016 * This Method provides a new Adhoc Transaction, which can be used to manipulate data. 1017 * 1018 * @return A new open Adoc Transaction. 1019 * @throws PersistenceException 1020 * This exception occurs if there are any problems contacting the database. 1021 */ 1022 Transaction provideAdhocTransaction() throws PersistenceException; 1023 1024 /** 1025 * Provides an instance of the TypeManager, an object which has knowledge about every type and association in the 1026 * knowledge-tier. Before you cann call this operation, you have to initialize this facade. 1027 * 1028 * @return An Instance of the Type Manager. 1029 */ 1030 TypeManager getTypeManager(); 1031 1032 /** 1033 * !! ATTENTION !!! This method clears the object world completely, therefore all data will be lost. So use this 1034 * method carefully and only during development time !!! 1035 * 1036 * @throws PersistenceException 1037 * This exception occurs if there are any problems contacting the database. 1038 */ 1039 void clear() throws PersistenceException; 1040 1041 /** 1042 * This method provides all instances for a given User Type, which can be seen in the current transaction. Because 1043 * the provided dataset may be large, this method created no read-flags on the returned objects, so it is possible 1044 * the run into race-conditions on the returned objects. 1045 * 1046 * @param type 1047 * The Type, which the reurned objects are instances of. 1048 * @param transaction 1049 * The current Transaction, which is used 1050 * @return A Collection of User Types, which can be seen at the moment and are instances of the given user type. 1051 * @throws PersistenceException 1052 * This exception occurs if there are any problems contacting the database. 1053 */ 1054 Collection<UserObject> findAllObjects(UserType type, Transaction transaction) throws PersistenceException; 1055 1056 /** 1057 * This provides the UserObject with the given id and marks the corresponding Object as read, so it will be under 1058 * transaction control. 1059 * 1060 * @param id 1061 * The Id of the Provided User Object. 1062 * @param transaction 1063 * The Transaction which will place the read marker on the object. 1064 * @return Provides a User Object with the given Id. 1065 * @throws PersistenceException 1066 * An Exception will be thrown if something went wrong. 1067 */ 1068 UserObject checkUserObjectOut(long id, Transaction transaction) throws PersistenceException; 1069 1070 }