Example #1
0
 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));
        }
Example #3
0
        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);
        }
Example #5
0
        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);
        }
Example #8
0
 internal static bool Includes(this ClientIntentFlags flags, ClientIntentFlags desiredFlags)
 {
     return((flags & desiredFlags) == desiredFlags);
 }