Пример #1
0
        private List <ADRecipient> GetRecipients <TIdentityParameter>(IEnumerable <TIdentityParameter> parameters, string parameterName, GetRecipientDelegate <TIdentityParameter> getRecipient, ValidateRecipientDelegate validateRecipient) where TIdentityParameter : class, IIdentityParameter
        {
            List <ADRecipient>   list         = new List <ADRecipient>();
            HashSet <ADObjectId> recipientIds = new HashSet <ADObjectId>();

            using (IEnumerator <TIdentityParameter> enumerator = parameters.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    TIdentityParameter      parameter = enumerator.Current;
                    IReferenceErrorReporter referenceErrorReporter = this.ReferenceErrorReporter;
                    string             parameterName2 = parameterName;
                    TIdentityParameter parameter3     = parameter;
                    referenceErrorReporter.ValidateReference(parameterName2, parameter3.RawIdentity, delegate(Task.ErrorLoggerDelegate writeError)
                    {
                        ADRecipient adrecipient = getRecipient(parameter, writeError);
                        if (recipientIds.Contains((ADObjectId)adrecipient.Identity))
                        {
                            writeError(new RecipientTaskException(Strings.ErrorRecipientIdParamElementsNotUnique(parameterName, adrecipient.Id.ToString())), ExchangeErrorCategory.Client, parameter);
                        }
                        if (validateRecipient != null)
                        {
                            ValidateRecipientDelegate validateRecipient2 = validateRecipient;
                            ADRecipient recipient         = adrecipient;
                            TIdentityParameter parameter2 = parameter;
                            validateRecipient2(recipient, parameter2.RawIdentity, writeError);
                        }
                        recipientIds.Add((ADObjectId)adrecipient.Identity);
                        list.Add(adrecipient);
                        this.parameterDictionary.Add(adrecipient, parameter);
                    });
                }
            }
            return(list);
        }
Пример #2
0
        internal static void ValidateModifiedMultiReferenceParameter <TDataObject>(string parameterName, object propertyKey, TDataObject targetObject, ValidateRecipientWithBaseObjectDelegate <TDataObject> validateRecipient, IReferenceErrorReporter referenceErrorReporter, Dictionary <object, MultiValuedProperty <ADRecipient> > recipientsDictionary, Dictionary <ADRecipient, IIdentityParameter> parameterDictionary) where TDataObject : ADObject
        {
            MultiValuedProperty <ADRecipient> multiValuedProperty;

            if (recipientsDictionary.TryGetValue(propertyKey, out multiValuedProperty))
            {
                using (MultiValuedProperty <ADRecipient> .Enumerator enumerator = multiValuedProperty.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        ADRecipient recipient = enumerator.Current;
                        referenceErrorReporter.ValidateReference(parameterName, parameterDictionary[recipient].RawIdentity, delegate(Task.ErrorLoggerDelegate writeError)
                        {
                            validateRecipient(targetObject, recipient, writeError);
                        });
                    }
                }
            }
        }
Пример #3
0
        internal static void ResolveModifiedMultiReferenceParameter <TIdentityParameter>(string parameterName, object propertyBagKey, IEnumerable <TIdentityParameter> parameters, GetRecipientDelegate <TIdentityParameter> getRecipient, IReferenceErrorReporter referenceErrorReporter, Dictionary <object, MultiValuedProperty <ADObjectId> > recipientIdsDictionary, Dictionary <object, MultiValuedProperty <ADRecipient> > recipientsDictionary, Dictionary <ADRecipient, IIdentityParameter> parameterDictionary) where TIdentityParameter : IIdentityParameter
        {
            MultiValuedProperty <ADRecipient> recipients   = null;
            MultiValuedProperty <ADObjectId>  recipientIds = null;

            if (parameters != null)
            {
                recipients   = new MultiValuedProperty <ADRecipient>();
                recipientIds = new MultiValuedProperty <ADObjectId>();
                using (IEnumerator <TIdentityParameter> enumerator = parameters.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        TIdentityParameter parameter      = enumerator.Current;
                        string             parameterName2 = parameterName;
                        TIdentityParameter parameter2     = parameter;
                        referenceErrorReporter.ValidateReference(parameterName2, parameter2.RawIdentity, delegate(Task.ErrorLoggerDelegate writeError)
                        {
                            ADRecipient adrecipient = getRecipient(parameter, writeError);
                            if (recipientIds.Contains((ADObjectId)adrecipient.Identity))
                            {
                                writeError(new RecipientTaskException(Strings.ErrorRecipientIdParamElementsNotUnique(parameterName, adrecipient.Id.ToString())), ExchangeErrorCategory.Client, parameter);
                            }
                            recipientIds.Add(adrecipient.Identity);
                            recipients.Add(adrecipient);
                            parameterDictionary.Add(adrecipient, parameter);
                        });
                    }
                }
            }
            recipientsDictionary[propertyBagKey]   = recipients;
            recipientIdsDictionary[propertyBagKey] = recipientIds;
        }