Пример #1
0
        private static bool ValidateLongTime(EdiSimpleDataElement el, MapSimpleDataElement definition)
        {
            if (string.IsNullOrEmpty(el.Val))
            {
                return(IsOptional(el.Val, definition));
            }

            switch (el.Val.Length)
            {
            case 4:
                return(ValidateShortTime(el, definition));

            case 5:
                return(el.Val.IsValidDateTimeString("HHmms"));

            case 6:
                return(el.Val.IsValidDateTimeString("HHmmss"));

            case 7:
                return(el.Val.IsValidDateTimeString("HHmmssf"));

            case 8:
                return(el.Val.IsValidDateTimeString("HHmmssff"));

            default:
                throw new NotSupportedException($"Time validation with length {el.Val.Length} is not implemented. {el.Type}");
            }
        }
Пример #2
0
        public void Validation_MandatoryDateTimeTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.DT,
                ReqDes    = RequirementDesignator.Mandatory,
                MinLength = 6,
                MaxLength = 6,
            };

            EAny def2 = new EAny()
            {
                DataType  = DataType.TM,
                ReqDes    = RequirementDesignator.Mandatory,
                MinLength = 4,
                MaxLength = 8,
            };

            var el = new EdiSimpleDataElement(def, "");

            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, null);
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def2, "");
            Assert.IsFalse(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, null);
            Assert.IsFalse(el.IsValid(def2));
        }
Пример #3
0
        public void Validation_OptionalDateTimeTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.DT,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 6,
                MaxLength = 6,
            };

            EAny def2 = new EAny()
            {
                DataType  = DataType.DT,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 8,
                MaxLength = 8,
            };

            EAny def3 = new EAny()
            {
                DataType  = DataType.TM,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 4,
                MaxLength = 4,
            };

            var el = new EdiSimpleDataElement(def, "160102");

            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "125566");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "");
            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def2, "20160102");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "22125566");
            Assert.IsFalse(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def3, "1122");
            Assert.IsTrue(el.IsValid(def3));

            el = new EdiSimpleDataElement(def3, "4567");
            Assert.IsFalse(el.IsValid(def3));

            el = new EdiSimpleDataElement(def3, "");
            Assert.IsTrue(el.IsValid(def3));

            el = new EdiSimpleDataElement(def3, "1526");
            Assert.IsTrue(el.IsValid(def3));
        }
Пример #4
0
        private static bool ValidateShortDate(EdiSimpleDataElement el, MapSimpleDataElement definition)
        {
            if (string.IsNullOrEmpty(el.Val))
            {
                return(IsOptional(el.Val, definition));
            }

            return(el.Val.IsValidDateTimeString("yyMMdd"));
        }
Пример #5
0
        public void Validation_NumericTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.N0,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 3,
                MaxLength = 6,
            };

            EAny def2 = new EAny()
            {
                DataType  = DataType.N1,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 3,
                MaxLength = 6,
            };

            EAny def3 = new EAny()
            {
                DataType  = DataType.R,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 3,
                MaxLength = 6,
            };

            var el = new EdiSimpleDataElement(def, "123");

            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "12c");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "");
            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def2, "123");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "12c");
            Assert.IsFalse(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def3, "123.23");
            Assert.IsTrue(el.IsValid(def3));

            el = new EdiSimpleDataElement(def3, "1233c");
            Assert.IsFalse(el.IsValid(def3));

            el = new EdiSimpleDataElement(def3, "");
            Assert.IsTrue(el.IsValid(def3));
        }
Пример #6
0
 private static void ValidateSimpleDataElement(EdiSimpleDataElement el, string segName, int segPos, int elPos, IValidatedEntity validationScope)
 {
     if (el.Definition == null)
     {
         AddError(segName, segPos, elPos, $"Unexpected element '{el.Val}'", validationScope);
     }
     else if (el.Definition != null && !el.IsValid(el.Definition))
     {
         AddError(segName, segPos, elPos, $"Invalid value '{el.Val}'", validationScope);
     }
 }
Пример #7
0
        public void Validation_BinaryTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.B,
                MinLength = 1,
                MaxLength = 100,
                ReqDes    = RequirementDesignator.Optional
            };

            var el = new EdiSimpleDataElement(def, "!@#@$$@$!");

            Assert.IsTrue(el.IsValid(def));
        }
Пример #8
0
        public void Validation_OptionalTimeTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.TM,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 4,
                MaxLength = 4,
            };

            EAny def2 = new EAny()
            {
                DataType  = DataType.TM,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 4,
                MaxLength = 8,
            };

            var el = new EdiSimpleDataElement(def, "1122");

            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "4567");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "");
            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "1526");
            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "152605");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def2, "0105");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "101525");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "1105355");
            Assert.IsTrue(el.IsValid(def2));

            el = new EdiSimpleDataElement(def2, "11053559");
            Assert.IsTrue(el.IsValid(def2));
        }
Пример #9
0
        private static void ProcessComposite(EdiCompositeDataElement composite, string [] content)
        {
            int i = 0;

            foreach (string val in content)
            {
                MapSimpleDataElement elDef = null;
                if (i < composite.Definition.Content.Count)
                {
                    elDef = composite.Definition.Content[i];
                }

                EdiSimpleDataElement el = new EdiSimpleDataElement(elDef, val);
                composite.Content.Add(el);

                i++;
            }
        }
Пример #10
0
        public static EdiSegment ProcessSegment(MapBaseEntity definition, string[] content, int rowPos, string compositeSeparator, IValidatedEntity validationScope)
        {
            MapSegment segDef = (MapSegment)definition;
            EdiSegment seg    = new EdiSegment(segDef);

            int i = 0;

            foreach (string val in content.Skip(1))
            {
                MapSimpleDataElement    elDef = null;
                MapCompositeDataElement cDef  = null;
                if (i < segDef.Content.Count)
                {
                    if (segDef.Content[i] is MapSimpleDataElement)
                    {
                        elDef = (MapSimpleDataElement)segDef.Content[i];
                    }
                    else if (segDef.Content[i] is MapCompositeDataElement)
                    {
                        cDef = (MapCompositeDataElement)segDef.Content[i];
                    }
                }

                //if cDef is null - create simple element. Even if elDef is null
                // validation will add error of unknown element later on
                if (cDef == null)
                {
                    EdiSimpleDataElement el = new EdiSimpleDataElement(elDef, val);
                    seg.Content.Add(el);
                }
                else
                {
                    EdiCompositeDataElement composite = new EdiCompositeDataElement(cDef);
                    string[] compositeContent         = val.Split(new[] { compositeSeparator }, StringSplitOptions.None);
                    ProcessComposite(composite, compositeContent);
                    seg.Content.Add(composite);
                }

                i++;
            }

            SegmentValidator.ValidateSegment(seg, rowPos, validationScope);
            return(seg);
        }
Пример #11
0
        public void Validation_IdTest()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.ID,
                MinLength = 1,
                MaxLength = 1,
                ReqDes    = RequirementDesignator.Optional
            };

            def.AllowedValues.AddRange(new[] { "C", "F", "N", "R" });

            var el = new EdiSimpleDataElement(def, "F");

            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "Z");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "");
            Assert.IsTrue(el.IsValid(def));
        }
Пример #12
0
        public void Validation_OptionalMinMaxLen()
        {
            EAny def = new EAny()
            {
                DataType  = DataType.AN,
                ReqDes    = RequirementDesignator.Optional,
                MinLength = 2,
                MaxLength = 5,
            };

            var el = new EdiSimpleDataElement(def, "");

            Assert.IsTrue(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "a");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "abcdefg");
            Assert.IsFalse(el.IsValid(def));

            el = new EdiSimpleDataElement(def, "abcde");
            Assert.IsTrue(el.IsValid(def));
        }
Пример #13
0
        public static void ValidateSegment(EdiSegment seg, int rowPos, IValidatedEntity validationScope)
        {
            int i = 0;

            foreach (var dataElement in seg.Content)
            {
                if (dataElement is EdiSimpleDataElement)
                {
                    EdiSimpleDataElement el = (EdiSimpleDataElement)dataElement;
                    ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope);
                }
                else if (dataElement is EdiCompositeDataElement)
                {
                    EdiCompositeDataElement c = (EdiCompositeDataElement)dataElement;
                    foreach (EdiSimpleDataElement el in c.Content)
                    {
                        ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope);
                    }
                }
                i++;
            }

            var syntaxNotes = ((MapSegment)seg.Definition).SyntaxNotes;

            if (syntaxNotes != null && syntaxNotes.Count > 0)
            {
                foreach (var sn in syntaxNotes)
                {
                    var syntaxNote = SyntaxNoteFactory.GetSyntaxNote(sn);
                    if (!syntaxNote.IsValid(seg.Content.Select(e => e.Val).ToArray()))
                    {
                        AddError(seg.Name, rowPos, null, $"Syntax note violation '{syntaxNote}'", validationScope);
                    }
                }
            }
        }
        public static bool IsValid(this EdiSimpleDataElement el, MapSimpleDataElement definition)
        {
            //required
            if (definition.ReqDes == RequirementDesignator.Mandatory && string.IsNullOrEmpty(el.Val)) //whitespaces allowed
            {
                return(false);
            }

            //Min max len
            if (!string.IsNullOrEmpty(el.Val) && (el.Val.Length < definition.MinLength || el.Val.Length > definition.MaxLength))
            {
                return(false);
            }

            DateTime dummyDt;

            switch (definition.DataType)
            {
            case DataType.B:
            case DataType.AN:
                return(true);

            case DataType.ID:
                return(definition.AllowedValues.IndexOf(el.Val) >= 0 ||
                       (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

            case DataType.N0:
            case DataType.N1:
            case DataType.N2:
            case DataType.N4:
            case DataType.N6:
                int dummyInt;
                return(int.TryParse(el.Val, out dummyInt) ||
                       (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

            case DataType.R:
            case DataType.R2:
            case DataType.R4:
            case DataType.R5:
            case DataType.R6:
            case DataType.R7:
            case DataType.R8:
            case DataType.R9:
                decimal dummyDec;
                return(decimal.TryParse(el.Val, out dummyDec) ||
                       (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

            case DataType.DT:
                switch (definition.MaxLength)
                {
                case 6:
                    return(DateTime.TryParseExact(el.Val, "yyMMdd", CultureInfo.InvariantCulture,
                                                  DateTimeStyles.None, out dummyDt) ||
                           (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

                case 8:
                    return(DateTime.TryParseExact(el.Val, "yyyyMMdd", CultureInfo.InvariantCulture,
                                                  DateTimeStyles.None, out dummyDt) ||
                           (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

                default:
                    throw new NotSupportedException($"Date validation with length {definition.MaxLength} is not implemented. {el.Type}");
                }

            case DataType.TM:
                return(DateTime.TryParseExact(el.Val, "HHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dummyDt) ||
                       (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val)));

            default:
                throw new NotSupportedException($"{definition.DataType} validation is not implemented. {el.Type}");
            }
        }
Пример #15
0
        public static bool IsValid(this EdiSimpleDataElement el, MapSimpleDataElement definition)
        {
            //required
            if (definition.ReqDes == RequirementDesignator.Mandatory && string.IsNullOrEmpty(el.Val)) //whitespaces allowed
            {
                return(false);
            }

            //Min max len
            if (!string.IsNullOrEmpty(el.Val) && (el.Val.Length < definition.MinLength || el.Val.Length > definition.MaxLength))
            {
                return(false);
            }

            switch (definition.DataType)
            {
            case DataType.B:
            case DataType.AN:
                return(true);

            case DataType.ID:
                return(definition.AllowedValues.IndexOf(el.Val) >= 0 || IsOptional(el.Val, definition));

            case DataType.N0:
            case DataType.N1:
            case DataType.N2:
            case DataType.N4:
            case DataType.N6:
                int dummyInt;
                return(int.TryParse(el.Val, out dummyInt) || IsOptional(el.Val, definition));

            case DataType.R:
            case DataType.R2:
            case DataType.R4:
            case DataType.R5:
            case DataType.R6:
            case DataType.R7:
            case DataType.R8:
            case DataType.R9:
                decimal dummyDec;
                return(decimal.TryParse(el.Val, out dummyDec) || IsOptional(el.Val, definition));

            case DataType.DT:
                switch (definition.MaxLength)
                {
                case 6:
                    return(ValidateShortDate(el, definition));

                case 8:
                    return(ValidateLongDate(el, definition));

                default:
                    throw new NotSupportedException($"Date validation with length {definition.MaxLength} is not implemented. {el.Type}");
                }

            case DataType.TM:
                switch (definition.MaxLength)
                {
                case 4:
                    return(ValidateShortTime(el, definition));

                case 8:
                    return(ValidateLongTime(el, definition));

                default:
                    throw new NotSupportedException($"Time validation with length {definition.MaxLength} is not implemented. {el.Type}");
                }

            default:
                throw new NotSupportedException($"{definition.DataType} validation is not implemented. {el.Type}");
            }
        }