internal void CheckFacets(CompiledFacets genFacets) { if (genFacets != null) { RestrictionFlags flags = genFacets.Flags; if ((flags & RestrictionFlags.Length) != 0) { _length = genFacets.Length; } if ((flags & RestrictionFlags.MinLength) != 0) { _minLength = genFacets.MinLength; } if ((flags & RestrictionFlags.MaxLength) != 0) { _maxLength = genFacets.MaxLength; } if ((flags & RestrictionFlags.Enumeration) != 0) { _allowedValues = genFacets.Enumeration; } } }
internal void CheckFacets(CompiledFacets genFacets) { if (genFacets != null) { RestrictionFlags flags = genFacets.Flags; if ((flags & RestrictionFlags.MaxInclusive) != 0) { this.MaxBound = (DateTime)genFacets.MaxInclusive; } if ((flags & RestrictionFlags.MaxExclusive) != 0) { this.MaxBound = ((DateTime)genFacets.MaxExclusive).Subtract(_step); } if ((flags & RestrictionFlags.MinInclusive) != 0) { this.MinBound = (DateTime)genFacets.MinInclusive; } if ((flags & RestrictionFlags.MinExclusive) != 0) { this.MinBound = ((DateTime)genFacets.MinExclusive).Add(_step); } if ((flags & RestrictionFlags.Enumeration) != 0) { _allowedValues = genFacets.Enumeration; } } }
internal void CheckFacets(CompiledFacets genFacets) { if (genFacets != null) { RestrictionFlags flags = genFacets.Flags; if ((flags & RestrictionFlags.MaxInclusive) != 0) { this.MaxBound = (float)genFacets.MaxInclusive; } if ((flags & RestrictionFlags.MaxExclusive) != 0) { this.MaxBound = (float)genFacets.MaxExclusive - 1; } if ((flags & RestrictionFlags.MinInclusive) != 0) { this.MinBound = (float)genFacets.MinInclusive; } if ((flags & RestrictionFlags.MinExclusive) != 0) { this.MinBound = (float)genFacets.MinExclusive + 1; } if ((flags & RestrictionFlags.Enumeration) != 0) { _allowedValues = genFacets.Enumeration; } } }
internal void CheckFacets(CompiledFacets genFacets) { if (genFacets != null) { RestrictionFlags flags = genFacets.Flags; if ((flags & RestrictionFlags.MaxInclusive) != 0) { this.MaxBound = (decimal)Convert.ChangeType(genFacets.MaxInclusive, typeof(decimal)); } if ((flags & RestrictionFlags.MaxExclusive) != 0) { this.MaxBound = (decimal)Convert.ChangeType(genFacets.MaxExclusive, typeof(decimal)) - 1; } if ((flags & RestrictionFlags.MinInclusive) != 0) { this.MinBound = (decimal)Convert.ChangeType(genFacets.MinInclusive, typeof(decimal)); } if ((flags & RestrictionFlags.MinExclusive) != 0) { this.MinBound = (decimal)Convert.ChangeType(genFacets.MinExclusive, typeof(decimal)) + 1; } if ((flags & RestrictionFlags.Enumeration) != 0) { _allowedValues = genFacets.Enumeration; } if ((flags & RestrictionFlags.TotalDigits) != 0) { decimal totalDigitsValue = (decimal)Math.Pow(10, genFacets.TotalDigits) - 1; if (totalDigitsValue <= this.MaxBound) { //Use the lower of totalDigits value and maxInc/maxEx this.MaxBound = totalDigitsValue; this.MinBound = 0 - this.MaxBound; } } if ((flags & RestrictionFlags.FractionDigits) != 0 && genFacets.FractionDigits > 0) { if ((flags & RestrictionFlags.TotalDigits) != 0) { //if (T,F) is (6,3) the max value is not 999.999 but 99999.9d but we are going with the smaller range on the integral part to generate more varied fractional part. int range = genFacets.TotalDigits - genFacets.FractionDigits; double integralPart = Math.Pow(10, range) - 1; double fractionPart = integralPart / Math.Pow(10, range); this.MaxBound = (decimal)(integralPart + fractionPart); this.MinBound = 0 - this.MaxBound; } } } }
internal static XmlValueGenerator CreateGenerator(XmlSchemaDatatype datatype, int listLength) { XmlTypeCode typeCode = datatype.TypeCode; object restriction = datatype.GetType().InvokeMember("Restriction", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance, null, datatype, null); CompiledFacets rFacets = new CompiledFacets(restriction); XmlValueGenerator generator; if (datatype.Variety == XmlSchemaDatatypeVariety.Union) { generator = CreateUnionGenerator(datatype, rFacets, listLength); } else if (datatype.Variety == XmlSchemaDatatypeVariety.List) { generator = CreateListGenerator(datatype, rFacets, listLength); } else { switch (typeCode) { case XmlTypeCode.None: generator = _anyGenerator; break; case XmlTypeCode.Item: generator = _anyGenerator; break; case XmlTypeCode.AnyAtomicType: generator = _anySimpleTypeGenerator; break; case XmlTypeCode.String: generator = new Generator_string(rFacets); break; case XmlTypeCode.Boolean: generator = new Generator_boolean(); break; case XmlTypeCode.Float: generator = new Generator_float(rFacets); break; case XmlTypeCode.Double: generator = new Generator_double(rFacets); break; case XmlTypeCode.AnyUri: generator = new Generator_anyURI(rFacets); break; case XmlTypeCode.Integer: generator = new Generator_integer(rFacets); break; case XmlTypeCode.Decimal: generator = new Generator_decimal(rFacets); break; case XmlTypeCode.NonPositiveInteger: generator = new Generator_nonPositiveInteger(rFacets); break; case XmlTypeCode.NegativeInteger: generator = new Generator_negativeInteger(rFacets); break; case XmlTypeCode.Long: generator = new Generator_long(rFacets); break; case XmlTypeCode.Int: generator = new Generator_integer(rFacets); break; case XmlTypeCode.Short: generator = new Generator_short(rFacets); break; case XmlTypeCode.Byte: generator = new Generator_byte(rFacets); break; case XmlTypeCode.NonNegativeInteger: generator = new Generator_nonNegativeInteger(rFacets); break; case XmlTypeCode.UnsignedLong: generator = new Generator_unsignedLong(rFacets); break; case XmlTypeCode.UnsignedInt: generator = new Generator_unsignedInt(rFacets); break; case XmlTypeCode.UnsignedShort: generator = new Generator_unsignedShort(rFacets); break; case XmlTypeCode.UnsignedByte: generator = new Generator_unsignedByte(rFacets); break; case XmlTypeCode.PositiveInteger: generator = new Generator_positiveInteger(rFacets); break; case XmlTypeCode.Duration: generator = new Generator_duration(rFacets); break; case XmlTypeCode.DateTime: generator = new Generator_dateTime(rFacets); break; case XmlTypeCode.Date: generator = new Generator_date(rFacets); break; case XmlTypeCode.GYearMonth: generator = new Generator_gYearMonth(rFacets); break; case XmlTypeCode.GYear: generator = new Generator_gYear(rFacets); break; case XmlTypeCode.GMonthDay: generator = new Generator_gMonthDay(rFacets); break; case XmlTypeCode.GDay: generator = new Generator_gDay(rFacets); break; case XmlTypeCode.GMonth: generator = new Generator_gMonth(rFacets); break; case XmlTypeCode.Time: generator = new Generator_time(rFacets); break; case XmlTypeCode.HexBinary: generator = new Generator_hexBinary(rFacets); break; case XmlTypeCode.Base64Binary: generator = new Generator_base64Binary(rFacets); break; case XmlTypeCode.QName: generator = new Generator_QName(rFacets); break; case XmlTypeCode.Notation: generator = new Generator_Notation(rFacets); break; case XmlTypeCode.NormalizedString: generator = new Generator_string(rFacets); break; case XmlTypeCode.Token: case XmlTypeCode.NmToken: generator = new Generator_token(rFacets); break; case XmlTypeCode.Language: generator = new Generator_language(rFacets); break; case XmlTypeCode.Name: generator = new Generator_Name(rFacets); break; case XmlTypeCode.NCName: generator = new Generator_NCName(rFacets); break; case XmlTypeCode.Id: _g_ID.CheckFacets(rFacets); generator = _g_ID; break; case XmlTypeCode.Idref: _g_IDREF.CheckFacets(rFacets); generator = _g_IDREF; break; default: generator = _anyGenerator; break; } } generator.SetDatatype(datatype); return(generator); }
internal Generator_double(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_dateTime(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_hexBinary(CompiledFacets rFacets) : this() { base.CheckFacets(rFacets); }
private static XmlValueGenerator CreateUnionGenerator(XmlSchemaDatatype dtype, CompiledFacets facets, int listLength) { XmlSchemaSimpleType[] memberTypes = (XmlSchemaSimpleType[])dtype.GetType().InvokeMember("types", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, dtype, null); Generator_Union union_genr = new Generator_Union(facets); foreach (XmlSchemaSimpleType st1 in memberTypes) { union_genr.AddGenerator(XmlValueGenerator.CreateGenerator(st1.Datatype, listLength)); } return(union_genr); }
internal Generator_positiveInteger(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_NCName(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_anyURI(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_language(CompiledFacets rFacets) : base(rFacets) { }
internal Generator_token(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_base64Binary(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_short(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
private static XmlValueGenerator CreateListGenerator(XmlSchemaDatatype dtype, CompiledFacets facets, int listLength) { XmlSchemaDatatype itemType = (XmlSchemaDatatype)dtype.GetType().InvokeMember("itemType", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, dtype, null); Generator_List list_genr = new Generator_List(facets); list_genr.ListLength = listLength; list_genr.AddGenerator(XmlValueGenerator.CreateGenerator(itemType, listLength)); return(list_genr); }
internal Generator_unsignedByte(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_gMonth(CompiledFacets rFacets) : base(rFacets) { }
internal Generator_duration(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_decimal(CompiledFacets rFacets) : this() { CheckFacets(rFacets); }
internal Generator_gDay(CompiledFacets rFacets) : base(rFacets) { }
internal Generator_time(CompiledFacets rFacets) : base(rFacets) { }