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); }
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); }); } } } }
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; }