Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / Shared / ValidationHelpers.cs / 1305376 / ValidationHelpers.cs
// Copyright (c) Microsoft Corporation. All rights reserved. // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, // WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. // THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE // AND INFORMATION REMAINS WITH THE USER. /********************************************************************** * NOTE: A copy of this file exists at: WF\Activities\Common * The two files must be kept in [....]. Any change made here must also * be made to WF\Activities\Common\ValidationHelpers.cs *********************************************************************/ namespace System.Workflow.ComponentModel.Compiler { #region Imports using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.CodeDom.Compiler; using System.Workflow.ComponentModel.Design; using System.Workflow.ComponentModel.Compiler; using System.Collections.Specialized; using System.ComponentModel.Design.Serialization; #endregion internal static class ValidationHelpers { #region Validation & helpers for ID and Type internal static void ValidateIdentifier(IServiceProvider serviceProvider, string identifier) { if (serviceProvider == null) throw new ArgumentNullException("serviceProvider"); SupportedLanguages language = CompilerHelpers.GetSupportedLanguage(serviceProvider); CodeDomProvider provider = CompilerHelpers.GetCodeDomProvider(language); if (language == SupportedLanguages.CSharp && identifier.StartsWith("@", StringComparison.Ordinal) || language == SupportedLanguages.VB && identifier.StartsWith("[", StringComparison.Ordinal) && identifier.EndsWith("]", StringComparison.Ordinal) || !provider.IsValidIdentifier(identifier)) { throw new Exception(SR.GetString(SR.Error_InvalidLanguageIdentifier, identifier)); } } internal static ValidationError ValidateIdentifier(string propName, IServiceProvider context, string identifier) { if (context == null) throw new ArgumentNullException("context"); ValidationError error = null; if (identifier == null || identifier.Length == 0) error = new ValidationError(SR.GetString(SR.Error_PropertyNotSet, propName), ErrorNumbers.Error_PropertyNotSet); else { try { ValidationHelpers.ValidateIdentifier(context, identifier); } catch(Exception e) { error = new ValidationError(SR.GetString(SR.Error_InvalidIdentifier, propName, e.Message), ErrorNumbers.Error_InvalidIdentifier); } } if(error != null) error.PropertyName = propName; return error; } internal static ValidationError ValidateNameProperty(string propName, IServiceProvider context, string identifier) { if (context == null) throw new ArgumentNullException("context"); ValidationError error = null; if (identifier == null || identifier.Length == 0) error = new ValidationError(SR.GetString(SR.Error_PropertyNotSet, propName), ErrorNumbers.Error_PropertyNotSet); else { SupportedLanguages language = CompilerHelpers.GetSupportedLanguage(context); CodeDomProvider provider = CompilerHelpers.GetCodeDomProvider(language); if (language == SupportedLanguages.CSharp && identifier.StartsWith("@", StringComparison.Ordinal) || language == SupportedLanguages.VB && identifier.StartsWith("[", StringComparison.Ordinal) && identifier.EndsWith("]", StringComparison.Ordinal) || !provider.IsValidIdentifier(provider.CreateEscapedIdentifier(identifier))) { error = new ValidationError(SR.GetString(SR.Error_InvalidIdentifier, propName, SR.GetString(SR.Error_InvalidLanguageIdentifier, identifier)), ErrorNumbers.Error_InvalidIdentifier); } } if (error != null) error.PropertyName = propName; return error; } internal static ValidationErrorCollection ValidateUniqueIdentifiers(Activity rootActivity) { if (rootActivity == null) throw new ArgumentNullException("rootActivity"); Hashtable identifiers = new Hashtable(); ValidationErrorCollection validationErrors = new ValidationErrorCollection(); Queue activities = new Queue(); activities.Enqueue(rootActivity); while (activities.Count > 0) { Activity activity = (Activity)activities.Dequeue(); if (activity.Enabled) { if (identifiers.ContainsKey(activity.QualifiedName)) { ValidationError duplicateError = new ValidationError(SR.GetString(SR.Error_DuplicatedActivityID, activity.QualifiedName), ErrorNumbers.Error_DuplicatedActivityID); duplicateError.PropertyName = "Name"; duplicateError.UserData[typeof(Activity)] = activity; validationErrors.Add(duplicateError); } else identifiers.Add(activity.QualifiedName, activity); if (activity is CompositeActivity && ((activity.Parent == null) || !Helpers.IsCustomActivity(activity as CompositeActivity))) { foreach (Activity child in Helpers.GetAllEnabledActivities((CompositeActivity)activity)) activities.Enqueue(child); } } } return validationErrors; } #endregion #region Validation for Activity Ref order internal static bool IsActivitySourceInOrder(Activity request, Activity response) { if (request.Parent == null) return true; ListresponsePath = new List (); responsePath.Add(response); Activity responseParent = response is CompositeActivity ? (CompositeActivity)response : response.Parent; while (responseParent != null) { responsePath.Add(responseParent); responseParent = responseParent.Parent; } Activity requestChild = request; CompositeActivity requestParent = request is CompositeActivity ? (CompositeActivity)request : request.Parent; while (requestParent != null && !responsePath.Contains(requestParent)) { requestChild = requestParent; requestParent = requestParent.Parent; } if (requestParent == requestChild) return true; bool incorrectOrder = false; int index = (responsePath.IndexOf(requestParent) - 1); index = (index < 0) ? 0 : index;//sometimes parent gets added to the collection twice which causes index to be -1 Activity responseChild = responsePath[index]; if (requestParent == null || Helpers.IsAlternateFlowActivity(requestChild) || Helpers.IsAlternateFlowActivity(responseChild)) incorrectOrder = true; else { for (int i = 0; i < requestParent.EnabledActivities.Count; i++) { if (requestParent.EnabledActivities[i] == requestChild) break; else if (requestParent.EnabledActivities[i] == responseChild) { incorrectOrder = true; break; } } } return !incorrectOrder; } #endregion internal static ValidationErrorCollection ValidateObject(ValidationManager manager, object obj) { ValidationErrorCollection errors = new ValidationErrorCollection(); if (obj == null) return errors; Type objType = obj.GetType(); if (!objType.IsPrimitive && (objType != typeof(string))) { bool removeValidatedObjectCollection = false; Dictionary validatedObjects = manager.Context[typeof(Dictionary )] as Dictionary ; if (validatedObjects == null) { validatedObjects = new Dictionary (); manager.Context.Push(validatedObjects); removeValidatedObjectCollection = true; } try { if (!validatedObjects.ContainsKey(obj.GetHashCode())) { validatedObjects.Add(obj.GetHashCode(), obj); try { Validator[] validators = manager.GetValidators(objType); foreach (Validator validator in validators) errors.AddRange(validator.Validate(manager, obj)); } finally { validatedObjects.Remove(obj.GetHashCode()); } } } finally { if (removeValidatedObjectCollection) manager.Context.Pop(); } } return errors; } internal static ValidationErrorCollection ValidateActivity(ValidationManager manager, Activity activity) { ValidationErrorCollection errors = ValidationHelpers.ValidateObject(manager, activity); foreach (ValidationError error in errors) { if (!error.UserData.Contains(typeof(Activity))) error.UserData[typeof(Activity)] = activity; } return errors; } internal static ValidationErrorCollection ValidateProperty(ValidationManager manager, Activity activity, object obj, PropertyValidationContext propertyValidationContext) { return ValidateProperty(manager, activity, obj, propertyValidationContext, null); } internal static ValidationErrorCollection ValidateProperty(ValidationManager manager, Activity activity, object obj, PropertyValidationContext propertyValidationContext, object extendedPropertyContext) { if (manager == null) throw new ArgumentNullException("manager"); if (obj == null) throw new ArgumentNullException("obj"); if (propertyValidationContext == null) throw new ArgumentNullException("propertyValidationContext"); ValidationErrorCollection errors = new ValidationErrorCollection(); manager.Context.Push(activity); manager.Context.Push(propertyValidationContext); if (extendedPropertyContext != null) manager.Context.Push(extendedPropertyContext); try { errors.AddRange(ValidationHelpers.ValidateObject(manager, obj)); } finally { manager.Context.Pop(); manager.Context.Pop(); if (extendedPropertyContext != null) manager.Context.Pop(); } return errors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ArgumentDesigner.xaml.cs
- NonBatchDirectoryCompiler.cs
- EventArgs.cs
- UniqueConstraint.cs
- Point3DCollectionValueSerializer.cs
- ValueExpressions.cs
- SystemMulticastIPAddressInformation.cs
- FontUnit.cs
- RemoteCryptoRsaServiceProvider.cs
- ReliableReplySessionChannel.cs
- TdsParserHelperClasses.cs
- IDictionary.cs
- StreamInfo.cs
- AbstractExpressions.cs
- ServiceObjectContainer.cs
- TypedColumnHandler.cs
- StringToken.cs
- ServerIdentity.cs
- MatrixStack.cs
- ParseHttpDate.cs
- PersonalizablePropertyEntry.cs
- LayoutTable.cs
- DataGridViewRow.cs
- FunctionParameter.cs
- ColorConvertedBitmapExtension.cs
- FixedSOMFixedBlock.cs
- SimpleWorkerRequest.cs
- PointHitTestParameters.cs
- Funcletizer.cs
- StringFormat.cs
- DataGridViewRowsAddedEventArgs.cs
- DatePicker.cs
- ControlBuilderAttribute.cs
- ControlType.cs
- AdornerHitTestResult.cs
- DebuggerAttributes.cs
- IOException.cs
- StylusPointCollection.cs
- SamlConstants.cs
- Cursors.cs
- IMembershipProvider.cs
- BaseHashHelper.cs
- CommonGetThemePartSize.cs
- XPathException.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- XmlSerializerOperationBehavior.cs
- Propagator.JoinPropagator.cs
- EntityWithChangeTrackerStrategy.cs
- SmiConnection.cs
- AssemblyCollection.cs
- Html32TextWriter.cs
- ControllableStoryboardAction.cs
- ClassGenerator.cs
- XmlText.cs
- GrammarBuilder.cs
- SecurityCriticalDataForSet.cs
- ResourceReferenceExpression.cs
- XsdValidatingReader.cs
- HtmlShim.cs
- PointLightBase.cs
- COM2Enum.cs
- OrthographicCamera.cs
- Misc.cs
- CryptoStream.cs
- CompositeScriptReference.cs
- IntMinMaxAggregationOperator.cs
- Image.cs
- ObjectManager.cs
- DataColumnMappingCollection.cs
- WebResourceUtil.cs
- HwndSourceParameters.cs
- SecUtil.cs
- FileStream.cs
- CodeTypeReferenceSerializer.cs
- XmlObjectSerializerReadContextComplex.cs
- IteratorFilter.cs
- Rule.cs
- MouseEventArgs.cs
- ByteKeyFrameCollection.cs
- UidManager.cs
- FileEnumerator.cs
- ReadOnlyHierarchicalDataSourceView.cs
- Clock.cs
- AsyncOperation.cs
- EventLogQuery.cs
- DataGridItemEventArgs.cs
- DataGridViewCheckBoxColumn.cs
- ActiveXHost.cs
- DriveInfo.cs
- DataGridViewDataConnection.cs
- XmlSchemaComplexContentExtension.cs
- FormViewInsertedEventArgs.cs
- XmlTextWriter.cs
- ClientSettingsProvider.cs
- MdiWindowListItemConverter.cs
- CallInfo.cs
- CanonicalXml.cs
- SimpleFieldTemplateFactory.cs
- TokenBasedSet.cs
- ActionMessageFilterTable.cs