AddAttrShapeAt() public method

public AddAttrShapeAt ( Shape shape, int pos ) : void
shape Shape
pos int
return void
Example #1
0
        public Shape GenerateFromSchema(XmlSchemaElement xse)
        {
            XmlQualifiedName     xseName     = xse.QualifiedName;
            XmlSchemaType        schemaType  = xse.ElementSchemaType;
            XmlSchemaComplexType complexType = schemaType as XmlSchemaComplexType;

            if (null != complexType)
            {
                XmlSchemaParticle particle  = null;
                Shape             rootShape = null;

                XmlSchemaContentType contentType = complexType.ElementDecl.ContentValidator.ContentType;
                switch (contentType)
                {
                case XmlSchemaContentType.Mixed:
                case XmlSchemaContentType.TextOnly:
                    rootShape = new Shape(GenName(xseName) + "_Text", BindingType.Text);
                    rootShape.AddParticle(xse);
                    break;

                case XmlSchemaContentType.Empty:
                    rootShape = new Shape(null, BindingType.Sequence);
                    break;

                case XmlSchemaContentType.ElementOnly:
                    particle  = complexType.ContentTypeParticle;
                    rootShape = ProcessParticle(particle, null);
                    break;
                }

                Debug.Assert(rootShape != null);
                if (complexType.AttributeUses.Values.Count > 0)
                {
                    if (rootShape.BindingType != BindingType.Sequence)
                    {
                        Shape s = new Shape(null, BindingType.Sequence);
                        s.AddSubShape(rootShape);
                        rootShape = s;
                    }
                    int      pos   = 0;
                    string[] names = rootShape.SubShapeNames();

                    ICollection          attributes = complexType.AttributeUses.Values;
                    XmlSchemaAttribute[] xsaArray   = new XmlSchemaAttribute[attributes.Count];
                    attributes.CopyTo(xsaArray, 0);
                    Array.Sort(xsaArray, new XmlSchemaAttributeComparer());
                    foreach (XmlSchemaAttribute xsa in xsaArray)
                    {
                        string name      = GenAttrName(xsa.QualifiedName, names);
                        Shape  attrShape = new Shape(name, BindingType.Attribute);
                        attrShape.AddParticle(xsa);
                        rootShape.AddAttrShapeAt(attrShape, pos++);
                    }
                }

                if (rootShape.BindingType != BindingType.Text)
                {
                    rootShape.Name          = GenName(xseName);
                    rootShape.ContainerDecl = xse;
                }
                return(rootShape);
            }
            else   // simple type
            {
                Shape s = new Shape(GenName(xseName), BindingType.Text);
                s.AddParticle(xse);
                return(s);
            }
        }
        public Shape GenerateFromSchema(XmlSchemaElement xse) {
            XmlQualifiedName xseName = xse.QualifiedName;
            XmlSchemaType schemaType = xse.ElementSchemaType;
            XmlSchemaComplexType complexType = schemaType as XmlSchemaComplexType;
            if (null != complexType) {
                XmlSchemaParticle particle = null;
                Shape rootShape = null;
                
                XmlSchemaContentType contentType = complexType.ElementDecl.ContentValidator.ContentType;
                switch (contentType) {
                    case XmlSchemaContentType.Mixed:
                    case XmlSchemaContentType.TextOnly:
                        rootShape = new Shape(GenName(xseName) + "_Text", BindingType.Text);
                        rootShape.AddParticle(xse);
                    break;

                    case XmlSchemaContentType.Empty:
                        rootShape = new Shape(null, BindingType.Sequence);
                        break;

                    case XmlSchemaContentType.ElementOnly:
                        particle = complexType.ContentTypeParticle;
                        rootShape = ProcessParticle(particle, null);
                    break;

                }
            
                Debug.Assert(rootShape != null);
                if (complexType.AttributeUses.Values.Count > 0) {
                    if (rootShape.BindingType != BindingType.Sequence) {
                        Shape s = new Shape(null, BindingType.Sequence);
                        s.AddSubShape(rootShape);
                        rootShape = s;
                    }
                    int pos = 0;
                    string[] names = rootShape.SubShapeNames();

                    ICollection attributes = complexType.AttributeUses.Values;
                    XmlSchemaAttribute[] xsaArray = new XmlSchemaAttribute[attributes.Count];
                    attributes.CopyTo(xsaArray, 0);
                    Array.Sort(xsaArray, new XmlSchemaAttributeComparer());
                    foreach(XmlSchemaAttribute xsa in xsaArray) {
                        string name = GenAttrName(xsa.QualifiedName, names);
                        Shape attrShape = new Shape(name, BindingType.Attribute);
                        attrShape.AddParticle(xsa);
                        rootShape.AddAttrShapeAt(attrShape, pos++);
                    }
                }
                
                if (rootShape.BindingType != BindingType.Text) {
                    rootShape.Name = GenName(xseName);
                    rootShape.ContainerDecl = xse;
                }
                return rootShape;
            }
            else { // simple type
                Shape s = new Shape(GenName(xseName), BindingType.Text);
                s.AddParticle(xse);
                return s;
            }
        }