Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / Rules / RuleSetReference.cs / 1305376 / RuleSetReference.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Text;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Drawing.Design;
using System.Workflow.Activities.Rules.Design;
using System.ComponentModel.Design.Serialization;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.Activities.Common;
namespace System.Workflow.Activities.Rules
{
#region RuleSetReference Class
[DesignerSerializer(typeof(WorkflowMarkupSerializer), typeof(WorkflowMarkupSerializer))]
[DesignerSerializer(typeof(DependencyObjectCodeDomSerializer), typeof(CodeDomSerializer))]
[ActivityValidator(typeof(RuleSetReferenceValidator))]
[Editor(typeof(RuleSetNameEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(RuleSetReferenceTypeConverter))]
[Browsable(true)]
sealed public class RuleSetReference : DependencyObject
{
#region members and constructors
private bool _runtimeInitialized;
private string _name;
public RuleSetReference()
{
}
public RuleSetReference(string ruleSetName)
{
_name = ruleSetName;
}
#endregion
#region public members
public string RuleSetName
{
get
{
return this._name;
}
set
{
this._name = value;
}
}
#endregion
#region IInitializeForRuntime Members
[NonSerialized]
private object syncLock = new object();
protected override void InitializeProperties()
{
lock (syncLock)
{
if (this._runtimeInitialized)
return;
Activity ownerActivity = base.ParentDependencyObject as Activity;
CompositeActivity declaringActivity = Helpers.GetDeclaringActivity(ownerActivity);
if (declaringActivity == null)
{
declaringActivity = Helpers.GetRootActivity(ownerActivity) as CompositeActivity;
}
RuleDefinitions rules = ConditionHelper.Load_Rules_RT(declaringActivity);
if (rules != null)
rules.OnRuntimeInitialized();
base.InitializeProperties();
_runtimeInitialized = true;
}
}
#endregion
}
#endregion
#region RuleSetReferenceValidator Class
internal sealed class RuleSetReferenceValidator : Validator
{
public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
{
ValidationErrorCollection validationErrors = base.Validate(manager, obj);
RuleSetReference ruleSetReference = obj as RuleSetReference;
if (ruleSetReference == null)
{
string message = string.Format(CultureInfo.CurrentCulture, Messages.UnexpectedArgumentType, typeof(RuleSetReference).FullName, "obj");
throw new ArgumentException(message, "obj");
}
Activity activity = manager.Context[typeof(Activity)] as Activity;
if (activity == null)
{
string message = string.Format(CultureInfo.CurrentCulture, Messages.ContextStackItemMissing, typeof(Activity).Name);
throw new InvalidOperationException(message);
}
PropertyValidationContext validationContext = manager.Context[typeof(PropertyValidationContext)] as PropertyValidationContext;
if (validationContext == null)
{
string message = string.Format(CultureInfo.CurrentCulture, Messages.ContextStackItemMissing, typeof(PropertyValidationContext).Name);
throw new InvalidOperationException(message);
}
if (!string.IsNullOrEmpty(ruleSetReference.RuleSetName))
{
RuleDefinitions rules = null;
RuleSetCollection ruleSetCollection = null;
CompositeActivity declaringActivity = Helpers.GetDeclaringActivity(activity);
if (declaringActivity == null)
{
declaringActivity = Helpers.GetRootActivity(activity) as CompositeActivity;
}
if (activity.Site != null)
rules = ConditionHelper.Load_Rules_DT(activity.Site, declaringActivity);
else
rules = ConditionHelper.Load_Rules_RT(declaringActivity);
if (rules != null)
ruleSetCollection = rules.RuleSets;
if (ruleSetCollection == null || !ruleSetCollection.Contains(ruleSetReference.RuleSetName))
{
string message = string.Format(CultureInfo.CurrentCulture, Messages.RuleSetNotFound, ruleSetReference.RuleSetName);
ValidationError validationError = new ValidationError(message, ErrorNumbers.Error_RuleSetNotFound);
validationError.PropertyName = GetFullPropertyName(manager) + "." + "RuleSetName";
validationErrors.Add(validationError);
}
else
{
RuleSet actualRuleSet = ruleSetCollection[ruleSetReference.RuleSetName];
ITypeProvider typeProvider = (ITypeProvider)manager.GetService(typeof(ITypeProvider));
IDisposable localContextScope = (WorkflowCompilationContext.Current == null ? WorkflowCompilationContext.CreateScope(manager) : null);
try
{
RuleValidation validation = new RuleValidation(activity, typeProvider, WorkflowCompilationContext.Current.CheckTypes);
actualRuleSet.Validate(validation);
ValidationErrorCollection actualRuleSetErrors = validation.Errors;
if (actualRuleSetErrors.Count > 0)
{
string expressionPropertyName = GetFullPropertyName(manager);
string genericErrorMsg = string.Format(CultureInfo.CurrentCulture, Messages.InvalidRuleSetExpression, expressionPropertyName);
int errorNumber = ErrorNumbers.Error_InvalidRuleSetExpression;
if (activity.Site != null)
{
foreach (ValidationError actualError in actualRuleSetErrors)
{
ValidationError validationError = new ValidationError(actualError.ErrorText, errorNumber);
validationError.PropertyName = expressionPropertyName + "." + "RuleSet Definition";
validationErrors.Add(validationError);
}
}
else
{
foreach (ValidationError actualError in actualRuleSetErrors)
{
ValidationError validationError = new ValidationError(genericErrorMsg + " " + actualError.ErrorText, errorNumber);
validationError.PropertyName = expressionPropertyName;
validationErrors.Add(validationError);
}
}
}
//
}
finally
{
if (localContextScope != null)
{
localContextScope.Dispose();
}
}
}
}
else
{
string message = string.Format(CultureInfo.CurrentCulture, Messages.InvalidRuleSetName, "RuleSetReference");
ValidationError validationError = new ValidationError(message, ErrorNumbers.Error_InvalidRuleSetName);
validationError.PropertyName = GetFullPropertyName(manager) + "." + "RuleSetName";
validationErrors.Add(validationError);
}
return validationErrors;
}
}
#endregion
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebBrowsableAttribute.cs
- SmtpReplyReaderFactory.cs
- AdornerDecorator.cs
- BitmapSizeOptions.cs
- NativeMethods.cs
- TableLayoutPanelCellPosition.cs
- WpfWebRequestHelper.cs
- TextDecoration.cs
- GridView.cs
- PreDigestedSignedInfo.cs
- DocumentPageTextView.cs
- EastAsianLunisolarCalendar.cs
- BamlRecordReader.cs
- RotateTransform.cs
- RoutedEventValueSerializer.cs
- DefaultAuthorizationContext.cs
- ViewgenContext.cs
- TextMessageEncodingBindingElement.cs
- DataGridViewToolTip.cs
- NavigationService.cs
- TargetControlTypeAttribute.cs
- DynamicQueryableWrapper.cs
- DataSourceHelper.cs
- XmlElementAttributes.cs
- DbProviderSpecificTypePropertyAttribute.cs
- XmlQueryCardinality.cs
- Int64AnimationUsingKeyFrames.cs
- RouteUrlExpressionBuilder.cs
- PropertyPathWorker.cs
- GeneratedView.cs
- Pair.cs
- ImageBrush.cs
- DoubleCollection.cs
- DropDownButton.cs
- LogReserveAndAppendState.cs
- QilCloneVisitor.cs
- New.cs
- IntSecurity.cs
- QueryContinueDragEventArgs.cs
- BasicHttpMessageSecurityElement.cs
- TextServicesContext.cs
- MarkerProperties.cs
- Html32TextWriter.cs
- ReadOnlyPropertyMetadata.cs
- ImageListUtils.cs
- BaseDataList.cs
- XmlSerializationGeneratedCode.cs
- XPathArrayIterator.cs
- MulticastOption.cs
- FlowDocumentPageViewerAutomationPeer.cs
- Version.cs
- AsymmetricSignatureDeformatter.cs
- SpecialFolderEnumConverter.cs
- GenerateHelper.cs
- PropertyGroupDescription.cs
- WindowManager.cs
- DateTimeFormatInfoScanner.cs
- EmptyQuery.cs
- WebPartAddingEventArgs.cs
- CompilerGeneratedAttribute.cs
- ObjectDataSourceFilteringEventArgs.cs
- NotCondition.cs
- DataGridViewRowPostPaintEventArgs.cs
- StylusPointPropertyInfoDefaults.cs
- SessionState.cs
- EnterpriseServicesHelper.cs
- ContainerParaClient.cs
- SafeArrayTypeMismatchException.cs
- ToolStripMenuItem.cs
- BlockUIContainer.cs
- processwaithandle.cs
- LinkLabel.cs
- HitTestResult.cs
- DataSetViewSchema.cs
- IndentTextWriter.cs
- MultipartIdentifier.cs
- StylusDownEventArgs.cs
- SmtpReplyReader.cs
- SineEase.cs
- SqlDataRecord.cs
- PointConverter.cs
- CompilerCollection.cs
- path.cs
- DrawingContextDrawingContextWalker.cs
- ZipPackage.cs
- Button.cs
- KeyEvent.cs
- TextEditorContextMenu.cs
- ControlEvent.cs
- CacheMemory.cs
- XmlNotation.cs
- ToolStripContentPanel.cs
- HttpApplicationStateBase.cs
- GCHandleCookieTable.cs
- ProjectionCamera.cs
- DataGridViewCellValueEventArgs.cs
- Point4D.cs
- DelegatedStream.cs
- TextContainer.cs
- AutomationAttributeInfo.cs