public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
        {
            CompositeActivity compositeActivity = obj as CompositeActivity;

            if (compositeActivity == null)
            {
                throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(CompositeActivity).FullName), "obj");
            }
            if (Helpers.IsActivityLocked(compositeActivity))
            {
                return(new ValidationErrorCollection());
            }

            ValidationErrorCollection validationErrors = base.Validate(manager, obj);

            // check if more than one cancellation handler or compensation or fault handlers are specified
            int cancelHandlerCount       = 0;
            int exceptionHandlersCount   = 0;
            int compensationHandlerCount = 0;

            foreach (Activity activity in ((ISupportAlternateFlow)compositeActivity).AlternateFlowActivities)
            {
                cancelHandlerCount       += (activity is CancellationHandlerActivity) ? 1 : 0;
                exceptionHandlersCount   += (activity is FaultHandlersActivity) ? 1 : 0;
                compensationHandlerCount += (activity is CompensationHandlerActivity) ? 1 : 0;
            }
            // check cancellation handlers
            if (cancelHandlerCount > 1)
            {
                validationErrors.Add(new ValidationError(SR.GetString(SR.Error_MoreThanOneCancelHandler, compositeActivity.GetType().Name), ErrorNumbers.Error_ScopeMoreThanOneEventHandlersDecl));
            }

            // check exception handlers
            if (exceptionHandlersCount > 1)
            {
                validationErrors.Add(new ValidationError(SR.GetString(SR.Error_MoreThanOneFaultHandlersActivityDecl, compositeActivity.GetType().Name), ErrorNumbers.Error_ScopeMoreThanOneFaultHandlersActivityDecl));
            }

            // check compensation handlers
            if (compensationHandlerCount > 1)
            {
                validationErrors.Add(new ValidationError(SR.GetString(SR.Error_MoreThanOneCompensationDecl, compositeActivity.GetType().Name), ErrorNumbers.Error_ScopeMoreThanOneCompensationDecl));
            }


            if (manager.ValidateChildActivities)
            {
                foreach (Activity childActivity in Helpers.GetAllEnabledActivities(compositeActivity))
                {
                    validationErrors.AddRange(ValidationHelpers.ValidateActivity(manager, childActivity));
                }
            }
            return(validationErrors);
        }
Exemple #2
0
        public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
        {
            CompositeActivity activity = obj as CompositeActivity;

            if (activity == null)
            {
                throw new ArgumentException(SR.GetString("Error_UnexpectedArgumentType", new object[] { typeof(CompositeActivity).FullName }), "obj");
            }
            if (Helpers.IsActivityLocked(activity))
            {
                return(new ValidationErrorCollection());
            }
            ValidationErrorCollection errors = base.Validate(manager, obj);
            int num  = 0;
            int num2 = 0;
            int num3 = 0;

            foreach (Activity activity2 in ((ISupportAlternateFlow)activity).AlternateFlowActivities)
            {
                num  += (activity2 is CancellationHandlerActivity) ? 1 : 0;
                num2 += (activity2 is FaultHandlersActivity) ? 1 : 0;
                num3 += (activity2 is CompensationHandlerActivity) ? 1 : 0;
            }
            if (num > 1)
            {
                errors.Add(new ValidationError(SR.GetString("Error_MoreThanOneCancelHandler", new object[] { activity.GetType().Name }), 0x527));
            }
            if (num2 > 1)
            {
                errors.Add(new ValidationError(SR.GetString("Error_MoreThanOneFaultHandlersActivityDecl", new object[] { activity.GetType().Name }), 0x52a));
            }
            if (num3 > 1)
            {
                errors.Add(new ValidationError(SR.GetString("Error_MoreThanOneCompensationDecl", new object[] { activity.GetType().Name }), 0x52b));
            }
            if (manager.ValidateChildActivities)
            {
                foreach (Activity activity3 in Helpers.GetAllEnabledActivities(activity))
                {
                    errors.AddRange(ValidationHelpers.ValidateActivity(manager, activity3));
                }
            }
            return(errors);
        }