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
- Convert.cs
- SqlXml.cs
- ServiceOperationInvoker.cs
- PropertyCollection.cs
- MemberMaps.cs
- UITypeEditor.cs
- DetailsViewInsertedEventArgs.cs
- LogWriteRestartAreaAsyncResult.cs
- XmlAtomicValue.cs
- SessionStateItemCollection.cs
- DocumentsTrace.cs
- ObjectStateManager.cs
- Lasso.cs
- ValidatedMobileControlConverter.cs
- HiddenFieldPageStatePersister.cs
- GeneralTransform3DGroup.cs
- WebPartHelpVerb.cs
- ControlTemplate.cs
- ContainerControl.cs
- SecurityChannelFaultConverter.cs
- ArgumentOutOfRangeException.cs
- ResourceReferenceKeyNotFoundException.cs
- X509CertificateChain.cs
- KeyPressEvent.cs
- TableDesigner.cs
- HScrollBar.cs
- AuthorizationRuleCollection.cs
- SimpleWorkerRequest.cs
- RuntimeConfig.cs
- HttpsHostedTransportConfiguration.cs
- UserPreferenceChangedEventArgs.cs
- StateElement.cs
- InputLanguageCollection.cs
- XmlSortKeyAccumulator.cs
- Mutex.cs
- SQLDateTime.cs
- EntityUtil.cs
- arabicshape.cs
- TabControlCancelEvent.cs
- KnownIds.cs
- VectorCollection.cs
- MDIControlStrip.cs
- x509store.cs
- OciEnlistContext.cs
- LinkButton.cs
- PolygonHotSpot.cs
- ConsumerConnectionPointCollection.cs
- ProgressBarRenderer.cs
- ConnectionsZone.cs
- NegotiateStream.cs
- AttributeSetAction.cs
- OleDbStruct.cs
- shaperfactory.cs
- XmlCodeExporter.cs
- WebPartConnectionsDisconnectVerb.cs
- SchemaDeclBase.cs
- Expander.cs
- DisplayNameAttribute.cs
- InheritablePropertyChangeInfo.cs
- templategroup.cs
- QualifiedId.cs
- SchemaCollectionCompiler.cs
- Transaction.cs
- AsymmetricSignatureDeformatter.cs
- ToolStrip.cs
- NavigationExpr.cs
- ImageList.cs
- BatchWriter.cs
- ProfilePropertyNameValidator.cs
- DocumentSequence.cs
- TrackBarRenderer.cs
- TimelineGroup.cs
- WebPermission.cs
- TextSelectionHelper.cs
- XmlDataSource.cs
- MaskedTextBox.cs
- StylusLogic.cs
- LabelLiteral.cs
- ObjectItemNoOpAssemblyLoader.cs
- ParserOptions.cs
- AuthenticationService.cs
- NonBatchDirectoryCompiler.cs
- WebPartManagerInternals.cs
- ProcessModelInfo.cs
- PropertyGridView.cs
- ItemList.cs
- BindingMemberInfo.cs
- PageAsyncTaskManager.cs
- QueryOperationResponseOfT.cs
- XmlSchemaSimpleTypeUnion.cs
- DesignConnection.cs
- XmlNullResolver.cs
- ThreadExceptionDialog.cs
- DataSourceSelectArguments.cs
- ControlEvent.cs
- XmlWriterDelegator.cs
- hwndwrapper.cs
- WebOperationContext.cs
- HandlerMappingMemo.cs
- __ComObject.cs