Namespace: Lithnet.Ecma2Framework
The ProducerConsumerImportProvider class provides a base class for import providers that use a producer-consumer pattern.
This class provides a simple implementation of the producer-consumer pattern, and allows the developer to focus on the import logic, rather than the threading logic. Implementers implement the mandatory methods that enumerate the raw objects of type TObject, and provide the logic to convert these objects into CSEntryChange objects. The provider takes care of constructing the CSEntryChanges and passing them back to the sync engine.
public abstract class ProducerConsumerImportProvider<TObject> : IObjectImportProvider
TObject
The type of object that the provider will enumerate
Inheritance Object → ProducerConsumerImportProvider<TObject>
Implements IObjectImportProvider
Gets a value indicating whether the provider can import objects of the specified type
public abstract Task<bool> CanImportAsync(SchemaType type)
type
SchemaType
The type of object to be imported
Task<Boolean>
if the provider can import the object, otherwise
Initializes the object import provider. This method is called once at the start of an import operation
public Task InitializeAsync(ImportContext context)
context
ImportContext
The context of the operation
Task
A task that represents the asynchronous operation
public Task GetCSEntryChangesAsync(SchemaType type, ICSEntryChangeCollection collection, string watermark, CancellationToken cancellationToken)
type
SchemaType
collection
ICSEntryChangeCollection
watermark
String
cancellationToken
CancellationToken
public abstract Task<string> GetOutboundWatermark(SchemaType type, CancellationToken cancellationToken)
type
SchemaType
cancellationToken
CancellationToken
A method that is called when the CSEntryChange has been completed, but before it is returned to the sync engine. Override this method to inspect or modify the CSEntryChange before it is returned to the sync engine
protected Task OnFinalizeCsEntryChangeAsync(CSEntryChange csentry, CancellationToken cancellationToken)
csentry
CSEntryChange
The CSEntryChange object that has been created
cancellationToken
CancellationToken
A cancellation token
Task
A task that represents the asynchronous operation
A method that is called when the CSEntryChange has been created, but before any attribute changes have been added to it. Override this method to inspect or modify the CSEntryChange before any attributes have been added to it
protected Task OnPrepareCSEntryChangeAsync(CSEntryChange csentry, CancellationToken cancellationToken)
csentry
CSEntryChange
The CSEntryChange object that has been created
cancellationToken
CancellationToken
A cancellation token
Task
A task that represents the asynchronous operation
A method that is called when the object has been retrieved from the source, but before it is converted into a CSEntryChange object. Override this method to inspect or modify the object before it is converted into a CSEntryChange object
protected Task PrepareObjectForImportAsync(TObject item, CancellationToken cancellationToken)
item
TObject
The object that has been retrieved from the source
cancellationToken
CancellationToken
A cancellation token
Task
A task that represents the asynchronous operation
A method that is called when the provider is initialized, but before any objects are retrieved from the source. Override this method to perform any initialization logic
protected Task OnInitializeAsync()
Task
A task that represents the asynchronous operation
A method that is called when the provider is initialized, but before any objects are retrieved from the source. Override this method to perform any initialization logic required to start producing objects
protected Task OnStartProducerAsync()
Task
A task that represents the asynchronous operation
A method that is called when the provider has finished producing objects. Override this method to perform any cleanup logic required after all objects have been produced
protected Task OnCompleteProducerAsync()
Task
A task that represents the asynchronous operation
A method that is called when the provider has started consuming objects. Override this method to perform any initialization logic required to start consuming objects
protected Task OnStartConsumerAsync()
Task
A task that represents the asynchronous operation
A method that is called when the provider has finished consuming objects. Override this method to perform any cleanup logic required after all objects have been consumed and the provider is about to be terminated
protected Task OnCompleteConsumerAsync()
Task
A task that represents the asynchronous operation
Gets the list of AnchorAttributes for the specified object
protected abstract Task<List<AnchorAttribute>> GetAnchorAttributesAsync(TObject item)
item
TObject
The object to get the AnchorAttributes for
Task<List<AnchorAttribute>>
A list of AnchorAttributes
Creates an AttributeChange object for the specified attribute
protected abstract Task<AttributeChange> CreateAttributeChangeAsync(SchemaAttribute type, ObjectModificationType modificationType, TObject item, CancellationToken cancellationToken)
type
SchemaAttribute
The schema attribute to create the AttributeChange for
modificationType
ObjectModificationType
The modification type of the object
item
TObject
The object to create the AttributeChange from
cancellationToken
CancellationToken
A cancellation token
Task<AttributeChange>
An AttributeChange represnting the specified attribute, or null if there are no changes to the attribute provided
Gets the DN of the specified object. This will be used to populate the DN property of the CSEntryChange
protected abstract Task<string> GetDNAsync(TObject item)
item
TObject
The item to return the DN of
Task<String>
The DN that will be used in the CSEntryChange
Gets the objects to be imported.
protected abstract IAsyncEnumerable<TObject> GetObjectsAsync(string watermark, CancellationToken cancellationToken)
watermark
String
The watermark value provided by the management agent after its last successful import
cancellationToken
CancellationToken
A cancellation token
IAsyncEnumerable<TObject>
An enumerable of objects to be imported
Gets the modification type of the specified object. This will be used to determine the object modification type of the CSEntryChange
protected abstract Task<ObjectModificationType> GetObjectModificationTypeAsync(TObject item)
item
TObject
The object to get the modification type of
Task<ObjectModificationType>
The modification type of the object