libs-gdl2/EOControl/EOEditingContext.h
Manuel Guesdon 409de8d589 * EOAccess/EOAdaptor.m:
o optimization in 'for' loops
* EOAccess/EODatabase.m:
  o include <EOCOntrol/EOPriv.h>
  o replaced isNilOrEONull() by _isNilOrEONull()
* EOAccess/EODatabaseContext.h:
  o added _snapshotForGlobalIDIMP
* EOAccess/EODatabaseContext.m:
  o commented  NSEmitTODO in
  -objectsForSourceGlobalID:relationshipName:editingContext:
  o added beter exception format in
  qualifierForLockingAttributes:primaryKeyAttributes:entity:snapshot:
  o fix compiler warning in -relayPrimaryKey:object:entity:
  o logs
  o optimizations in -objectsWithFetchSpecification:editingContext:
  o replaced isNilOrEONull() by _isNilOrEONull()
  o replace [EOFault isFault:] by _isFault()
  o use _snapshotForGlobalIDIMP
  o IMP usage optimization
* EOAccess/EOAttribute.[hm]:
  o added EOAdaptorUnknownType
  o added _adaptorValueType and avoid recomputing it each time
  o added _valueTypeChar to avoid string comparaisons
  o use EOPriv classes declarations
  o Temporary reverted David changes in
  -adaptorValueByConvertingAttributeValue
* EOAccess/EOAttributePriv.h:
  o added _valueTypeChar to avoid string comparaisons
* EOAccess/EOEntityPriv.h:
  o moved -attributeForPath: and -relationshipForPath: to
  EOEntityGDL2Additions category
* EOAccess/EOEntity.h:
  o moved private -attributeForPath: and -relationshipForPath: to
  EOEntityGDL2Additions category
* EOAccess/EOEntity.m:
  o better exception in classProperties
  o fix compiler warning in -setClassProperties:,
  -setPrimaryKeyAttributes:,
	-setAttributesUsedForLocking:
	o moved -attributeForPath: and -relationshipForPath: to
  EOEntityGDL2Additions category
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
* EOAccess/EOSQLExpression.m:
  o optimization in -tableListWithRootEntity:
  o optimization in -formatSQLString:format:
  o optimization in +sqlPatternFromShellPattern:
  o optimization in +sqlPatternFromShellPattern:withEscapeCharacter:
  o fix in -sqlStringForKeyValueQualifier:
  o added log in -sqlStringForKeyValueQualifier: for not handled
  readFormat
  o added log -addInsertListAttribute:value: for not handled
  writeFormat
  o added log -addUpdateListAttribute:value: for not handled
  writeFormat
  o changed  EOFLOGObjectFnStart to EOFLOGObjectFnStartCond
  o changed  EOFLOGObjectFnStop to EOFLOGObjectFnStopCond
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
* EOAccess/EOSQLQualifier.m:
  o implemented EOKeyComparisonQualifier
  -schemaBasedQualifierWithRootEntity
* EOAccess/EOUtilities.m:
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
* EOControl/EOPriv.[hm]:
  o added. Contains various classes/selectors/IMPs
* EOControl/EOClassDescription.m:
  o handle EONull case in -propagateDeleteForObject:editingContext:,
    -addObject:toPropertyWithKey:, -snapshot,
  -removeObject:fromPropertyWithKey:,
	_setObject:forBothSidesOfRelationshipWithKey:,
  addObject:toBothSidesOfRelationshipWithKey:,
	-removeObject:fromBothSidesOfRelationshipWithKey:
	o fix compiler warning in -dictionaryForInstanceProperties,
  -shallowCopy, -updateFromSnapshot:, -snapshot
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
  o replaced isNilOrEONull() by _isNilOrEONull()
  o fix in -validateForSave
  o rewritten -validateValue:forKey: selector build
* EOControl/EOEditingContext.h:
  o added -hasUnprocessedChanges
* EOControl/EOEditingContext.m:
  o added -hasUnprocessedChanges
  o added NS_DURING,... to catch exceptions
  o replace [EOFault isFault:] by _isFault()
  o IMP usage optimization
* EOControl/EOKeyGlobalID.m:
  o replaced isNilOrEONull() by _isNilOrEONull()
  o include <EOCOntrol/EOPriv.h>
* EOControl/EOGenericRecord.m:
  o partially rewritten -description
  o include <EOCOntrol/EOPriv.h>
  o replaced isNilOrEONull() by _isNilOrEONull()
  o replace [EOFault isFault:] by _isFault()
  o changed variable name type of
  _infoForInstanceVariableNamed:retType:retSize:retOffset:
  o rewritten valueForKey:,... to use cString NSKeyValueCoding
* EOControl/EOKeyValueCoding.m:
  o changed NSAssert in NSArray -valueForKey:
  o optimization in NSDictionary -takeValue:forKeyPath:isSmart:
  o optimization in NSDictionary -takeStoredValue:forKeyPath:
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
  o include <EOCOntrol/EOPriv.h>
* EOControl/EOKeyValueQualifier.m:
  o fixes for EONull/nil in -evaluateWithObject:
  o replaced [EONull null] by GDL2EONull
  o include <EOCOntrol/EOPriv.h>
* EOControl/EOSortOrdering.m:
  o include <EOCOntrol/EOPriv.h>
  o replaced [EONull null] by GDL2EONull
* EOAdaptors/Postgres95SQLExpression.m:
  o float formatting in +formatValue:forAttribute:
  o added -externalNameQuoteCharacter
  o added +sqlPatternFromShellPattern:
  o added +sqlPatternFromShellPattern:withEscapeCharacter:
  o replaced isNilOrEONull() by _isNilOrEONull()
* EOAdaptors/Postgres95Channel.m:
  o logs
* EOAdaptors/Postgres95Values.m:
  o logs
  o fix in +setPostgres95Format:
  o fix calendard format to handle timezone (%z)
  o optimizations
* EOControl/EOMutableKnownKeyDictionary.m
  o removed EOMKKDArrayMapping
  +dictionaryFromDictionary:subsetMapping:
  o include <EOCOntrol/EOPriv.h>
  o replaced isNilOrEONull() by _isNilOrEONull()
* EOControl/EONSAddOns.[hm]:
  o added NSString(ShellPattern)


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@20687 72102866-910b-0410-8b05-ffd578937521
2005-02-11 17:31:29 +00:00

386 lines
11 KiB
Objective-C

/* -*-objc-*-
EOEditingContext.h
Copyright (C) 2000-2002 Free Software Foundation, Inc.
Date: June 2000
This file is part of the GNUstep Database Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __EOEditingContext_h__
#define __EOEditingContext_h__
#ifdef GNUSTEP
#include <Foundation/NSHashTable.h>
#include <Foundation/NSMapTable.h>
#include <Foundation/NSLock.h>
#else
#include <Foundation/Foundation.h>
#endif
#include <EOControl/EOObjectStore.h>
#include <EOControl/EOObserver.h>
#include <EOControl/EODefines.h>
@class NSArray;
@class NSMutableArray;
@class NSDictionary;
@class NSMutableDictionary;
@class NSAutoreleasePool;
@class NSUndoManager;
@interface EOEditingContext : EOObjectStore <EOObserving>
{
EOObjectStore *_objectStore;
NSUndoManager *_undoManager;
NSHashTable *_unprocessedChanges;
NSHashTable *_unprocessedDeletes;
NSHashTable *_unprocessedInserts;
NSHashTable *_insertedObjects;
NSHashTable *_deletedObjects;
NSHashTable *_changedObjects;
NSMapTable *_globalIDsByObject;
NSMapTable *_objectsByGID;
NSMutableDictionary *_snapshotsByGID;
NSMutableDictionary *_eventSnapshotsByGID;
id _delegate;
NSMutableArray *_editors;
id _messageHandler;
unsigned short _undoTransactionID;
struct {
unsigned registeredForCallback:1;
unsigned propagatesDeletesAtEndOfEvent:1;
unsigned ignoreChangeNotification:1;
unsigned exhaustiveValidation:1; /* unsigned stopsValidation:1; */
unsigned autoLocking:1;
unsigned processingChanges:1; /* unsigned savingChanges:1; */
unsigned skipInvalidateOnDealloc:1;
unsigned useCommittedSnapshot:1;
unsigned registeredUndoTransactionID:1;
unsigned retainsAllRegisteredObjects:1;
unsigned lockUsingParent:1;
unsigned ignoreSharedContextNotifications:1;
unsigned isSharedContextLocked:1;
unsigned unused:3;
} _flags;
struct {
unsigned willRunLoginPanel:1;
unsigned shouldFetchObjects:1;
unsigned shouldInvalidateObject:1;
unsigned shouldMergeChanges:1;
unsigned shouldPresentException:1;
unsigned shouldUndoUserActions:1;
unsigned shouldValidateChanges:1;
unsigned willSaveChanges:1;
} _delegateRespondsTo;
NSRecursiveLock*_lock;
id _sharedContext;
int _lockCount;
id _notificationQueue;
NSAutoreleasePool * _lockPool;
NSTimeInterval fetchTimestamp;
}
+ (void)setDefaultFetchTimestampLag: (NSTimeInterval)lag;
+ (NSTimeInterval)defaultFetchTimestampLag;
+ (void)setInstancesRetainRegisteredObjects: (BOOL)flag;
+ (BOOL)instancesRetainRegisteredObjects;
- (id)initWithParentObjectStore: (EOObjectStore *)parentObjectStore;
- (NSArray *)objectsWithFetchSpecification: (EOFetchSpecification *)fetchSpecification;
- (void)insertObject: (id)object;
- (void)insertObject: (id)object
withGlobalID: (EOGlobalID *)gid;
-(void)setLevelsOfUndo: (int)levels;
- (void)deleteObject: (id)object;
- (void)lockObject: (id)object;
- (BOOL)hasChanges;
- (void)saveChanges;
- (void)revert;
- (id)objectForGlobalID: (EOGlobalID *)globalID;
- (EOGlobalID *)globalIDForObject: (id)object;
- (void)setDelegate: (id)delegate;
- (id)delegate;
- (EOObjectStore *)parentObjectStore;
- (EOObjectStore *)rootObjectStore;
- (void)setUndoManager: (NSUndoManager *)undoManager;
- (NSUndoManager *)undoManager;
- (void)objectWillChange: (id)object;
- (void)recordObject: (id)object
globalID: (EOGlobalID *)globalID;
- (void)forgetObject: (id)object;
- (void)registerUndoForModifiedObject: (id)object;
- (NSArray *)registeredObjects;
- (NSArray *)updatedObjects;
- (NSArray *)insertedObjects;
- (NSArray *)deletedObjects;
- (void)propagatesDeletesUsingTable: (NSHashTable *)deleteTable;
- (void)validateDeletesUsingTable: (NSHashTable *)deleteTable;
- (BOOL)validateTable: (NSHashTable *)table
withSelector: (SEL)sel
exceptionArray: (NSMutableArray**)exceptionArray
continueAfterFailure: (BOOL)continueAfterFailure;
- (void)processRecentChanges;
- (BOOL)propagatesDeletesAtEndOfEvent;
- (void)setPropagatesDeletesAtEndOfEvent: (BOOL)propagatesDeletesAtEndOfEvent;
- (BOOL)stopsValidationAfterFirstError;
- (void)setStopsValidationAfterFirstError: (BOOL)yn;
- (BOOL)locksObjectsBeforeFirstModification;
- (void)setLocksObjectsBeforeFirstModification: (BOOL)yn;
/** Returns a dictionary containing a snapshot of object
that reflects its committed values (last values putted in
the database; i.e. values before changes were made on the
object).
It is updated after commiting new values.
**/
- (NSDictionary *)committedSnapshotForObject: (id)object;
/** Returns a dictionary containing a snapshot of object
with its state as it was at the beginning of the current
event loop.
After the end of the current event, upon invocation of
processRecentChanges, the snapshot is updated to hold the
modified state of the object.**/
- (NSDictionary *)currentEventSnapshotForObject: (id)object;
- (NSDictionary *)uncommittedChangesForObject: (id)object;
- (void)refaultObjects;
- (void)setInvalidatesObjectsWhenFreed: (BOOL)yn;
- (BOOL)invalidatesObjectsWhenFreed;
- (void)addEditor: (id)editor;
- (void)removeEditor: (id)editor;
- (NSArray *)editors;
- (void)setMessageHandler: (id)handler;
- (id)messageHandler;
- (id)faultForGlobalID: (EOGlobalID *)globalID
editingContext: (EOEditingContext *)context;
- (id)faultForRawRow: (NSDictionary *)row
entityNamed: (NSString *)entityName
editingContext: (EOEditingContext *)context;
- (id)faultForRawRow: (NSDictionary *)row
entityNamed: (NSString *)entityName;
- (NSArray *)arrayFaultWithSourceGlobalID: (EOGlobalID *)globalID
relationshipName: (NSString *)name
editingContext: (EOEditingContext *)context;
- (void)initializeObject: (id)object
withGlobalID: (EOGlobalID *)globalID
editingContext: (EOEditingContext *)context;
- (NSArray *)objectsForSourceGlobalID: (EOGlobalID *)globalID
relationshipName: (NSString *)name
editingContext: (EOEditingContext *)context;
- (void)refaultObject: (id)object
withGlobalID: (EOGlobalID *)globalID
editingContext: (EOEditingContext *)context;
- (void)saveChangesInEditingContext: (EOEditingContext *)context;
- (NSArray *)objectsWithFetchSpecification: (EOFetchSpecification *)fetchSpecification
editingContext: (EOEditingContext *)context;
- (void)lockObjectWithGlobalID: (EOGlobalID *)gid
editingContext: (EOEditingContext *)context;
- (BOOL)isObjectLockedWithGlobalID: (EOGlobalID *)gid
editingContext: (EOEditingContext *)context;
- (void)clearOriginalSnapshotForObject: (id)object;
@end
/* To be used with NSRunLoop's performSelector:target:argument:order:modes: */
enum {
EOEditingContextFlushChangesRunLoopOrdering = 300000
};
GDL2CONTROL_EXPORT NSString *EOObjectsChangedInEditingContextNotification;
GDL2CONTROL_EXPORT NSString *EOEditingContextDidSaveChangesNotification;
@interface NSObject (EOEditingContext)
- (EOEditingContext *)editingContext;
@end
/*
* Methods implemented by the delegate.
*/
@interface NSObject (EOEditingContextDelegation)
- (BOOL)editingContext: (EOEditingContext *)editingContext
shouldPresentException: (NSException *)exception;
- (BOOL)editingContextShouldValidateChanges: (EOEditingContext *)editingContext;
- (void)editingContextWillSaveChanges: (EOEditingContext *)editingContext;
- (BOOL)editingContext: (EOEditingContext *)editingContext
shouldInvalidateObject: (id)object
globalID: (EOGlobalID *)gid;
- (BOOL)editingContextShouldUndoUserActionsAfterFailure: (EOEditingContext *)context;
- (NSArray *)editingContext: (EOEditingContext *)editingContext
shouldFetchObjectsDescribedByFetchSpecification: (EOFetchSpecification *)fetchSpecification;
- (BOOL)editingContext: (EOEditingContext *)editingContext
shouldMergeChangesForObject: (id)object;
- (void)editingContextDidMergeChanges: (EOEditingContext *)editingContext;
@end
/*
* Informal protocol for EOEditors.
*/
@interface NSObject (EOEditors)
- (BOOL)editorHasChangesForEditingContext: (EOEditingContext *)editingContext;
- (void)editingContextWillSaveChanges: (EOEditingContext *)editingContext;
@end
/*
* Informal protocol for EOMessageHandlers.
*/
@interface NSObject (EOMessageHandlers)
- (void)editingContext: (EOEditingContext *)editingContext
presentErrorMessage: (NSString *)message;
- (BOOL)editingContext: (EOEditingContext *)editingContext
shouldContinueFetchingWithCurrentObjectCount: (unsigned)count
originalLimit: (unsigned)limit
objectStore: (EOObjectStore *)objectStore;
@end
@interface EOEditingContext (EORendezvous)
+ (void)setSubstitutionEditingContext: (EOEditingContext *)ec;
+ (EOEditingContext *)substitutionEditingContext;
+ (void)setDefaultParentObjectStore: (EOObjectStore *)store;
+ (EOObjectStore *)defaultParentObjectStore;
@end
@interface EOEditingContext (EOStateArchiving)
+ (void)setUsesContextRelativeEncoding: (BOOL)yn;
+ (BOOL)usesContextRelativeEncoding;
+ (void)encodeObject: (id)object withCoder: (NSCoder *)coder;
+ (id)initObject: (id)object withCoder: (NSCoder *)coder;
@end
@interface EOEditingContext (EOTargetAction)
- (void)saveChanges: (id)sender;
- (void)refault: (id)sender;
- (void)revert: (id)sender;
- (void)refetch: (id)sender;
- (void)undo: (id)sender;
- (void)redo: (id)sender;
/*
* Private
*/
-(NSString *)objectsDescription;
-(NSString *)unprocessedDescription;
@end
@interface EOEditingContext (EOMultiThreaded) <NSLocking>
+ (void)setEOFMultiThreadedEnabled: (BOOL)flag;
- (void)lock;
- (void)unlock;
- (BOOL)tryLock;
@end
/*
* Information
*/
@interface EOEditingContext (EOEditingContextInfo)
- (NSDictionary*)unprocessedObjects;
- (NSDictionary *)unprocessedInfo;
- (NSDictionary *)pendingInfo;
/** Returns YES if there unprocessed changes or deletes or inserts **/
- (BOOL)hasUnprocessedChanges;
@end
// Private
GDL2CONTROL_EXPORT id EOEditingContext_objectForGlobalIDWithImpPtr(EOEditingContext* edContext,IMP* impPtr,EOGlobalID* gid);
EOGlobalID* EOEditingContext_globalIDForObjectWithImpPtr(EOEditingContext* edContext,IMP* impPtr,id object);
GDL2CONTROL_EXPORT id EOEditingContext_recordObjectGlobalIDWithImpPtr(EOEditingContext* edContext,IMP* impPtr,id object,EOGlobalID* gid);
#endif