public static List <PSMAssociation> getAllContributingAssociations(PSMAssociation topAssociation, HashSet <PSMAssociation> visitedAssociations, CreationPhase mode) { List <PSMAssociation> result = new List <PSMAssociation>(); IEnumerable <PSMAssociation> associations = null; if (topAssociation.Child is PSMClass) { associations = ((PSMClass)topAssociation.Child).GetActualChildPSMAssociations(); } else if (topAssociation.Child is PSMContentModel) { associations = ((PSMContentModel)topAssociation.Child).ChildPSMAssociations; } foreach (PSMAssociation association in associations) { if (!association.IsNamed) { if (!visitedAssociations.Contains(association)) { visitedAssociations.Add(association); switch (mode) { case CreationPhase.ATTRIBUTE: if (association.Child is PSMClass) { foreach (PSMAttribute att in ((PSMClass)association.Child).PSMAttributes) { if (!att.Element) { result.Add(association); break; } } } break; case CreationPhase.ELEMENT: break; case CreationPhase.CONTENT_MODEL: case CreationPhase.ELEMENT_ATTRIBUTE: if (association.Child is PSMClass) { foreach (PSMAttribute att in ((PSMClass)association.Child).PSMAttributes) { if (att.Element) { result.Add(association); break; } } } break; } result.AddRange(getAllContributingAssociations(association, visitedAssociations, mode)); } } else { switch (mode) { case CreationPhase.ELEMENT_ATTRIBUTE: case CreationPhase.ATTRIBUTE: break; case CreationPhase.CONTENT_MODEL: case CreationPhase.ELEMENT: result.Add(association); break; } } } return(result); }
/** * Vraci asociace, ktere ovlivnuji asociaci association podle toho, v jake casti tvorby konecneho automatu se nachazime. * * atribut mode urcuje, v jake casti tvorby konecneho automatu se nachazime **/ public static List <PSMAssociation> getAssociations(PSMAssociation association, CreationPhase mode) { List <PSMAssociation> associations = null; switch (mode) { case CreationPhase.ATTRIBUTE: associations = AssociationsUtils.associationsPropagatingAttributes(association, false); break; case CreationPhase.ELEMENT_ATTRIBUTE: associations = AssociationsUtils.associationsPropagatingAttributes(association, true); break; case CreationPhase.ELEMENT: associations = AssociationsUtils.associationsPropagatingElements(association); break; case CreationPhase.CONTENT_MODEL: associations = AssociationsUtils.associationsPropagatingAttributes(association, true); associations.AddRange(AssociationsUtils.associationsPropagatingElements(association)); break; } return(associations); }