AddSubShape() public method

public AddSubShape ( Shape shape ) : void
shape Shape
return void
Example #1
0
        Shape ProcessParticle(XmlSchemaParticle xsp, Shape parent)
        {
            Shape s;

            if (xsp == XmlSchemaParticle.Empty)
            {
                return(null);
            }
            if (xsp is XmlSchemaElement)
            {
                s = ProcessParticleElement((XmlSchemaElement)xsp);
            }
            else if (xsp is XmlSchemaSequence)
            {
                s = ProcessParticleGroup((XmlSchemaSequence)xsp, BindingType.Sequence);
            }
            else if (xsp is XmlSchemaChoice)
            {
                s = ProcessParticleGroup((XmlSchemaChoice)xsp, BindingType.Choice);
            }
            else if (xsp is XmlSchemaAll)
            {
                s = ProcessParticleGroup((XmlSchemaAll)xsp, BindingType.All);
            }
            else              //XmlSchemaAny
            {
                return(null); //Ignore Any in the content model
            }
            if (xsp.MaxOccurs > 1)
            {
                Shape rep = new Shape(s.Name, BindingType.Repeat);
                rep.AddSubShape(s);
                s = rep;
            }
            if (parent != null)
            {
                parent.AddSubShape(s);
            }
            return(s);
        }
Example #2
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);
            }
        }
 Shape ProcessParticle(XmlSchemaParticle xsp, Shape parent) {
     Shape s;
     if (xsp == XmlSchemaParticle.Empty) {
         return null;
     }
     if (xsp is XmlSchemaElement) {
         s = ProcessParticleElement((XmlSchemaElement)xsp);
     } 
     else if (xsp is XmlSchemaSequence) {
         s = ProcessParticleGroup((XmlSchemaSequence)xsp, BindingType.Sequence);
     } 
     else if (xsp is XmlSchemaChoice) {
         s = ProcessParticleGroup((XmlSchemaChoice)xsp, BindingType.Choice);
     }
     else if (xsp is XmlSchemaAll) {
         s = ProcessParticleGroup((XmlSchemaAll)xsp, BindingType.All);
     }
     else { //XmlSchemaAny
         return null; //Ignore Any in the content model
     }
     if (xsp.MaxOccurs > 1) {
         Shape rep = new Shape(s.Name, BindingType.Repeat);
         rep.AddSubShape(s);
         s = rep;
     }
     if (parent != null)
         parent.AddSubShape(s);
     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;
            }
        }