public void Handle(CompositeTypeDescriptor composite)
        {
            var lhsType = Namespace.Types.FindByName(composite.Name) as CompositeTypeDescriptor;

            if (lhsType == null)
            {
                lhsType = Namespace.CreateCompositeType(composite.Name);
            }

            var rhsFields  = composite.Fields.ToList();
            int fieldIndex = -1;

            foreach (var field in rhsFields)
            {
                ++fieldIndex;

                var lhsField = lhsType.Fields.FirstOrDefault(_ => _.Name == field.Name);
                if (lhsField == null)
                {//TODO optimise
                    int insertionPos = GetInsertPosition(lhsType.Fields.ToList(), rhsFields, fieldIndex);
                    lhsField = lhsType.AddField(field.Name, field.TypeName, field.IsCollection, insertionPos);
                }

                if (lhsField.IsCollection != field.IsCollection || lhsField.TypeName != field.TypeName)
                {
                    _logger.LogWarning("different field definitions lhs:[{lhs}], rhs:[{rhs}]", lhsField.ToXml(), field.ToXml());
                }

                field.AttachedData.Where(_ => !lhsField.AttachedData.Keys.Contains(_.Key)).ToList().ForEach(_ => lhsField.AttachedData.Add(_));
            }
        }
Ejemplo n.º 2
0
            public void Handle(CompositeTypeDescriptor compositeDescriptor)
            {
                var compositeType = Namespace.GetType <CompositeType>(compositeDescriptor.Name);

                if (compositeDescriptor.BaseTypeName != null)
                {
                    var baseType = Namespace.findTypeByPartialName(compositeDescriptor.BaseTypeName);
                    compositeType.AddBase((CompositeType)baseType);
                }

                foreach (var field in compositeDescriptor.Fields)
                {
                    var fieldType = Namespace.findTypeByPartialName(field.TypeName);
                    if (fieldType == null)
                    {
                        throw new Exception("Field [" + field.Name + "] is of unknown type [" + field.TypeName + "]");
                    }

                    if (field.IsCollection)
                    {
                        compositeType.AddCollectionField(field.Name, fieldType, field.AttachedData);
                    }
                    else
                    {
                        compositeType.AddField(field.Name, fieldType, field.AttachedData);
                    }
                }
            }
Ejemplo n.º 3
0
 private static void ProcessItems(CompositeTypeDescriptor descriptor, XmlSchemaObjectCollection attributes)
 {
     foreach (var attribute in attributes)
     {
         AddField(descriptor, attribute, false);
     }
 }
Ejemplo n.º 4
0
 public static void ToXml(this CompositeTypeDescriptor descriptor, XmlWriter writer)
 {
     writer.WriteStartElement("Composite");
     writer.WriteAttributeString("name", descriptor.Name);
     if (descriptor.BaseTypeName != null)
     {
         writer.WriteAttributeString("baseType", descriptor.BaseTypeName);
     }
     foreach (var field in descriptor.Fields)
     {
         field.ToXml(writer);
     }
     writer.WriteEndElement();
 }
Ejemplo n.º 5
0
        private static void ReadField(XmlReader reader, CompositeTypeDescriptor composite)
        {
            bool bEmpty = reader.IsEmptyElement;

            string name         = null;
            string type         = null;
            string isCollection = null;

            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name)
                {
                case "name":
                    name = reader.Value;
                    break;

                case "type":
                    type = reader.Value;
                    break;

                case "isCollection":
                    isCollection = reader.Value;
                    break;

                default:
                    throw new NotSupportedException("Unknow tag " + reader.Name);
                }
            }

            var descriptor = composite.AddField(name, type, isCollection != null ? bool.Parse(isCollection) : false);

            reader.Read();
            if (!bEmpty)
            {
                MoveToNonWhitespace(reader);
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.ReadToDescendant("Item"))
                    {
                        descriptor.AttachedData.Add(ReadAttachedDataItem(reader));
                        while (reader.ReadToNextSibling("Item"))
                        {
                            descriptor.AttachedData.Add(ReadAttachedDataItem(reader));
                        }
                    }
                    ReadEndElement(reader);
                }
                ReadEndElement(reader);
            }
        }
Ejemplo n.º 6
0
 public void Handle(CompositeTypeDescriptor composite)
 {
     Namespace.CreateCompositeType(GetId(composite.Name), composite.Name);
 }