private object GetOriginalPropertyValueForLogging(CoreItem item, StorePropertyDefinition interestingProperty)
        {
            if ((interestingProperty.PropertyFlags & PropertyFlags.Streamable) == PropertyFlags.Streamable)
            {
                COWContactLogging.Tracer.TraceDebug <string>((long)this.GetHashCode(), "COWContactLogging.GetOriginalPropertyValueForLogging: Skipping retrieval of value for streamable property {0}", interestingProperty.Name);
                return(null);
            }
            IValidatablePropertyBag validatablePropertyBag = item.PropertyBag as IValidatablePropertyBag;

            if (validatablePropertyBag == null)
            {
                COWContactLogging.Tracer.TraceDebug((long)this.GetHashCode(), "COWContactLogging.GetOriginalPropertyValueForLogging: Skipping retrieval of value as property bag doesn't track original values.");
                return(null);
            }
            PropertyValueTrackingData originalPropertyInformation = validatablePropertyBag.GetOriginalPropertyInformation(interestingProperty);

            return(originalPropertyInformation.OriginalPropertyValue);
        }
Beispiel #2
0
        public StorePropertyDefinition[] GetProperties(StoreObjectId itemId, CoreItem item)
        {
            string valueOrDefault = item.PropertyBag.GetValueOrDefault <string>(StoreObjectSchema.ItemClass, string.Empty);

            if (ObjectClass.IsContact(valueOrDefault))
            {
                return(UcsTracker.AllContactPropertiesToBeLoaded);
            }
            if (ObjectClass.IsDistributionList(valueOrDefault))
            {
                return(UcsTracker.AllPdlPropertiesToBeLoaded);
            }
            if (ObjectClass.IsContactsFolder(valueOrDefault))
            {
                if (this.IsUcsFolder(valueOrDefault))
                {
                    return(UcsTracker.FolderProperties);
                }
                if (!item.PropertyBag.IsPropertyDirty(StoreObjectSchema.ContainerClass))
                {
                    UcsTracker.Tracer.TraceDebug((long)this.GetHashCode(), "UcsTracker.GetProperties: Container class property is not dirty.");
                }
                else
                {
                    IValidatablePropertyBag validatablePropertyBag = item.PropertyBag as IValidatablePropertyBag;
                    if (validatablePropertyBag == null)
                    {
                        UcsTracker.Tracer.TraceDebug((long)this.GetHashCode(), "UcsTracker.GetProperties: Skipping retrieval of old value as property bag doesn't track original values.");
                    }
                    else
                    {
                        PropertyValueTrackingData originalPropertyInformation = validatablePropertyBag.GetOriginalPropertyInformation(StoreObjectSchema.ContainerClass);
                        string containerClass = originalPropertyInformation.OriginalPropertyValue as string;
                        if (this.IsUcsFolder(containerClass))
                        {
                            return(UcsTracker.FolderProperties);
                        }
                    }
                }
            }
            return(null);
        }
Beispiel #3
0
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            object obj = validatablePropertyBag.TryGetProperty(this.propertyDefinition);

            if (!PropertyError.IsPropertyNotFound(obj))
            {
                PropertyConstraintViolationError propertyConstraintViolationError = this.constraint.Validate(obj, this.propertyDefinition, null);
                if (propertyConstraintViolationError != null)
                {
                    return(new StoreObjectValidationError(context, this.propertyDefinition, obj, this));
                }
            }
            return(null);
        }
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            string text = validatablePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string;

            if (!string.IsNullOrEmpty(text) && (ObjectClass.IsCalendarItem(text) || ObjectClass.IsRecurrenceException(text)) && validatablePropertyBag.IsPropertyDirty(InternalSchema.CalendarOriginatorId))
            {
                object obj = validatablePropertyBag.TryGetProperty(InternalSchema.CalendarOriginatorId);
                if (obj is string)
                {
                    string text2 = (string)obj;
                    PropertyValueTrackingData originalPropertyInformation = validatablePropertyBag.GetOriginalPropertyInformation(InternalSchema.CalendarOriginatorId);
                    if (originalPropertyInformation.PropertyValueState == PropertyTrackingInformation.Modified)
                    {
                        MailboxSession mailboxSession = context.Session as MailboxSession;
                        if (mailboxSession != null && originalPropertyInformation.OriginalPropertyValue != null && !PropertyError.IsPropertyNotFound(originalPropertyInformation.OriginalPropertyValue))
                        {
                            string text3 = (string)originalPropertyInformation.OriginalPropertyValue;
                            int?   num   = CalendarOriginatorIdProperty.Compare(text2, text3);
                            if (num != null && num < 0 && !mailboxSession.Capabilities.CanSetCalendarAPIProperties && mailboxSession.LogonType != LogonType.Transport)
                            {
                                ExTraceGlobals.MeetingMessageTracer.TraceError <string, string>((long)this.GetHashCode(), "CalendarOriginatorIdConstraint::Validate. calendar originator value changed. Original = {0}, Current = {1}", text3, text2);
                                return(new StoreObjectValidationError(context, InternalSchema.CalendarOriginatorId, text2, this));
                            }
                        }
                    }
                }
            }
            return(null);
        }
Beispiel #5
0
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            StoreObjectValidationError storeObjectValidationError = null;

            foreach (StoreObjectConstraint storeObjectConstraint in base.Constraints)
            {
                StoreObjectValidationError storeObjectValidationError2 = storeObjectConstraint.Validate(context, validatablePropertyBag);
                if (storeObjectValidationError2 == null)
                {
                    return(null);
                }
                if (storeObjectValidationError == null)
                {
                    storeObjectValidationError = storeObjectValidationError2;
                }
            }
            return(new StoreObjectValidationError(context, storeObjectValidationError.PropertyDefinition, storeObjectValidationError.InvalidData, this));
        }
 internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
 {
     if (validatablePropertyBag.IsPropertyDirty(this.propertyDefinition))
     {
         return(new StoreObjectValidationError(context, this.propertyDefinition, validatablePropertyBag.TryGetProperty(this.propertyDefinition), this));
     }
     return(null);
 }
Beispiel #7
0
 internal static void ValidateProperties(ValidationContext context, IValidatable validatable, IValidatablePropertyBag propertyBag, IList <StoreObjectValidationError> validationErrors)
 {
     foreach (StoreObjectConstraint storeObjectConstraint in validatable.Schema.Constraints)
     {
         bool flag = validatable.ValidateAllProperties;
         if (!flag)
         {
             foreach (PropertyDefinition propertyDefinition in storeObjectConstraint.RelevantProperties)
             {
                 if (propertyBag.IsPropertyDirty(propertyDefinition))
                 {
                     flag = true;
                     break;
                 }
             }
         }
         if (flag)
         {
             StoreObjectValidationError storeObjectValidationError = storeObjectConstraint.Validate(context, propertyBag);
             if (storeObjectValidationError != null)
             {
                 validationErrors.Add(storeObjectValidationError);
             }
         }
     }
 }
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            string text = validatablePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string;

            if (!string.IsNullOrEmpty(text) && (ObjectClass.IsCalendarItem(text) || ObjectClass.IsRecurrenceException(text) || ObjectClass.IsMeetingMessage(text)) && validatablePropertyBag.IsPropertyDirty(InternalSchema.AppointmentStateInternal))
            {
                object obj = validatablePropertyBag.TryGetProperty(InternalSchema.AppointmentStateInternal);
                if (obj is int)
                {
                    AppointmentStateFlags appointmentStateFlags = (AppointmentStateFlags)obj;
                    if (EnumValidator <AppointmentStateFlags> .IsValidValue(appointmentStateFlags))
                    {
                        PropertyValueTrackingData originalPropertyInformation = validatablePropertyBag.GetOriginalPropertyInformation(InternalSchema.AppointmentStateInternal);
                        if (originalPropertyInformation.PropertyValueState == PropertyTrackingInformation.Modified && originalPropertyInformation.OriginalPropertyValue != null && !PropertyError.IsPropertyNotFound(originalPropertyInformation.OriginalPropertyValue))
                        {
                            AppointmentStateFlags appointmentStateFlags2 = (AppointmentStateFlags)originalPropertyInformation.OriginalPropertyValue;
                            bool flag  = (appointmentStateFlags2 & AppointmentStateFlags.Received) == AppointmentStateFlags.None;
                            bool flag2 = (appointmentStateFlags & AppointmentStateFlags.Received) == AppointmentStateFlags.None;
                            if (flag != flag2)
                            {
                                return(new StoreObjectValidationError(context, InternalSchema.AppointmentStateInternal, obj, this));
                            }
                        }
                    }
                }
            }
            return(null);
        }
Beispiel #9
0
 internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
 {
     if (ObjectClass.IsCalendarItem((validatablePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string) ?? string.Empty))
     {
         PersistablePropertyBag persistablePropertyBag = validatablePropertyBag as PersistablePropertyBag;
         if (persistablePropertyBag != null)
         {
             byte[] largeBinaryProperty = persistablePropertyBag.GetLargeBinaryProperty(InternalSchema.AppointmentRecurrenceBlob);
             if (largeBinaryProperty != null)
             {
                 ExTimeZone createTimeZone = TimeZoneHelper.GetRecurringTimeZoneFromPropertyBag(persistablePropertyBag) ?? ExTimeZone.CurrentTimeZone;
                 try
                 {
                     InternalRecurrence.InternalParse(largeBinaryProperty, persistablePropertyBag.TryGetProperty(InternalSchema.ItemId) as VersionedId, createTimeZone, persistablePropertyBag.ExTimeZone, CalendarItem.DefaultCodePage);
                 }
                 catch (RecurrenceCalendarTypeNotSupportedException ex)
                 {
                     ExTraceGlobals.RecurrenceTracer.TraceDebug <CalendarType>((long)this.GetHashCode(), "RecurrenceBlobConstraint::Validate. Not supported calendar type found. CalendarType:{0}", ex.CalendarType);
                 }
                 catch (RecurrenceFormatException)
                 {
                     return(new StoreObjectValidationError(context, InternalSchema.AppointmentRecurrenceBlob, largeBinaryProperty, this));
                 }
             }
         }
     }
     return(null);
 }
Beispiel #10
0
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            object obj = validatablePropertyBag.TryGetProperty(this.propertyDefinition);

            if (PropertyError.IsPropertyError(obj) && !PropertyError.IsPropertyValueTooBig(obj))
            {
                return(new StoreObjectValidationError(context, this.propertyDefinition, obj, this));
            }
            return(null);
        }
Beispiel #11
0
 internal abstract StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag);
 internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
 {
     if (validatablePropertyBag is PropertyBag && validatablePropertyBag.IsPropertyDirty(ExtendedRuleConditionConstraint.propertyDefinition))
     {
         byte[]       array   = validatablePropertyBag.TryGetProperty(ExtendedRuleConditionConstraint.propertyDefinition) as byte[];
         StoreSession session = ((PropertyBag)validatablePropertyBag).Context.Session;
         if (array != null && session != null && array.Length > ExtendedRuleConditionConstraint.GetExtendedRuleSizeLimit(session))
         {
             return(new StoreObjectValidationError(context, ExtendedRuleConditionConstraint.propertyDefinition, array, this));
         }
     }
     return(null);
 }
 internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
 {
     if (this.validationDelegate(context, validatablePropertyBag) == this.objectIsValidIfDelegateIsTrue)
     {
         return(null);
     }
     return(new StoreObjectValidationError(context, this.propertyDefinition, validatablePropertyBag.TryGetProperty(this.propertyDefinition), this));
 }
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            object obj  = validatablePropertyBag.TryGetProperty(this.leftPropertyDefinition);
            object obj2 = validatablePropertyBag.TryGetProperty(this.rightPropertyDefinition);

            if (PropertyError.IsPropertyNotFound(obj) && PropertyError.IsPropertyNotFound(obj2) && (this.comparisonOperator == ComparisonOperator.Equal || this.comparisonOperator == ComparisonOperator.LessThanOrEqual || this.comparisonOperator == ComparisonOperator.GreaterThanOrEqual))
            {
                return(null);
            }
            if (PropertyError.IsPropertyError(obj))
            {
                return(new StoreObjectValidationError(context, this.leftPropertyDefinition, obj, this));
            }
            if (PropertyError.IsPropertyError(obj2))
            {
                return(new StoreObjectValidationError(context, this.rightPropertyDefinition, obj2, this));
            }
            bool flag = false;

            switch (this.comparisonOperator)
            {
            case ComparisonOperator.Equal:
                flag = Util.ValueEquals(obj, obj2);
                break;

            case ComparisonOperator.NotEqual:
                flag = !Util.ValueEquals(obj, obj2);
                break;

            case ComparisonOperator.LessThan:
                flag = PropertyComparisonConstraint.LessThan(obj, obj2);
                break;

            case ComparisonOperator.LessThanOrEqual:
                flag = !PropertyComparisonConstraint.LessThan(obj2, obj);
                break;

            case ComparisonOperator.GreaterThan:
                flag = PropertyComparisonConstraint.LessThan(obj2, obj);
                break;

            case ComparisonOperator.GreaterThanOrEqual:
                flag = !PropertyComparisonConstraint.LessThan(obj, obj2);
                break;
            }
            if (flag)
            {
                return(null);
            }
            return(new StoreObjectValidationError(context, this.rightPropertyDefinition, obj2, this));
        }
Beispiel #15
0
        internal override StoreObjectValidationError Validate(ValidationContext context, IValidatablePropertyBag validatablePropertyBag)
        {
            if (!validatablePropertyBag.IsPropertyDirty(base.PropertyDefinition))
            {
                return(null);
            }
            object obj = validatablePropertyBag.TryGetProperty(base.PropertyDefinition);

            if (this.fixedValue.Equals(obj))
            {
                return(null);
            }
            return(base.Validate(context, validatablePropertyBag));
        }