private static CSEntryChangeResult PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config)
        {
            deltaCSEntry.ObjectModificationType = csentry.ObjectModificationType;

            IApiInterfaceObject primaryInterface = maType.ApiInterface;

            object instance = primaryInterface.CreateInstance(csentry);

            foreach (AttributeChange change in primaryInterface.ApplyChanges(csentry, type, ref instance))
            {
                deltaCSEntry.AttributeChanges.Add(change);
            }

            deltaCSEntry.DN = primaryInterface.GetDNValue(instance);

            List <AttributeChange> anchorChanges = new List <AttributeChange>();

            foreach (string anchorAttributeName in maType.AnchorAttributeNames)
            {
                object value = primaryInterface.GetAnchorValue(anchorAttributeName, instance);
                deltaCSEntry.AnchorAttributes.Add(AnchorAttribute.Create(anchorAttributeName, value));
                anchorChanges.Add(AttributeChange.CreateAttributeAdd(anchorAttributeName, value));
            }

            return(CSEntryChangeResult.Create(csentry.Identifier, anchorChanges, MAExportError.Success));
        }
        private static CSEntryChangeResult PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config)
        {
            deltaCSEntry.DN = csentry.GetNewDNOrDefault <string>() ?? csentry.DN;

            if (csentry.DN != deltaCSEntry.DN)
            {
                Logger.WriteLine($"DN rename {csentry.DN} -> {deltaCSEntry.DN}");
            }

            bool canPatch = maType.CanPatch(csentry.AttributeChanges);

            IApiInterfaceObject primaryInterface = maType.ApiInterface;

            deltaCSEntry.ObjectModificationType = primaryInterface.DeltaUpdateType;

            object instance;

            if (canPatch)
            {
                Logger.WriteLine($"Performing PATCH update operation for {csentry.DN}");
                instance = primaryInterface.CreateInstance(csentry);
            }
            else
            {
                Logger.WriteLine($"Performing FULL update operation for {csentry.DN}");
                instance = primaryInterface.GetInstance(csentry);
            }

            foreach (AttributeChange change in primaryInterface.ApplyChanges(csentry, type, ref instance, canPatch))
            {
                deltaCSEntry.AttributeChanges.Add(change);
            }

            return(CSEntryChangeResult.Create(csentry.Identifier, null, MAExportError.Success));
        }