public IFormatReader Get(IFormatReader parameter)
                {
                    var typeInfo = _classification.Get(parameter);
                    var fullName = typeInfo.FullName;
                    var version  = parameter.IsSatisfiedBy(_property) ? _property.Get(parameter) : 0;

                    var length = _migrations.Length;

                    if (version > length)
                    {
                        throw new XmlException($"Unknown varsion number {version} for type {typeInfo}.");
                    }

                    if (_migrations == null)
                    {
                        throw new XmlException($"Migrations for type {fullName} is null.");
                    }

                    var element = XElement.Load(parameter.Get().AsValid <System.Xml.XmlReader>());

                    for (var i = version; i < length; i++)
                    {
                        var index     = (int)i;
                        var migration = _migrations.ElementAtOrDefault(index);
                        if (migration == null)
                        {
                            throw new XmlException(
                                      $"Migrations for type {fullName} contains invalid migration at index {i}.");
                        }
                        _migrations[index].Invoke(element);
                    }
                    var result = _factory.Get(element.CreateReader());

                    return(result);
                }
            public TypeInfo Get(IFormatReader parameter)
            {
                var isSatisfiedBy = parameter.IsSatisfiedBy(SchemaType.Instance);

                return(isSatisfiedBy
                                               ? _reader.Get(parameter)
                                               : _classification.Get(parameter));
            }
예제 #3
0
        public object Get(IFormatReader parameter)
        {
            var contains = parameter.IsSatisfiedBy(_member.Profile);

            if (contains)
            {
                var result = _member.Get(parameter);
                parameter.Set();
                return(result);
            }
            return(null);
        }
예제 #4
0
            Type TypeInfo(IFormatReader parameter, TypeInfo element)
            {
                if (parameter.IsSatisfiedBy(_maps))
                {
                    var maps = _maps.Get(parameter);
                    if (maps.Length > 1)
                    {
                        return(element.MakeArrayType(maps.Length));
                    }
                }

                return(element.MakeArrayType());
            }
예제 #5
0
            public object Get(IFormatReader parameter)
            {
                if (parameter.IsSatisfiedBy(ExplicitTypeProperty.Default))
                {
                    var classification = _classification.Get(parameter);
                    if (classification != null && !classification.IsArray)
                    {
                        return(_activators.Get(classification.AsType())
                               .Get());
                    }
                }
                var result = _activator.Get(parameter);

                return(result);
            }
        public IInnerContent Get(IFormatReader parameter)
        {
            var xml        = (System.Xml.XmlReader)parameter.Get();
            var attributes = xml.HasAttributes ? new XmlAttributes(xml) : (XmlAttributes?)null;

            var depth   = XmlDepth.Default.Get(xml);
            var content = depth.HasValue ? new XmlElements(xml, depth.Value) : (XmlElements?)null;

            var result = IdentityComparer.Default.Equals(parameter, NullElementIdentity.Default) ||
                         parameter.IsSatisfiedBy(NullValueIdentity.Default)
                                             ? null
                                             : _contents.Create(parameter, _activator.Get(parameter), new XmlContent(attributes, content));

            return(result);
        }
                public IFormatReader Get(IFormatReader parameter)
                {
                    var typeInfo = _classification.Get(parameter) ?? _type;
                    var fullName = typeInfo.FullName;
                    var version  = parameter.IsSatisfiedBy(_property) ? _property.Get(parameter) : 0;

                    if (version > _version)
                    {
                        throw new XmlException($"Unknown varsion number {version} for type {typeInfo}.");
                    }

                    var reader  = parameter.Get().AsValid <System.Xml.XmlReader>();
                    var element = XElement.Load(reader.ReadSubtree());

                    for (var i = version; i < _version; i++)
                    {
                        var index     = (int)i;
                        var migration = _migrations.ElementAtOrDefault(index);
                        if (migration == null)
                        {
                            throw new XmlException(
                                      $"Migrations for type {fullName} contains invalid migration at index {i}.");
                        }
                        _migrations[index]
                        .Invoke(element);
                    }

                    var xmlReader = element.CreateReader();

                    XmlParserContexts.Default.Assign(xmlReader.NameTable,
                                                     XmlParserContexts.Default.Get(reader.NameTable));
                    var result = _factory.Get(xmlReader);

                    AssociatedReaders.Default.Assign(result, parameter);
                    return(result);
                }
예제 #8
0
 public TypeInfo Get(IFormatReader parameter)
 => FromAttributes(parameter) ??
 (!parameter.IsSatisfiedBy(MemberIdentity.Default)
                             ? _types.Get(_identities.Get(parameter.Name, parameter.Identifier))
                             : null);
예제 #9
0
 public static bool IsAssigned(this IFormatReader @this)
 => !IdentityComparer.Default.Equals(@this, NullElementIdentity.Default) &&
 [email protected](NullValueIdentity.Default);
예제 #10
0
 public T Get(IFormatReader parameter) => parameter.IsSatisfiedBy(_identity) ? _context(parameter) : default;
예제 #11
0
                // ReSharper disable once CognitiveComplexity
                // ReSharper disable once ExcessiveIndentation
                public IFormatReader Get(IFormatReader parameter)
                {
                    var typeInfo = _classification.Get(parameter) ?? _type;
                    var fullName = typeInfo.FullName;
                    var version  = parameter.IsSatisfiedBy(_property) ? _property.Get(parameter) : 0;

                    if (version > _version)
                    {
                        throw new XmlException($"Unknown version number {version} for type {typeInfo}.");
                    }

                    parameter.Set();

                    var reader  = parameter.Get().AsValid <System.Xml.XmlReader>();
                    var element = XElement.Load(reader.ReadSubtree());

                    for (var i = version; i < _version; i++)
                    {
                        var index     = (int)i;
                        var migration = _migrations.ElementAtOrDefault(index);
                        if (migration == null)
                        {
                            throw new XmlException(
                                      $"Migrations for type {fullName} contains invalid migration at index {i}.");
                        }
                        _migrations[index](element);
                    }

                    var attributes = element.Descendants()
                                     .Attributes()
                                     .Where(a => a.IsNamespaceDeclaration)
                                     .Distinct()
                                     .ToArray();

                    foreach (var attribute in attributes)
                    {
                        if (element.Attribute(attribute.Name) == null)
                        {
                            element.Add(attribute);
                        }
                    }

                    var native  = element.CreateReader(ReaderOptions.OmitDuplicateNamespaces);
                    var context = XmlParserContexts.Default.Get(reader.NameTable);

                    if (reader.NameTable != null)
                    {
                        var manager = context.NamespaceManager;

                        foreach (var attribute in attributes)
                        {
                            var prefix = attribute.Name.LocalName;
                            if (manager.LookupNamespace(prefix) == null)
                            {
                                var @namespace = element.GetNamespaceOfPrefix(prefix);
                                if (@namespace != null)
                                {
                                    manager.AddNamespace(prefix, @namespace.NamespaceName);
                                }
                            }
                        }
                    }

                    XmlParserContexts.Default.Assign(native.NameTable, context);
                    var result = _factory.Get(native);

                    AssociatedReaders.Default.Assign(result, parameter);
                    return(result);
                }
예제 #12
0
 public object Reference(IFormatReader parameter)
 => parameter.IsSatisfiedBy(EntityIdentity) ? _converter.Parse(parameter.Content()) : null;
 public bool IsSatisfiedBy(IIdentity parameter) => _reader.IsSatisfiedBy(parameter);