private static bool IsPropertyError(IReadOnlyPropertyBag propertyBag, PropertyDefinition property, bool shouldThrow) { object obj = propertyBag[property]; if (obj != null) { PropertyError propertyError = obj as PropertyError; if (propertyError != null) { if (shouldThrow) { throw PropertyErrorException.FromPropertyErrorsInternal(new PropertyError[] { obj as PropertyError }); } return(true); } } else if (propertyBag is ADPropertyBag || propertyBag is ADRawEntry) { if (shouldThrow) { throw PropertyErrorException.FromPropertyErrorsInternal(new PropertyError[] { new PropertyError(property, PropertyErrorCode.NotFound) }); } return(true); } return(false); }
private PropertyErrorException(LocalizedString message, params PropertyError[] errors) : base(LocalizedString.Join(string.Empty, new object[] { message, PropertyErrorException.DescribePropertyErrors(errors) })) { this.errors = errors; }
public static StoragePermanentException ToException(LocalizedString message, params PropertyError[] propertyErrors) { foreach (PropertyError propertyError in propertyErrors) { if (propertyError.PropertyErrorCode == PropertyErrorCode.NotEnoughMemory && propertyError.PropertyDefinition is StorePropertyDefinition && (((StorePropertyDefinition)propertyError.PropertyDefinition).PropertyFlags & PropertyFlags.Streamable) == PropertyFlags.None) { throw new PropertyTooBigException(propertyError.PropertyDefinition); } } if (!(message != LocalizedString.Empty)) { return(PropertyErrorException.FromPropertyErrorsInternal(propertyErrors)); } return(PropertyErrorException.FromPropertyErrorsInternal(message, propertyErrors)); }
private PropertyErrorException(params PropertyError[] errors) : base(PropertyErrorException.DescribePropertyErrors(errors)) { this.errors = errors; }
private static bool EvaluatePropertyComparisonFilter(PropertyComparisonFilter propertyComparisonFilter, IReadOnlyPropertyBag propertyBag, bool shouldThrow) { object obj = propertyBag[propertyComparisonFilter.Property1]; object obj2 = propertyBag[propertyComparisonFilter.Property2]; if (obj is PropertyError || obj2 is PropertyError) { if (shouldThrow) { throw PropertyErrorException.FromPropertyErrorsInternal(new PropertyError[] { obj as PropertyError, obj2 as PropertyError }); } return(false); } else { switch (propertyComparisonFilter.ComparisonOperator) { case ComparisonOperator.Equal: return(obj.Equals(obj2)); case ComparisonOperator.NotEqual: return(!obj.Equals(obj2)); case ComparisonOperator.LessThan: if (obj is ExDateTime) { return((ExDateTime)obj < (ExDateTime)obj2); } if (obj is int) { return((int)obj < (int)obj2); } if (obj is long) { return((long)obj < (long)obj2); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for PropertyComparisonFilter <"); case ComparisonOperator.LessThanOrEqual: if (obj is ExDateTime) { return((ExDateTime)obj <= (ExDateTime)obj2); } if (obj is int) { return((int)obj <= (int)obj2); } if (obj is long) { return((long)obj <= (long)obj2); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for PropertyComparisonFilter <="); case ComparisonOperator.GreaterThan: if (obj is ExDateTime) { return((ExDateTime)obj > (ExDateTime)obj2); } if (obj is int) { return((int)obj > (int)obj2); } if (obj is long) { return((long)obj > (long)obj2); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for PropertyComparisonFilter >"); case ComparisonOperator.GreaterThanOrEqual: if (obj is ExDateTime) { return((ExDateTime)obj >= (ExDateTime)obj2); } if (obj is int) { return((int)obj >= (int)obj2); } if (obj is long) { return((long)obj >= (long)obj2); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for PropertyComparisonFilter >="); default: throw new InvalidOperationException("Unsupported ComparisonOperator: " + ((int)propertyComparisonFilter.ComparisonOperator).ToString()); } } }
private static bool EvaluateComparisonFilter(ComparisonFilter comparisonFilter, IReadOnlyPropertyBag propertyBag, bool shouldThrow) { object obj; try { obj = propertyBag[comparisonFilter.Property]; } catch (PropertyErrorException) { if (shouldThrow) { throw; } return(false); } PropertyError propertyError = obj as PropertyError; if (propertyError != null) { if (shouldThrow) { throw PropertyErrorException.FromPropertyErrorsInternal(new PropertyError[] { propertyError }); } return(false); } else { if (EvaluatableFilter.IsPropertyError(propertyBag, comparisonFilter.Property, shouldThrow)) { return(false); } switch (comparisonFilter.ComparisonOperator) { case ComparisonOperator.Equal: if (comparisonFilter.PropertyValue is Participant) { return(Participant.HasSameEmail(comparisonFilter.PropertyValue as Participant, obj as Participant, false)); } if (obj is MultiValuedProperty <string> && comparisonFilter.PropertyValue is string) { MultiValuedProperty <string> multiValuedProperty = obj as MultiValuedProperty <string>; if (multiValuedProperty.Count == 1) { return(multiValuedProperty[0].Equals(comparisonFilter.PropertyValue)); } } if (obj is SmtpAddress && comparisonFilter.PropertyValue is EmailAddress) { return(obj.Equals((comparisonFilter.PropertyValue as EmailAddress).Address)); } return(obj.Equals(comparisonFilter.PropertyValue)); case ComparisonOperator.NotEqual: return(!obj.Equals(comparisonFilter.PropertyValue)); case ComparisonOperator.LessThan: if (comparisonFilter.PropertyValue is ExDateTime) { return((ExDateTime)obj < (ExDateTime)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is int) { return((int)obj < (int)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is long) { return((long)obj < (long)comparisonFilter.PropertyValue); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for ComparisonFilter <"); case ComparisonOperator.LessThanOrEqual: if (comparisonFilter.PropertyValue is ExDateTime) { return((ExDateTime)obj <= (ExDateTime)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is int) { return((int)obj <= (int)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is long) { return((long)obj <= (long)comparisonFilter.PropertyValue); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for ComparisonFilter <="); case ComparisonOperator.GreaterThan: if (comparisonFilter.PropertyValue is ExDateTime) { return((ExDateTime)obj > (ExDateTime)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is int) { return((int)obj > (int)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is long) { return((long)obj > (long)comparisonFilter.PropertyValue); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for ComparisonFilter >"); case ComparisonOperator.GreaterThanOrEqual: if (comparisonFilter.PropertyValue is ExDateTime) { return((ExDateTime)obj >= (ExDateTime)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is int) { return((int)obj >= (int)comparisonFilter.PropertyValue); } if (comparisonFilter.PropertyValue is long) { return((long)obj >= (long)comparisonFilter.PropertyValue); } throw new InvalidOperationException("Only int, long, and ExDateTime supported for ComparisonFilter >="); default: throw new InvalidOperationException("Unsupported ComparisonOperator: " + ((int)comparisonFilter.ComparisonOperator).ToString()); } } bool result; return(result); }