private static bool CheckDesiredClientIntent(ClientIntentFlags changeIntent, ClientIntentFlags desiredFlag) { if (desiredFlag != ClientIntentFlags.None) { return(changeIntent.Includes(desiredFlag)); } return(changeIntent == ClientIntentFlags.None); }
public override ClientIntentQuery.QueryResult Execute(MailboxSession session, CalendarVersionStoreGateway cvsGateway) { bool isChainComplete = false; CalendarItemState previousState = null; bool foundVersionInTargetState = false; VersionedId sourceVersionId = null; ClientIntentFlags accumulatedFlags = ClientIntentFlags.None; ClientIntentFlags intentToAccumulate = ClientIntentFlags.None; base.RunQuery(session, cvsGateway, delegate(PropertyBag propertyBag) { CalendarItemState calendarItemState = new CalendarItemState(); if (!foundVersionInTargetState) { if (this.TargetState.Evaluate(calendarItemState, propertyBag, session)) { foundVersionInTargetState = true; intentToAccumulate = this.GetClientIntentFromPropertyBag(propertyBag); accumulatedFlags = intentToAccumulate; } } else if (this.InitialState.Evaluate(calendarItemState, propertyBag, session)) { isChainComplete = true; accumulatedFlags &= intentToAccumulate; sourceVersionId = this.GetIdFromPropertyBag(propertyBag); } else if (this.TargetState.Evaluate(calendarItemState, propertyBag, session)) { intentToAccumulate = this.GetClientIntentFromPropertyBag(propertyBag); accumulatedFlags = intentToAccumulate; } else if (this.TargetState.Equals(calendarItemState, previousState)) { intentToAccumulate = this.GetClientIntentFromPropertyBag(propertyBag); } else { accumulatedFlags &= intentToAccumulate; intentToAccumulate = this.GetClientIntentFromPropertyBag(propertyBag); } previousState = calendarItemState; return(!isChainComplete); }); return(new ClientIntentQuery.QueryResult(isChainComplete ? new ClientIntentFlags?(accumulatedFlags) : null, sourceVersionId)); }
public override ClientIntentQuery.QueryResult Execute(MailboxSession session, CalendarVersionStoreGateway cvsGateway) { ClientIntentFlags targetVersionClientIntent = ClientIntentFlags.None; bool foundVersionInTargetState = false; VersionedId sourceVersionId = null; base.RunQuery(session, cvsGateway, delegate(PropertyBag propertyBag) { CalendarItemState state = new CalendarItemState(); if (this.TargetState.Evaluate(state, propertyBag, session)) { targetVersionClientIntent = this.GetClientIntentFromPropertyBag(propertyBag); sourceVersionId = this.GetIdFromPropertyBag(propertyBag); foundVersionInTargetState = true; } return(!foundVersionInTargetState); }); return(new ClientIntentQuery.QueryResult(foundVersionInTargetState ? new ClientIntentFlags?(targetVersionClientIntent) : null, sourceVersionId)); }
protected override ClientIntentFlags CalculateClientIntentBasedOnModifiedProperties() { ClientIntentFlags clientIntentFlags = base.CalculateClientIntentBasedOnModifiedProperties(); if (base.PropertyBag.IsPropertyDirty(InternalSchema.MapiIsAllDayEvent)) { clientIntentFlags |= ClientIntentFlags.ModifiedTime; } else { if (base.PropertyBag.IsPropertyDirty(CalendarItemInstanceSchema.StartTime)) { clientIntentFlags |= ClientIntentFlags.ModifiedStartTime; } if (base.PropertyBag.IsPropertyDirty(CalendarItemInstanceSchema.EndTime)) { clientIntentFlags |= ClientIntentFlags.ModifiedEndTime; } } return(clientIntentFlags); }
private Inconsistency GetAttendeeMissingItemInconsistency(CalendarValidationContext context, string fullDescription, ClientIntentFlags?inconsistencyIntent, ClientIntentFlags declineIntent, ClientIntentFlags deleteIntent) { Inconsistency inconsistency = null; if (ClientIntentQuery.CheckDesiredClientIntent(inconsistencyIntent, new ClientIntentFlags[] { declineIntent })) { inconsistency = ResponseInconsistency.CreateInstance(fullDescription, ResponseType.Decline, context.Attendee.ResponseType, ExDateTime.MinValue, context.Attendee.ReplyTime, context); inconsistency.Intent = inconsistencyIntent; } else if (ClientIntentQuery.CheckDesiredClientIntent(inconsistencyIntent, new ClientIntentFlags[] { deleteIntent })) { inconsistency = null; } else if (this.calendarIntent != null && this.calendarIntent.ItemVersion > 0) { inconsistency = MissingItemInconsistency.CreateAttendeeMissingItemInstance(fullDescription, inconsistencyIntent, new int?(this.calendarIntent.ItemVersion), context); inconsistency.Intent = inconsistencyIntent; } return(inconsistency); }
private Inconsistency GetAttendeeMissingItemInconsistency(CalendarValidationContext context, string fullDescription, ClientIntentQuery.QueryResult inconsistencyIntent, ClientIntentFlags declineIntent, ClientIntentFlags deleteIntent) { Inconsistency inconsistency = null; if (ClientIntentQuery.CheckDesiredClientIntent(inconsistencyIntent.Intent, new ClientIntentFlags[] { declineIntent })) { inconsistency = ResponseInconsistency.CreateInstance(fullDescription, ResponseType.Decline, context.Attendee.ResponseType, ExDateTime.MinValue, context.Attendee.ReplyTime, context); inconsistency.Intent = inconsistencyIntent.Intent; } else if (ClientIntentQuery.CheckDesiredClientIntent(inconsistencyIntent.Intent, new ClientIntentFlags[] { deleteIntent })) { inconsistency = null; } else if (inconsistencyIntent.SourceVersionId != null) { int?deletedItemVersion = null; using (CalendarItemBase calendarItemBase = CalendarItemBase.Bind(this.session, inconsistencyIntent.SourceVersionId)) { deletedItemVersion = calendarItemBase.GetValueAsNullable <int>(CalendarItemBaseSchema.ItemVersion); } if (deletedItemVersion != null) { inconsistency = MissingItemInconsistency.CreateAttendeeMissingItemInstance(fullDescription, inconsistencyIntent.Intent, deletedItemVersion, context); inconsistency.Intent = inconsistencyIntent.Intent; } } return(inconsistency); }
private static ClientIntentFlags GetClientIntentFromFolderChangeOperationFlags(FolderChangeOperationFlags flags, string previousAction, ClientIntentFlags carryOverIntent) { ClientIntentFlags result; if ((flags & FolderChangeOperationFlags.DeclineCalendarItemWithoutResponse) == FolderChangeOperationFlags.DeclineCalendarItemWithoutResponse) { result = ClientIntentFlags.DeletedWithNoResponse; } else if ((flags & FolderChangeOperationFlags.DeclineCalendarItemWithResponse) == FolderChangeOperationFlags.DeclineCalendarItemWithResponse) { result = ClientIntentFlags.RespondedDecline; } else if ((flags & FolderChangeOperationFlags.CancelCalendarItem) == FolderChangeOperationFlags.CancelCalendarItem) { result = ClientIntentFlags.MeetingCanceled; } else { result = ((CalendarLoggingHelper.updateActionString == previousAction) ? carryOverIntent : ClientIntentFlags.None); } return(result); }
internal static bool Includes(this ClientIntentFlags flags, ClientIntentFlags desiredFlags) { return((flags & desiredFlags) == desiredFlags); }