コード例 #1
0
 public bool IsGroupNode(PSMComponent psmComponent)
 {
     return(psmComponent.DownCastSatisfies <PSMClass>(psmClass =>
                                                      psmClass.GetInVersion(OldVersion) != null &&
                                                      psmClass.GetInVersion(OldVersion).ParentAssociation != null &&
                                                      !psmClass.GetInVersion(OldVersion).ParentAssociation.IsNamed) ||
            psmComponent.DownCastSatisfies <PSMClass>(psmClass =>
                                                      IsAddedNode(psmClass) && psmClass.ParentAssociation != null && !psmClass.ParentAssociation.IsNamed));
 }
コード例 #2
0
        public static void DetermineRequiredTemplates(PSMComponent node, out bool attributeRequired, out bool elementRequired, out bool wrapTemplateRequired)
        {
            wrapTemplateRequired = node.DownCastSatisfies <PSMClass>(c => c.ParentAssociation != null && c.ParentAssociation.IsNamed);

            /*
             * Attribute template is required
             * for class:
             *  1) when it has attributes
             *  2) when it has child class connected via association
             *     not having name and the child class requires attributes
             *  3) when an attribute was removed from the class, or attributes
             *     xform has changed
             * for content model:
             *  2)
             *  3)
             */

            bool _aReq = false;
            bool _eReq = false;

            if (node is PSMClass)
            {
                PSMClass psmClass = (PSMClass)node;

                // examine represented class
                if (psmClass.IsStructuralRepresentative)
                {
                    bool repA, repE;
                    DetermineRequiredTemplates(psmClass.RepresentedClass, out repA, out repE, out wrapTemplateRequired);
                    if (repA)
                    {
                        _aReq = true;
                    }
                    if (repE)
                    {
                        _aReq = true;
                    }
                }

                if (psmClass.PSMAttributes.Any(a => !a.Element))
                {
                    _aReq = true;
                }

                if (psmClass.PSMAttributes.Any(a => a.Element))
                {
                    _eReq = true;
                }
            }

            if (!_aReq)
            {
                if (node is PSMAttribute)
                {
                    if (!((PSMAttribute)node).Element)
                    {
                        _aReq = true;
                    }
                }
                else
                {
                    bool dummy;
                    foreach (PSMAssociation psmAssociation in (((PSMAssociationMember)node).ChildPSMAssociations).Where(a => !a.IsNamed))
                    {
                        DetermineRequiredTemplates(psmAssociation.Child, out _aReq, out dummy, out wrapTemplateRequired);
                        if (_aReq)
                        {
                            break;
                        }
                    }
                }
            }

            if (!_eReq)
            {
                if (node is PSMAttribute)
                {
                    if (((PSMAttribute)node).Element)
                    {
                        _eReq = true;
                    }
                }
                else
                {
                    bool dummy;
                    foreach (PSMAssociation psmAssociation in (((PSMAssociationMember)node).ChildPSMAssociations))
                    {
                        if (psmAssociation.IsNamed)
                        {
                            _eReq = true;
                            break;
                        }
                        DetermineRequiredTemplates(psmAssociation.Child, out dummy, out _eReq, out wrapTemplateRequired);
                        if (_eReq)
                        {
                            break;
                        }
                    }
                }
            }

            attributeRequired = _aReq;
            elementRequired   = _eReq;
        }
コード例 #3
0
ファイル: XsdSchemaGenerator.cs プロジェクト: mff-uk/exolutio
 private static bool ContentIsSet(PSMComponent component)
 {
     return(component.DownCastSatisfies <PSMClass>(psmClass =>
                                                   psmClass.ChildPSMAssociations.Count > 0 &&
                                                   psmClass.ChildPSMAssociations.First().Child.DownCastSatisfies <PSMContentModel>(cm => cm.Type == PSMContentModelType.Set)));
 }