예제 #1
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;

            if (IsCompensationBoundaryEvent(sourceActivity))
            {
                return;
            }

            var sourceEventScope = (ScopeImpl)instruction.SourceActivity.EventScope;
            var targetEventScope = (ScopeImpl)instruction.TargetActivity.EventScope;

            if ((sourceEventScope == null) || (sourceEventScope == sourceActivity.FlowScope))
            {
                return;
            }

            if (targetEventScope == null)
            {
                report.AddFailure("The source activity's event scope (" + sourceEventScope.Id +
                                  ") must be mapped but the " + "target activity has no event scope");
            }
            else
            {
                var mappedSourceEventScope = FindMappedEventScope(sourceEventScope, instruction, instructions);
                if ((mappedSourceEventScope == null) || !mappedSourceEventScope.Id.Equals(targetEventScope.Id))
                {
                    report.AddFailure("The source activity's event scope (" + sourceEventScope.Id + ") " +
                                      "must be mapped to the target activity's event scope (" + targetEventScope.Id +
                                      ")");
                }
            }
        }
예제 #2
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;

            if (sourceActivity.ActivityBehavior is IConditionalEventBehavior && !instruction.UpdateEventTrigger)
            {
                report.AddFailure(MigrationConditionalValidationErrorMsg);
            }
        }
예제 #3
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            IPvmScope sourceActivity = instruction.SourceActivity;
            var       instructionsForSourceActivity = instructions.GetInstructionsBySourceScope(sourceActivity);

            if (instructionsForSourceActivity.Count > 1)
            {
//addFailure(sourceActivity.Id, instructionsForSourceActivity, report);
            }
        }
예제 #4
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;

            if (instruction.UpdateEventTrigger && !DefinesPersistentEventTrigger(sourceActivity))
            {
                report.AddFailure(
                    "Cannot update event trigger because the activity does not define a persistent event trigger");
            }
        }
예제 #5
0
        protected internal virtual void ValidateSingleInstruction(IValidatingMigrationInstruction instruction,
                                                                  ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var targetActivity = instruction.TargetActivity;
            var instructionsToTargetGateway = instructions.GetInstructionsByTargetScope(targetActivity);

            if (instructionsToTargetGateway.Count > 1)
            {
                report.AddFailure("Only one gateway can be mapped to gateway '" + targetActivity.Id + "'");
            }
        }
예제 #6
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            ActivityImpl targetActivity = (ActivityImpl)instruction.TargetActivity;

            if (IsWaitStateGateway(targetActivity))
            {
                ValidateIncomingSequenceFlows(instruction, instructions, report);
                ValidateParentScopeMigrates(instruction, instructions, report);
                ValidateSingleInstruction(instruction, instructions, report);
            }
        }
        protected internal virtual MigrationInstructionValidationReportImpl ValidateInstruction(
            IValidatingMigrationInstruction instruction, ValidatingMigrationInstructions instructions,
            IList <IMigrationInstructionValidator> migrationInstructionValidators)
        {
            var validationReport = new MigrationInstructionValidationReportImpl(instruction.ToMigrationInstruction());

            foreach (var migrationInstructionValidator in migrationInstructionValidators)
            {
                migrationInstructionValidator.Validate(instruction, instructions, validationReport);
            }
            return(validationReport);
        }
        public virtual void Validate(IValidatingMigrationInstruction instruction,
            ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;
            var targetActivity = instruction.TargetActivity;

            var sourceBehaviorClass = sourceActivity.ActivityBehavior.GetType();
            var targetBehaviorClass = targetActivity.ActivityBehavior.GetType();

            if (!SameBehavior(sourceBehaviorClass, targetBehaviorClass))
                report.AddFailure("Activities have incompatible types " + "(" + sourceBehaviorClass.Name +
                                  " is not compatible with " + targetBehaviorClass.Name + ")");
        }
예제 #9
0
        protected internal virtual void ValidateParentScopeMigrates(IValidatingMigrationInstruction instruction,
                                                                    ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;
            var flowScope      = sourceActivity.FlowScope;

            if (flowScope != flowScope.ProcessDefinition)
            {
                if (instructions.GetInstructionsBySourceScope(flowScope).Count == 0)
                {
                    report.AddFailure("The gateway's flow scope '" + flowScope.Id + "' must be mapped");
                }
            }
        }
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            ActivityImpl targetActivity = (ActivityImpl)instruction.TargetActivity;

            if (IsMultiInstance(targetActivity))
            {
                var innerActivity = GetInnerActivity(targetActivity);

                if (instructions.GetInstructionsByTargetScope(innerActivity).Count == 0)
                {
                    report.AddFailure("Must map the inner activity of a multi-instance body when the body is mapped");
                }
            }
        }
예제 #11
0
        protected internal virtual void ValidateIncomingSequenceFlows(IValidatingMigrationInstruction instruction,
                                                                      ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;
            var targetActivity = instruction.TargetActivity;

            var numSourceIncomingFlows = sourceActivity.IncomingTransitions.Count;
            var numTargetIncomingFlows = targetActivity.IncomingTransitions.Count;

            if (numSourceIncomingFlows > numTargetIncomingFlows)
            {
                report.AddFailure("The target gateway must have at least the same number " +
                                  "of incoming sequence flows that the source gateway has");
            }
        }
예제 #12
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            ActivityImpl sourceActivity = (ActivityImpl)instruction.SourceActivity;

            if (IsMultiInstance(sourceActivity))
            {
                var innerActivity = GetInnerActivity(sourceActivity);

                if (instructions.GetInstructionsBySourceScope(innerActivity).Count == 0)
                {
                    report.AddFailure(
                        "Cannot remove the inner activity of a multi-instance body when the body is mapped");
                }
            }
        }
        protected internal virtual IValidatingMigrationInstruction GetClosestPreservedAncestorScopeMigrationInstruction(
            IValidatingMigrationInstruction instruction, ValidatingMigrationInstructions instructions)
        {
            var parent = instruction.SourceActivity.FlowScope;

            while ((parent != null) && (instructions.GetInstructionsBySourceScope(parent).Count == 0))
            {
                parent = parent.FlowScope;
            }

            if (parent != null)
            {
                return(instructions.GetInstructionsBySourceScope(parent)[0]);
            }
            return(null);
        }
예제 #14
0
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var sourceActivity = instruction.SourceActivity;
            var targetActivity = instruction.TargetActivity;

            if (IsEvent((ActivityImpl)sourceActivity) && IsEvent((ActivityImpl)targetActivity))
            {
                var sourceType = sourceActivity.Properties.Get(BpmnProperties.Type);
                var targetType = targetActivity.Properties.Get(BpmnProperties.Type);

                if (!sourceType.Equals(targetType))
                {
                    report.AddFailure("Events are not of the same type (" + sourceType + " != " + targetType + ")");
                }
            }
        }
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var ancestorScopeInstruction = GetClosestPreservedAncestorScopeMigrationInstruction(instruction,
                                                                                                instructions);
            ScopeImpl targetScope = (ScopeImpl)instruction.TargetActivity;

            if ((ancestorScopeInstruction != null) && (targetScope != null) &&
                (targetScope != targetScope.ProcessDefinition))
            {
                ScopeImpl parentInstanceTargetScope = (ScopeImpl)ancestorScopeInstruction.TargetActivity;
                if ((parentInstanceTargetScope != null) && !parentInstanceTargetScope.IsAncestorFlowScopeOf(targetScope))
                {
                    report.AddFailure("The closest mapped ancestor '" + ancestorScopeInstruction.SourceActivity.Id +
                                      "' is mapped to scope '" + parentInstanceTargetScope.Id +
                                      "' which is not an ancestor of target scope '" + targetScope.Id + "'");
                }
            }
        }
예제 #16
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: @Override public void validate(ValidatingMigrationInstruction instruction, final ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        public virtual void Validate(IValidatingMigrationInstruction instruction,
                                     ValidatingMigrationInstructions instructions, MigrationInstructionValidationReportImpl report)
        {
            var targetActivity = instruction.TargetActivity;

            var flowScopeWalker = new FlowScopeWalker(targetActivity.FlowScope);
            var miBodyCollector = new MiBodyCollector();

            flowScopeWalker.AddPreVisitor(miBodyCollector);

            // walk until a target scope is found that is mapped
            //flowScopeWalker.walkWhile(new WalkConditionAnonymousInnerClass(this, instructions));

            if (miBodyCollector.FirstMiBody != null)
            {
                report.AddFailure("Target activity '" + targetActivity.Id + "' is a descendant of multi-instance body '" +
                                  miBodyCollector.FirstMiBody.Id +
                                  "' that is not mapped from the source process definition.");
            }
        }
예제 #17
0
 protected internal virtual IPvmScope FindMappedEventScope(ScopeImpl sourceEventScope,
                                                           IValidatingMigrationInstruction instruction, ValidatingMigrationInstructions instructions)
 {
     if (sourceEventScope != null)
     {
         if (sourceEventScope == sourceEventScope.ProcessDefinition)
         {
             return((ScopeImpl)instruction.TargetActivity.ProcessDefinition);
         }
         var eventScopeInstructions = instructions.GetInstructionsBySourceScope(sourceEventScope);
         if (eventScopeInstructions.Count > 0)
         {
             return(eventScopeInstructions[0].TargetActivity);
         }
     }
     return(null);
 }
 protected internal virtual bool IsValidInstruction(IValidatingMigrationInstruction instruction,
                                                    ValidatingMigrationInstructions instructions,
                                                    IList <IMigrationInstructionValidator> migrationInstructionValidators)
 {
     return(!ValidateInstruction(instruction, instructions, migrationInstructionValidators).HasFailures());
 }