private static MservRecord GetRecord(IPropertyBag propertyBag, MservValueFormat format, bool createIfMissing, out MServPropertyDefinition recordPropDef) { MservRecord mservRecord = (MservRecord)propertyBag[MServRecipientSchema.MservPrimaryRecord]; MservRecord mservRecord2 = (MservRecord)propertyBag[MServRecipientSchema.MservSecondaryRecord]; if (mservRecord != null && mservRecord.ValueFormat == format) { recordPropDef = MServRecipientSchema.MservPrimaryRecord; return(mservRecord); } if (mservRecord2 != null && mservRecord2.ValueFormat == format) { recordPropDef = MServRecipientSchema.MservSecondaryRecord; return(mservRecord2); } if (!createIfMissing) { recordPropDef = null; return(null); } bool flag = mservRecord == null; if (mservRecord != null && mservRecord2 != null) { throw new DataValidationException(new PropertyValidationError(DirectoryStrings.CrossRecordMismatch(mservRecord, mservRecord2), MServRecipientSchema.MservPrimaryRecord, mservRecord)); } string puidKey = MServRecipientSchema.GetPuidKey(propertyBag); byte resourceId = flag ? 0 : 7; recordPropDef = (flag ? MServRecipientSchema.MservPrimaryRecord : MServRecipientSchema.MservSecondaryRecord); byte flags = 0; if (!flag) { flags = mservRecord.Flags; } MservRecord mservRecord3 = new MservRecord(puidKey, resourceId, null, null, flags); propertyBag[recordPropDef] = mservRecord3; return(mservRecord3); }
// Token: 0x06000F02 RID: 3842 RVA: 0x0004881C File Offset: 0x00046A1C private List <MservChange> BuildChangeList(ADRawEntry instanceToSave, out bool isSwap) { List <MservChange> list = new List <MservChange>(); isSwap = false; foreach (PropertyDefinition propertyDefinition in MservRecipientSession.MServRecipientSchema.AllProperties) { MServPropertyDefinition mservPropertyDefinition = (MServPropertyDefinition)propertyDefinition; if (!mservPropertyDefinition.IsCalculated && (instanceToSave.propertyBag.IsChanged(mservPropertyDefinition) || mservPropertyDefinition.IsMultivalued) && !mservPropertyDefinition.IsTaskPopulated) { object obj = null; instanceToSave.propertyBag.TryGetField(mservPropertyDefinition, ref obj); if (!mservPropertyDefinition.IsMultivalued || (obj != null && ((MultiValuedPropertyBase)obj).Changed)) { ExTraceGlobals.ADSaveTracer.TraceDebug <string>((long)this.GetHashCode(), "MservRecipientSession::Save - updating {0}", mservPropertyDefinition.Name); if (!mservPropertyDefinition.IsMultivalued) { object obj2; instanceToSave.propertyBag.TryGetOriginalValue(mservPropertyDefinition, out obj2); MservRecord mservRecord = (MservRecord)obj; MservRecord mservRecord2 = (MservRecord)obj2; if (mservRecord != null && mservRecord.IsEmpty) { mservRecord = null; } list.Add(new MservChange(mservRecord, mservRecord2)); if (mservRecord != null && mservRecord2 != null && mservRecord.ResourceId != mservRecord2.ResourceId) { isSwap = true; if (mservRecord.Value != mservRecord2.Value) { throw new MservOperationException(DirectoryStrings.SwapShouldNotChangeValues(mservRecord2.Value, mservRecord2.ResourceId, mservRecord.Value, mservRecord.ResourceId)); } } } else { MultiValuedPropertyBase multiValuedPropertyBase = (MultiValuedPropertyBase)obj; if (multiValuedPropertyBase.WasCleared) { throw new MservOperationException(DirectoryStrings.NoResetOrAssignedMvp); } foreach (object obj3 in multiValuedPropertyBase.Removed) { list.Add(new MservChange(null, (MservRecord)obj3)); } foreach (object obj4 in multiValuedPropertyBase.Added) { list.Add(new MservChange((MservRecord)obj4, null)); } } } } } if (isSwap) { if (list.Count != 2) { throw new MservOperationException(DirectoryStrings.BadSwapOperationCount(list.Count)); } if (list[0].OldValue.ResourceId != list[1].NewValue.ResourceId || list[0].NewValue.ResourceId != list[1].OldValue.ResourceId) { throw new MservOperationException(DirectoryStrings.BadSwapResourceIds(list[0].OldValue.ResourceId, list[0].NewValue.ResourceId, list[1].OldValue.ResourceId, list[1].NewValue.ResourceId)); } } return(list); }
private static void UpdateRecordFlag(bool value, byte mask, IPropertyBag propertyBag, MServPropertyDefinition propertyDefinition) { MservRecord mservRecord = (MservRecord)propertyBag[propertyDefinition]; if (mservRecord != null) { MservRecord updatedRecordFlag = mservRecord.GetUpdatedRecordFlag(value, mask); propertyBag[propertyDefinition] = updatedRecordFlag; } }