using CPF.Mac.Foundation; using CPF.Mac.ObjCRuntime; using System; using System.ComponentModel; using System.Runtime.InteropServices; namespace CPF.Mac.CoreData { [Register("NSMigrationManager", true)] public class NSMigrationManager : NSObject { private static readonly IntPtr selMappingModelHandle = Selector.GetHandle("mappingModel"); private static readonly IntPtr selSourceModelHandle = Selector.GetHandle("sourceModel"); private static readonly IntPtr selDestinationModelHandle = Selector.GetHandle("destinationModel"); private static readonly IntPtr selSourceContextHandle = Selector.GetHandle("sourceContext"); private static readonly IntPtr selDestinationContextHandle = Selector.GetHandle("destinationContext"); private static readonly IntPtr selCurrentEntityMappingHandle = Selector.GetHandle("currentEntityMapping"); private static readonly IntPtr selMigrationProgressHandle = Selector.GetHandle("migrationProgress"); private static readonly IntPtr selUserInfoHandle = Selector.GetHandle("userInfo"); private static readonly IntPtr selSetUserInfo_Handle = Selector.GetHandle("setUserInfo:"); private static readonly IntPtr selUsesStoreSpecificMigrationManagerHandle = Selector.GetHandle("usesStoreSpecificMigrationManager"); private static readonly IntPtr selSetUsesStoreSpecificMigrationManager_Handle = Selector.GetHandle("setUsesStoreSpecificMigrationManager:"); private static readonly IntPtr selInitWithSourceModelDestinationModel_Handle = Selector.GetHandle("initWithSourceModel:destinationModel:"); private static readonly IntPtr selMigrateStoreFromURLTypeOptionsWithMappingModelToDestinationURLDestinationTypeDestinationOptionsError_Handle = Selector.GetHandle("migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:"); private static readonly IntPtr selResetHandle = Selector.GetHandle("reset"); private static readonly IntPtr selSourceEntityForEntityMapping_Handle = Selector.GetHandle("sourceEntityForEntityMapping:"); private static readonly IntPtr selDestinationEntityForEntityMapping_Handle = Selector.GetHandle("destinationEntityForEntityMapping:"); private static readonly IntPtr selAssociateSourceInstanceWithDestinationInstanceForEntityMapping_Handle = Selector.GetHandle("associateSourceInstance:withDestinationInstance:forEntityMapping:"); private static readonly IntPtr selDestinationInstancesForEntityMappingNamedSourceInstances_Handle = Selector.GetHandle("destinationInstancesForEntityMappingNamed:sourceInstances:"); private static readonly IntPtr selSourceInstancesForEntityMappingNamedDestinationInstances_Handle = Selector.GetHandle("sourceInstancesForEntityMappingNamed:destinationInstances:"); private static readonly IntPtr selCancelMigrationWithError_Handle = Selector.GetHandle("cancelMigrationWithError:"); private static readonly IntPtr class_ptr = Class.GetHandle("NSMigrationManager"); private object __mt_MappingModel_var; private object __mt_SourceModel_var; private object __mt_DestinationModel_var; private object __mt_SourceContext_var; private object __mt_DestinationContext_var; private object __mt_CurrentEntityMapping_var; private object __mt_UserInfo_var; public override IntPtr ClassHandle => class_ptr; public virtual NSMappingModel MappingModel { [Export("mappingModel")] get { return (NSMappingModel)(__mt_MappingModel_var = ((!IsDirectBinding) ? ((NSMappingModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selMappingModelHandle))) : ((NSMappingModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selMappingModelHandle))))); } } public virtual NSManagedObjectModel SourceModel { [Export("sourceModel")] get { return (NSManagedObjectModel)(__mt_SourceModel_var = ((!IsDirectBinding) ? ((NSManagedObjectModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSourceModelHandle))) : ((NSManagedObjectModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selSourceModelHandle))))); } } public virtual NSManagedObjectModel DestinationModel { [Export("destinationModel")] get { return (NSManagedObjectModel)(__mt_DestinationModel_var = ((!IsDirectBinding) ? ((NSManagedObjectModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDestinationModelHandle))) : ((NSManagedObjectModel)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDestinationModelHandle))))); } } public virtual NSManagedObjectContext SourceContext { [Export("sourceContext")] get { return (NSManagedObjectContext)(__mt_SourceContext_var = ((!IsDirectBinding) ? ((NSManagedObjectContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSourceContextHandle))) : ((NSManagedObjectContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selSourceContextHandle))))); } } public virtual NSManagedObjectContext DestinationContext { [Export("destinationContext")] get { return (NSManagedObjectContext)(__mt_DestinationContext_var = ((!IsDirectBinding) ? ((NSManagedObjectContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDestinationContextHandle))) : ((NSManagedObjectContext)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDestinationContextHandle))))); } } public virtual NSEntityMapping CurrentEntityMapping { [Export("currentEntityMapping")] get { return (NSEntityMapping)(__mt_CurrentEntityMapping_var = ((!IsDirectBinding) ? ((NSEntityMapping)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selCurrentEntityMappingHandle))) : ((NSEntityMapping)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selCurrentEntityMappingHandle))))); } } public virtual float MigrationProgress { [Export("migrationProgress")] get { if (IsDirectBinding) { return Messaging.float_objc_msgSend(base.Handle, selMigrationProgressHandle); } return Messaging.float_objc_msgSendSuper(base.SuperHandle, selMigrationProgressHandle); } } public virtual NSDictionary UserInfo { [Export("userInfo")] get { return (NSDictionary)(__mt_UserInfo_var = ((!IsDirectBinding) ? ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selUserInfoHandle))) : ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selUserInfoHandle))))); } [Export("setUserInfo:")] set { if (value == null) { throw new ArgumentNullException("value"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetUserInfo_Handle, value.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetUserInfo_Handle, value.Handle); } __mt_UserInfo_var = value; } } [Since(5, 0)] public virtual bool UsesStoreSpecificMigrationManager { [Export("usesStoreSpecificMigrationManager")] get { if (IsDirectBinding) { return Messaging.bool_objc_msgSend(base.Handle, selUsesStoreSpecificMigrationManagerHandle); } return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selUsesStoreSpecificMigrationManagerHandle); } [Export("setUsesStoreSpecificMigrationManager:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_bool(base.Handle, selSetUsesStoreSpecificMigrationManager_Handle, value); } else { Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetUsesStoreSpecificMigrationManager_Handle, value); } } } [EditorBrowsable(EditorBrowsableState.Advanced)] [Export("init")] public NSMigrationManager() : base(NSObjectFlag.Empty) { if (IsDirectBinding) { base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init); } else { base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init); } } [EditorBrowsable(EditorBrowsableState.Advanced)] [Export("initWithCoder:")] public NSMigrationManager(NSCoder coder) : base(NSObjectFlag.Empty) { if (IsDirectBinding) { base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle); } else { base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle); } } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSMigrationManager(NSObjectFlag t) : base(t) { } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSMigrationManager(IntPtr handle) : base(handle) { } [Export("initWithSourceModel:destinationModel:")] public NSMigrationManager(NSManagedObjectModel sourceModel, NSManagedObjectModel destinationModel) : base(NSObjectFlag.Empty) { if (sourceModel == null) { throw new ArgumentNullException("sourceModel"); } if (destinationModel == null) { throw new ArgumentNullException("destinationModel"); } if (IsDirectBinding) { base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selInitWithSourceModelDestinationModel_Handle, sourceModel.Handle, destinationModel.Handle); } else { base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selInitWithSourceModelDestinationModel_Handle, sourceModel.Handle, destinationModel.Handle); } } [Export("migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:")] public virtual bool MigrateStoreFromUrl(NSUrl sourceURL, string sStoreType, NSDictionary sOptions, NSMappingModel mappings, NSUrl dURL, string dStoreType, NSDictionary dOptions, out NSError error) { if (sourceURL == null) { throw new ArgumentNullException("sourceURL"); } if (sStoreType == null) { throw new ArgumentNullException("sStoreType"); } if (sOptions == null) { throw new ArgumentNullException("sOptions"); } if (mappings == null) { throw new ArgumentNullException("mappings"); } if (dURL == null) { throw new ArgumentNullException("dURL"); } if (dStoreType == null) { throw new ArgumentNullException("dStoreType"); } if (dOptions == null) { throw new ArgumentNullException("dOptions"); } IntPtr intPtr = Marshal.AllocHGlobal(4); Marshal.WriteInt32(intPtr, 0); IntPtr intPtr2 = NSString.CreateNative(sStoreType); IntPtr intPtr3 = NSString.CreateNative(dStoreType); bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.SuperHandle, selMigrateStoreFromURLTypeOptionsWithMappingModelToDestinationURLDestinationTypeDestinationOptionsError_Handle, sourceURL.Handle, intPtr2, sOptions.Handle, mappings.Handle, dURL.Handle, intPtr3, dOptions.Handle, intPtr) : Messaging.bool_objc_msgSend_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr(base.Handle, selMigrateStoreFromURLTypeOptionsWithMappingModelToDestinationURLDestinationTypeDestinationOptionsError_Handle, sourceURL.Handle, intPtr2, sOptions.Handle, mappings.Handle, dURL.Handle, intPtr3, dOptions.Handle, intPtr); NSString.ReleaseNative(intPtr2); NSString.ReleaseNative(intPtr3); IntPtr intPtr4 = Marshal.ReadIntPtr(intPtr); error = ((intPtr4 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr4)) : null); Marshal.FreeHGlobal(intPtr); return result; } [Export("reset")] public virtual void Reset() { if (IsDirectBinding) { Messaging.void_objc_msgSend(base.Handle, selResetHandle); } else { Messaging.void_objc_msgSendSuper(base.SuperHandle, selResetHandle); } } [Export("sourceEntityForEntityMapping:")] public virtual NSEntityDescription SourceEntityForEntityMapping(NSEntityMapping mEntity) { if (mEntity == null) { throw new ArgumentNullException("mEntity"); } if (IsDirectBinding) { return (NSEntityDescription)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selSourceEntityForEntityMapping_Handle, mEntity.Handle)); } return (NSEntityDescription)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selSourceEntityForEntityMapping_Handle, mEntity.Handle)); } [Export("destinationEntityForEntityMapping:")] public virtual NSEntityDescription DestinationEntityForEntityMapping(NSEntityMapping mEntity) { if (mEntity == null) { throw new ArgumentNullException("mEntity"); } if (IsDirectBinding) { return (NSEntityDescription)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDestinationEntityForEntityMapping_Handle, mEntity.Handle)); } return (NSEntityDescription)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDestinationEntityForEntityMapping_Handle, mEntity.Handle)); } [Export("associateSourceInstance:withDestinationInstance:forEntityMapping:")] public virtual void AssociateSourceInstance(NSManagedObject sourceInstance, NSManagedObject destinationInstance, NSEntityMapping entityMapping) { if (sourceInstance == null) { throw new ArgumentNullException("sourceInstance"); } if (destinationInstance == null) { throw new ArgumentNullException("destinationInstance"); } if (entityMapping == null) { throw new ArgumentNullException("entityMapping"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr_IntPtr_IntPtr(base.Handle, selAssociateSourceInstanceWithDestinationInstanceForEntityMapping_Handle, sourceInstance.Handle, destinationInstance.Handle, entityMapping.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr_IntPtr_IntPtr(base.SuperHandle, selAssociateSourceInstanceWithDestinationInstanceForEntityMapping_Handle, sourceInstance.Handle, destinationInstance.Handle, entityMapping.Handle); } } [Export("destinationInstancesForEntityMappingNamed:sourceInstances:")] public virtual NSManagedObject[] DestinationInstancesForEntityMappingNamed(string mappingName, NSManagedObject[] sourceInstances) { if (mappingName == null) { throw new ArgumentNullException("mappingName"); } if (sourceInstances == null) { throw new ArgumentNullException("sourceInstances"); } IntPtr intPtr = NSString.CreateNative(mappingName); NSArray nSArray = NSArray.FromNSObjects(sourceInstances); NSManagedObject[] result = (!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDestinationInstancesForEntityMappingNamedSourceInstances_Handle, intPtr, nSArray.Handle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDestinationInstancesForEntityMappingNamedSourceInstances_Handle, intPtr, nSArray.Handle)); NSString.ReleaseNative(intPtr); nSArray.Dispose(); return result; } [Export("sourceInstancesForEntityMappingNamed:destinationInstances:")] public virtual NSManagedObject[] SourceInstancesForEntityMappingNamed(string mappingName, NSManagedObject[] destinationInstances) { if (mappingName == null) { throw new ArgumentNullException("mappingName"); } if (destinationInstances == null) { throw new ArgumentNullException("destinationInstances"); } IntPtr intPtr = NSString.CreateNative(mappingName); NSArray nSArray = NSArray.FromNSObjects(destinationInstances); NSManagedObject[] result = (!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selSourceInstancesForEntityMappingNamedDestinationInstances_Handle, intPtr, nSArray.Handle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selSourceInstancesForEntityMappingNamedDestinationInstances_Handle, intPtr, nSArray.Handle)); NSString.ReleaseNative(intPtr); nSArray.Dispose(); return result; } [Export("cancelMigrationWithError:")] public virtual void CancelMigrationWithError(NSError error) { if (error == null) { throw new ArgumentNullException("error"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selCancelMigrationWithError_Handle, error.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selCancelMigrationWithError_Handle, error.Handle); } } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (base.Handle == IntPtr.Zero) { __mt_MappingModel_var = null; __mt_SourceModel_var = null; __mt_DestinationModel_var = null; __mt_SourceContext_var = null; __mt_DestinationContext_var = null; __mt_CurrentEntityMapping_var = null; __mt_UserInfo_var = null; } } } }