| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||||||
| EOCustomObject |
|
| 1.4;1.4 |
| 1 | /* |
|
| 2 | Wotonomy: OpenStep design patterns for pure Java applications. |
|
| 3 | Copyright (C) 2001 Intersect Software Corporation |
|
| 4 | ||
| 5 | This library is free software; you can redistribute it and/or |
|
| 6 | modify it under the terms of the GNU Lesser General Public |
|
| 7 | License as published by the Free Software Foundation; either |
|
| 8 | version 2.1 of the License, or (at your option) any later version. |
|
| 9 | ||
| 10 | This library is distributed in the hope that it will be useful, |
|
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
| 13 | Lesser General Public License for more details. |
|
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public |
|
| 16 | License along with this library; if not, see http://www.gnu.org |
|
| 17 | */ |
|
| 18 | ||
| 19 | package net.wotonomy.control; |
|
| 20 | ||
| 21 | import java.util.Collection; |
|
| 22 | import java.util.List; |
|
| 23 | import java.util.Map; |
|
| 24 | ||
| 25 | import net.wotonomy.foundation.NSArray; |
|
| 26 | import net.wotonomy.foundation.NSDictionary; |
|
| 27 | import net.wotonomy.foundation.NSSet; |
|
| 28 | import net.wotonomy.foundation.internal.WotonomyException; |
|
| 29 | ||
| 30 | /** |
|
| 31 | * EOCustomObject implements all the necessary interfaces to |
|
| 32 | * receive first-class treatment from the control framework. |
|
| 33 | * The implementation delegates as much class meta-behavior as |
|
| 34 | * possible to EOClassDescription, letting subclasses |
|
| 35 | * focus exclusively on business logic while still allowing |
|
| 36 | * them to customize as much class behavior as needed. |
|
| 37 | * |
|
| 38 | * @author michael@mpowers.net |
|
| 39 | * @author $Author: cgruber $ |
|
| 40 | * @version $Revision: 894 $ |
|
| 41 | */ |
|
| 42 | public class EOCustomObject |
|
| 43 | implements EOEnterpriseObject, |
|
| 44 | EOKeyValueCodingAdditions, |
|
| 45 | EODeferredFaulting, |
|
| 46 | EORelationshipManipulation, |
|
| 47 | EOValidation |
|
| 48 | { |
|
| 49 | private transient static EOClassDescription classDescription; |
|
| 50 | private transient EOEditingContext editingContext; |
|
| 51 | ||
| 52 | // static configuration |
|
| 53 | ||
| 54 | /** |
|
| 55 | * Specifies whether the implementation of EOKeyValueCoding |
|
| 56 | * is permitted to access field directly. This implementation |
|
| 57 | * returns true; subclasses may override to customize this behavior. |
|
| 58 | */ |
|
| 59 | public static boolean canAccessFieldsDirectly() |
|
| 60 | { |
|
| 61 | 0 | return true; |
| 62 | } |
|
| 63 | ||
| 64 | /** |
|
| 65 | * Specifies whether the implementation of EOKeyValueCoding |
|
| 66 | * is permitted to access private accessors. This implementation |
|
| 67 | * returns true; subclasses may override to customize this behavior. |
|
| 68 | */ |
|
| 69 | public static boolean shouldUseStoredAccessors() |
|
| 70 | { |
|
| 71 | 0 | return true; |
| 72 | } |
|
| 73 | ||
| 74 | /** |
|
| 75 | * Specifies whether deferred faults should be used. This implementation |
|
| 76 | * returns false; subclasses may override to customize this behavior. |
|
| 77 | */ |
|
| 78 | public static boolean usesDeferredFaultCreation() |
|
| 79 | { |
|
| 80 | 0 | return false; |
| 81 | } |
|
| 82 | ||
| 83 | // constructors |
|
| 84 | ||
| 85 | /** |
|
| 86 | * Default constructor initializes private state. |
|
| 87 | * EditingContext and ClassDescription are set to null. |
|
| 88 | */ |
|
| 89 | 0 | public EOCustomObject() |
| 90 | 0 | { |
| 91 | 0 | editingContext = null; |
| 92 | 0 | classDescription = null; |
| 93 | 0 | } |
| 94 | ||
| 95 | /** |
|
| 96 | * Preferred constructor, specifying an editing context, |
|
| 97 | * a class description, and a global id, any or all of which |
|
| 98 | * may be null. Subclasses should invoke this constructor. |
|
| 99 | */ |
|
| 100 | 0 | public EOCustomObject( |
| 101 | EOEditingContext aContext, |
|
| 102 | EOClassDescription aClassDescription, |
|
| 103 | EOGlobalID aGlobalID ) |
|
| 104 | 0 | { |
| 105 | 0 | editingContext = aContext; |
| 106 | 0 | classDescription = aClassDescription; |
| 107 | 0 | } |
| 108 | ||
| 109 | // interface EOEnterpriseObject |
|
| 110 | ||
| 111 | /** |
|
| 112 | * Returns a List of all property keys defined on this object. |
|
| 113 | * This includes both attributes and relationships. |
|
| 114 | * This implementation returns the union of attributeKeys, |
|
| 115 | * toOneRelationshipKeys, and toManyRelationshipKeys. |
|
| 116 | */ |
|
| 117 | public NSArray allPropertyKeys() |
|
| 118 | { |
|
| 119 | 0 | NSSet union = new NSSet(); |
| 120 | 0 | union.addAll( attributeKeys() ); |
| 121 | 0 | union.addAll( toOneRelationshipKeys() ); |
| 122 | 0 | union.addAll( toManyRelationshipKeys() ); |
| 123 | 0 | return new NSArray( (Collection) union ); |
| 124 | } |
|
| 125 | ||
| 126 | /** |
|
| 127 | * Returns a list of all attributes defined on this object. |
|
| 128 | * Attributes are all properties that are not relationships. |
|
| 129 | * This implementation retrieves the keys from the class |
|
| 130 | * description. |
|
| 131 | */ |
|
| 132 | public NSArray attributeKeys() |
|
| 133 | { |
|
| 134 | 0 | return classDescription().attributeKeys(); |
| 135 | } |
|
| 136 | ||
| 137 | //void awakeFromClientUpdate(EOEditingContext aContext) |
|
| 138 | ||
| 139 | /** |
|
| 140 | * Called when the object has first been fetched into the |
|
| 141 | * specified editing context. This implementation calls |
|
| 142 | * awakeObjectFromFetch on the class description. |
|
| 143 | */ |
|
| 144 | public void awakeFromFetch(EOEditingContext anEditingContext) |
|
| 145 | { |
|
| 146 | 0 | classDescription().awakeObjectFromFetch( this, anEditingContext ); |
| 147 | 0 | } |
| 148 | ||
| 149 | /** |
|
| 150 | * Called when the object has been inserted into the |
|
| 151 | * specified editing context. This implementation calls |
|
| 152 | * awakeObjectFromInsertion on the class description. |
|
| 153 | */ |
|
| 154 | public void awakeFromInsertion(EOEditingContext anEditingContext) |
|
| 155 | { |
|
| 156 | 0 | classDescription().awakeObjectFromInsertion( this, anEditingContext ); |
| 157 | 0 | } |
| 158 | ||
| 159 | /** |
|
| 160 | * Returns a Map representing the delta of the current state |
|
| 161 | * from the state represented in the specified snapshot. |
|
| 162 | * The result will contain only the keys that have changed |
|
| 163 | * and their values. Relationship keys will map to an NSArray |
|
| 164 | * that contains an NSArray of added objects and an NSArray |
|
| 165 | * of removed objects, in that order. |
|
| 166 | */ |
|
| 167 | public NSDictionary changesFromSnapshot(NSDictionary snapshot) |
|
| 168 | { |
|
| 169 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 170 | } |
|
| 171 | ||
| 172 | /** |
|
| 173 | * Returns a class description for this object. |
|
| 174 | * Calls EOClassDescription.classDescriptionForClass. |
|
| 175 | */ |
|
| 176 | public EOClassDescription classDescription() |
|
| 177 | { |
|
| 178 | 0 | if ( classDescription == null ) |
| 179 | { |
|
| 180 | 0 | classDescription = EOClassDescription.classDescriptionForClass( getClass() ); |
| 181 | 0 | if ( classDescription == null ) |
| 182 | { |
|
| 183 | 0 | throw new WotonomyException( |
| 184 | 0 | "No class description found for class: " + getClass() ); |
| 185 | } |
|
| 186 | } |
|
| 187 | 0 | return classDescription; |
| 188 | } |
|
| 189 | ||
| 190 | /** |
|
| 191 | * Returns a class description for the object at the |
|
| 192 | * other end of the specified relationship key. |
|
| 193 | * This implementation calls to the classDescription. |
|
| 194 | */ |
|
| 195 | public EOClassDescription classDescriptionForDestinationKey(String aKey) |
|
| 196 | { |
|
| 197 | 0 | return classDescription().classDescriptionForDestinationKey( aKey ); |
| 198 | } |
|
| 199 | ||
| 200 | /** |
|
| 201 | * Clears all property values for this object. |
|
| 202 | * This method is called to clean-up an object that |
|
| 203 | * will no longer be used, and implementations should |
|
| 204 | * ensure that all references are set to null to |
|
| 205 | * prevent problems with garbage-collection. |
|
| 206 | */ |
|
| 207 | public void clearProperties() |
|
| 208 | { |
|
| 209 | //FIXME: clear properties here |
|
| 210 | 0 | } |
| 211 | ||
| 212 | /** |
|
| 213 | * Returns the delete rule constant defined on EOClassDescription |
|
| 214 | * for the relationship defined by the specified key. |
|
| 215 | * This implementation calls to the classDescription. |
|
| 216 | */ |
|
| 217 | public int deleteRuleForRelationshipKey(String aRelationshipKey) |
|
| 218 | { |
|
| 219 | 0 | return classDescription().deleteRuleForRelationshipKey( aRelationshipKey ); |
| 220 | } |
|
| 221 | ||
| 222 | /** |
|
| 223 | * Returns the editing context in which this object is registered. |
|
| 224 | */ |
|
| 225 | public EOEditingContext editingContext() |
|
| 226 | { |
|
| 227 | 0 | return editingContext; |
| 228 | } |
|
| 229 | ||
| 230 | /** |
|
| 231 | * Returns the name of the entity that this object represents. |
|
| 232 | */ |
|
| 233 | public String entityName() |
|
| 234 | { |
|
| 235 | 0 | return classDescription().entityName(); |
| 236 | } |
|
| 237 | ||
| 238 | /** |
|
| 239 | * Returns a String containing all property keys and values for |
|
| 240 | * this object. Relationships should be represented by calling |
|
| 241 | * eoShallowDescription() on the object. |
|
| 242 | */ |
|
| 243 | public String eoDescription() |
|
| 244 | { |
|
| 245 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 246 | } |
|
| 247 | ||
| 248 | /** |
|
| 249 | * Returns a String containing all attribute keys and values for |
|
| 250 | * this object. Relationships are not included. |
|
| 251 | */ |
|
| 252 | public String eoShallowDescription() |
|
| 253 | { |
|
| 254 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 255 | } |
|
| 256 | ||
| 257 | /** |
|
| 258 | * Returns the key used to reference this object on the |
|
| 259 | * object at the other end of the specified relationship. |
|
| 260 | * This implementation calls to the class description. |
|
| 261 | */ |
|
| 262 | public String inverseForRelationshipKey(String aRelationshipKey) |
|
| 263 | { |
|
| 264 | 0 | return classDescription().inverseForRelationshipKey( aRelationshipKey ); |
| 265 | } |
|
| 266 | ||
| 267 | //Object invokeRemoteMethod( |
|
| 268 | // String aMethodName, Class[] aTypeArray Object[] anArgumentArray) |
|
| 269 | ||
| 270 | /** |
|
| 271 | * Returns whether the specified relationship key represents |
|
| 272 | * a to-many relationship. |
|
| 273 | */ |
|
| 274 | public boolean isToManyKey(String aKey) |
|
| 275 | { |
|
| 276 | 0 | return toManyRelationshipKeys().containsObject( aKey ); |
| 277 | } |
|
| 278 | ||
| 279 | /** |
|
| 280 | * Returns whether the objects at the other end of the specified |
|
| 281 | * relationship should be deleted when this object is deleted. |
|
| 282 | * This implementation calls to the class description. |
|
| 283 | */ |
|
| 284 | public boolean ownsDestinationObjectsForRelationshipKey(String aKey) |
|
| 285 | { |
|
| 286 | 0 | return classDescription().ownsDestinationObjectsForRelationshipKey( aKey ); |
| 287 | } |
|
| 288 | ||
| 289 | //void prepareValuesForClient() |
|
| 290 | ||
| 291 | /** |
|
| 292 | * Called to perform the delete propagation for this object |
|
| 293 | * on the specified editing context. All relationships |
|
| 294 | * should be processed according to their corresponding |
|
| 295 | * delete rule. |
|
| 296 | * This implementation calls to the class description. |
|
| 297 | */ |
|
| 298 | public void propagateDeleteWithEditingContext(EOEditingContext aContext) |
|
| 299 | { |
|
| 300 | 0 | classDescription().propagateDeleteForObject( this, aContext ); |
| 301 | 0 | } |
| 302 | ||
| 303 | /** |
|
| 304 | * Applies the changes from the specified snapshot to |
|
| 305 | * this object. |
|
| 306 | * @see #changesFromSnapshot(NSDictionary) |
|
| 307 | */ |
|
| 308 | public void reapplyChangesFromDictionary(NSDictionary aDeltaSnapshot) |
|
| 309 | { |
|
| 310 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 311 | } |
|
| 312 | ||
| 313 | /** |
|
| 314 | * Returns a snapshot of the current state of this object. |
|
| 315 | * All property keys are mapped to their values; nulls are |
|
| 316 | * represented by NSNull. |
|
| 317 | */ |
|
| 318 | public NSDictionary snapshot() |
|
| 319 | { |
|
| 320 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 321 | } |
|
| 322 | ||
| 323 | /** |
|
| 324 | * Returns a List of the to-many relationship keys |
|
| 325 | * for this object. |
|
| 326 | * This implementation calls to the class description. |
|
| 327 | */ |
|
| 328 | public NSArray toManyRelationshipKeys() |
|
| 329 | { |
|
| 330 | 0 | return classDescription().toManyRelationshipKeys(); |
| 331 | } |
|
| 332 | ||
| 333 | /** |
|
| 334 | * Returns a List of the to-one relationship keys |
|
| 335 | * for this object. |
|
| 336 | * This implementation calls to the class description. |
|
| 337 | */ |
|
| 338 | public NSArray toOneRelationshipKeys() |
|
| 339 | { |
|
| 340 | 0 | return classDescription().toOneRelationshipKeys(); |
| 341 | } |
|
| 342 | ||
| 343 | /** |
|
| 344 | * Applies the specified snapshot to this object, |
|
| 345 | * converting NSNulls to null and calling |
|
| 346 | * takeStoredValueForKey for each key in the Map. |
|
| 347 | */ |
|
| 348 | public void updateFromSnapshot(NSDictionary aSnapshot) |
|
| 349 | { |
|
| 350 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 351 | } |
|
| 352 | ||
| 353 | /** |
|
| 354 | * Returns a short, stateful string representation |
|
| 355 | * of this object. |
|
| 356 | * This implementation calls to the class description. |
|
| 357 | */ |
|
| 358 | public String userPresentableDescription() |
|
| 359 | { |
|
| 360 | 0 | return classDescription().userPresentableDescriptionForObject( this ); |
| 361 | } |
|
| 362 | ||
| 363 | /** |
|
| 364 | * This method should be called by each setter method |
|
| 365 | * on this object before changes are made to the |
|
| 366 | * object's internal state. This implementation calls |
|
| 367 | * EOObserverCenter.notifyObserversObjectWillChange( this ), |
|
| 368 | */ |
|
| 369 | public void willChange() |
|
| 370 | { |
|
| 371 | 0 | EOObserverCenter.notifyObserversObjectWillChange( this ); |
| 372 | 0 | } |
| 373 | ||
| 374 | // interface EOKeyValueCoding |
|
| 375 | ||
| 376 | /** |
|
| 377 | * Returns the value for the specified property. |
|
| 378 | * If the property does not exist, this method should |
|
| 379 | * call handleQueryWithUnboundKey. |
|
| 380 | */ |
|
| 381 | public Object valueForKey( String aKey ) |
|
| 382 | { |
|
| 383 | 0 | return EOKeyValueCodingSupport.valueForKey( this, aKey ); |
| 384 | } |
|
| 385 | ||
| 386 | /** |
|
| 387 | * Sets the property to the specified value. |
|
| 388 | * If the property does not exist, this method should |
|
| 389 | * call handleTakeValueForUnboundKey. |
|
| 390 | * If the property is of a type that cannot allow |
|
| 391 | * null (e.g. primitive types) and aValue is null, |
|
| 392 | * this method should call unableToSetNullForKey. |
|
| 393 | */ |
|
| 394 | public void takeValueForKey( Object aValue, String aKey ) |
|
| 395 | { |
|
| 396 | 0 | EOKeyValueCodingSupport.takeValueForKey( this, aValue, aKey ); |
| 397 | 0 | } |
| 398 | ||
| 399 | /** |
|
| 400 | * Returns the value for the private field that |
|
| 401 | * corresponds to the specified property. |
|
| 402 | */ |
|
| 403 | public Object storedValueForKey( String aKey ) |
|
| 404 | { |
|
| 405 | 0 | return EOKeyValueCodingSupport.storedValueForKey( this, aKey ); |
| 406 | } |
|
| 407 | ||
| 408 | /** |
|
| 409 | * Sets the the private field that corresponds to the |
|
| 410 | * specified property to the specified value. |
|
| 411 | */ |
|
| 412 | public void takeStoredValueForKey( Object aValue, String aKey ) |
|
| 413 | { |
|
| 414 | 0 | EOKeyValueCodingSupport.takeStoredValueForKey( this, aValue, aKey ); |
| 415 | 0 | } |
| 416 | ||
| 417 | /** |
|
| 418 | * Called by valueForKey when the specified key is |
|
| 419 | * not found on this object. Implementing classes |
|
| 420 | * should handle the specified value or otherwise |
|
| 421 | * throw an exception. |
|
| 422 | */ |
|
| 423 | public Object handleQueryWithUnboundKey( String aKey ) |
|
| 424 | { |
|
| 425 | 0 | return EOKeyValueCodingSupport.handleQueryWithUnboundKey( this, aKey ); |
| 426 | } |
|
| 427 | ||
| 428 | /** |
|
| 429 | * Called by takeValueForKey when the specified key |
|
| 430 | * is not found on this object. Implementing classes |
|
| 431 | * should handle the specified value or otherwise |
|
| 432 | * throw an exception. |
|
| 433 | */ |
|
| 434 | public void handleTakeValueForUnboundKey( Object aValue, String aKey ) |
|
| 435 | { |
|
| 436 | 0 | EOKeyValueCodingSupport.handleTakeValueForUnboundKey( this, aValue, aKey ); |
| 437 | 0 | } |
| 438 | ||
| 439 | /** |
|
| 440 | * Called by takeValueForKey when the type of the |
|
| 441 | * specified key is not allowed to be null, as is |
|
| 442 | * the case with primitive types. Implementing |
|
| 443 | * classes should handle this case appropriately |
|
| 444 | * or otherwise throw an exception. |
|
| 445 | */ |
|
| 446 | public void unableToSetNullForKey( String aKey ) |
|
| 447 | { |
|
| 448 | 0 | EOKeyValueCodingSupport.unableToSetNullForKey( this, aKey ); |
| 449 | 0 | } |
| 450 | ||
| 451 | // interface EOKeyValueCodingAdditions |
|
| 452 | ||
| 453 | /** |
|
| 454 | * Returns the value for the specified key path, which is |
|
| 455 | * a series of keys delimited by ".", for example: |
|
| 456 | * "createTime.year.length". |
|
| 457 | */ |
|
| 458 | public Object valueForKeyPath( String aKeyPath ) |
|
| 459 | { |
|
| 460 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 461 | } |
|
| 462 | ||
| 463 | /** |
|
| 464 | * Sets the value for the specified key path, which is |
|
| 465 | * a series of keys delimited by ".", for example: |
|
| 466 | * "createTime.year.length". |
|
| 467 | * The value is set for the last object referenced by |
|
| 468 | * the key path. |
|
| 469 | */ |
|
| 470 | public void takeValueForKeyPath( Object aValue, String aKeyPath ) |
|
| 471 | { |
|
| 472 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 473 | } |
|
| 474 | ||
| 475 | /** |
|
| 476 | * Returns a Map of the specified keys to their values, |
|
| 477 | * each of which might be obtained by calling valueForKey. |
|
| 478 | */ |
|
| 479 | public NSDictionary valuesForKeys( List aKeyList ) |
|
| 480 | { |
|
| 481 | 0 | return KeyValueCodingUtilities.valuesForKeys( this, aKeyList ); |
| 482 | } |
|
| 483 | ||
| 484 | /** |
|
| 485 | * Takes the keys from the specified map as properties |
|
| 486 | * and applies the corresponding values, each of which |
|
| 487 | * might be set by calling takeValueForKey. |
|
| 488 | */ |
|
| 489 | public void takeValuesFromDictionary( Map aMap ) |
|
| 490 | { |
|
| 491 | 0 | KeyValueCodingUtilities.takeValuesFromDictionary( this, aMap ); |
| 492 | 0 | } |
| 493 | ||
| 494 | // interface EOFaulting |
|
| 495 | ||
| 496 | /** |
|
| 497 | * Called by EOFaultHandler to prepare the object to be turned into a fault. |
|
| 498 | */ |
|
| 499 | public void clearFault() |
|
| 500 | { |
|
| 501 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 502 | } |
|
| 503 | ||
| 504 | /** |
|
| 505 | * Returns this object's EOFaultHandler. |
|
| 506 | */ |
|
| 507 | public EOFaultHandler faultHandler() |
|
| 508 | { |
|
| 509 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 510 | } |
|
| 511 | ||
| 512 | /** |
|
| 513 | * Returns whether this object is currently a fault. |
|
| 514 | * Returns true if this object has not yet retrieved any values. |
|
| 515 | */ |
|
| 516 | public boolean isFault() |
|
| 517 | { |
|
| 518 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 519 | } |
|
| 520 | ||
| 521 | /** |
|
| 522 | * Turns this object into a fault using the specified fault handler. |
|
| 523 | */ |
|
| 524 | public void turnIntoFault( EOFaultHandler aFaultHandler ) |
|
| 525 | { |
|
| 526 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 527 | } |
|
| 528 | ||
| 529 | /** |
|
| 530 | * Called to completely fire the fault, reading all attributes. |
|
| 531 | * This method may be implemented to call willRead(null). |
|
| 532 | */ |
|
| 533 | public void willRead() |
|
| 534 | { |
|
| 535 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 536 | } |
|
| 537 | ||
| 538 | /** |
|
| 539 | * Called to fire the fault for the specified key. |
|
| 540 | * The fault manager is required to populate the specified key |
|
| 541 | * with a value, and may populate any or all of the other values |
|
| 542 | * on this object. A null key will populate all values on the object. |
|
| 543 | * NOTE: This method is not part of the specification. |
|
| 544 | */ |
|
| 545 | public void willRead( String aKey ) |
|
| 546 | { |
|
| 547 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 548 | } |
|
| 549 | ||
| 550 | // interface EODeferredFaulting |
|
| 551 | ||
| 552 | /** |
|
| 553 | * Returns a fault for the specified deferred fault. |
|
| 554 | */ |
|
| 555 | public Object willReadRelationship( Object anObject ) |
|
| 556 | { |
|
| 557 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 558 | } |
|
| 559 | ||
| 560 | // interface EORelationshipManipulation |
|
| 561 | ||
| 562 | /** |
|
| 563 | * Adds the specified object to the relationship on this |
|
| 564 | * object specified by the key. For to-one relationships, |
|
| 565 | * this operation is the same as valueForKey. |
|
| 566 | */ |
|
| 567 | public void addObjectToPropertyWithKey( |
|
| 568 | Object anObject, String aKey ) |
|
| 569 | { |
|
| 570 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 571 | } |
|
| 572 | ||
| 573 | /** |
|
| 574 | * Removes the specified object from the relationship on |
|
| 575 | * this object specified by the key. For to-one relationships, |
|
| 576 | * this operation is the same as takeValueForKey with a null |
|
| 577 | * value. |
|
| 578 | */ |
|
| 579 | public void removeObjectFromPropertyWithKey( |
|
| 580 | Object anObject, String aKey ) |
|
| 581 | { |
|
| 582 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 583 | } |
|
| 584 | ||
| 585 | /** |
|
| 586 | * As addObjectToProperty with key, but also performs the |
|
| 587 | * reciprocal operation on the other side of the relationship. |
|
| 588 | */ |
|
| 589 | public void addObjectToBothSidesOfRelationshipWithKey( |
|
| 590 | EORelationshipManipulation anObject, String aKey ) |
|
| 591 | { |
|
| 592 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 593 | } |
|
| 594 | ||
| 595 | /** |
|
| 596 | * As removeObjectFromPropertyWithKey with key, but also performs the |
|
| 597 | * reciprocal operation on the other side of the relationship. |
|
| 598 | */ |
|
| 599 | public void removeObjectFromBothSidesOfRelationshipWithKey( |
|
| 600 | EORelationshipManipulation anObject, String aKey ) |
|
| 601 | { |
|
| 602 | 0 | throw new WotonomyException( "Not implemented yet." ); |
| 603 | } |
|
| 604 | ||
| 605 | // interface EOValidation |
|
| 606 | ||
| 607 | /** |
|
| 608 | * Validates this object for delete. |
|
| 609 | * Throws an exception if this object cannot be deleted. |
|
| 610 | * This implementation calls to the class description. |
|
| 611 | */ |
|
| 612 | public void validateForDelete() |
|
| 613 | { |
|
| 614 | 0 | classDescription().validateObjectForDelete( this ); |
| 615 | 0 | } |
| 616 | ||
| 617 | /** |
|
| 618 | * Validates this object for insertion into the external store. |
|
| 619 | * Throws an exception if this object cannot be inserted. |
|
| 620 | * Validations here should be specific to insertion. |
|
| 621 | * This implementation calls validateForSave(). |
|
| 622 | */ |
|
| 623 | public void validateForInsert() |
|
| 624 | { |
|
| 625 | 0 | validateForSave(); |
| 626 | 0 | } |
| 627 | ||
| 628 | /** |
|
| 629 | * Validates this object for a commit to the external store. |
|
| 630 | * Throws an exception if this object cannot be committed. |
|
| 631 | * Validations here are not specific to either inserts or updates. |
|
| 632 | * This implementation calls to the class description. |
|
| 633 | */ |
|
| 634 | public void validateForSave() |
|
| 635 | { |
|
| 636 | 0 | classDescription().validateObjectForSave( this ); |
| 637 | 0 | } |
| 638 | ||
| 639 | /** |
|
| 640 | * Validates this object for update to the external store. |
|
| 641 | * Throws an exception if this object cannot be updated. |
|
| 642 | * Validations here should be specific to updates. |
|
| 643 | * This implementation calls validateForSave(). |
|
| 644 | */ |
|
| 645 | public void validateForUpdate() |
|
| 646 | { |
|
| 647 | 0 | validateForSave(); |
| 648 | 0 | } |
| 649 | } |
|
| 650 | ||
| 651 | /* |
|
| 652 | * $Log$ |
|
| 653 | * Revision 1.2 2006/02/16 16:47:14 cgruber |
|
| 654 | * Move some classes in to "internal" packages and re-work imports, etc. |
|
| 655 | * |
|
| 656 | * Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions. |
|
| 657 | * |
|
| 658 | * Revision 1.1 2006/02/16 13:19:57 cgruber |
|
| 659 | * Check in all sources in eclipse-friendly maven-enabled packages. |
|
| 660 | * |
|
| 661 | * Revision 1.3 2001/12/06 16:42:29 mpowers |
|
| 662 | * Added appropriate constructor. |
|
| 663 | * |
|
| 664 | * Revision 1.2 2001/11/24 17:37:29 mpowers |
|
| 665 | * Implemented static methods. |
|
| 666 | * |
|
| 667 | * Revision 1.1 2001/11/17 17:18:15 mpowers |
|
| 668 | * Initial implementation of EOCustomObject. |
|
| 669 | * |
|
| 670 | * |
|
| 671 | */ |
|
| 672 | ||
| 673 |