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)); }
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; }
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))); }