Example #1
0
        /**
         * Vraci vsechny asociace, ktere nejak ovlivnuji konecny automat vytvareny pro asociaci topAssociation.
         **/
        public static List <PSMAssociation> getAllAssociations(PSMAssociation topAssociation)
        {
            List <PSMAssociation> resultAssociations = new List <PSMAssociation>();

            // 1. vytovrime fake set s vlastnimi @atributy child tridy
            if (topAssociation.Child is PSMClass)
            {
                PSMClass        firstClass = (PSMClass)topAssociation.Child;
                PSMContentModel fakeSet    = new PSMContentModel(topAssociation.Project, Guid.NewGuid());
                fakeSet.Type = PSMContentModelType.Set;
                PSMAssociation associationToSet = new PSMAssociation(topAssociation.Project, Guid.NewGuid());
                associationToSet.Name  = "";
                associationToSet.Lower = 1;
                associationToSet.Upper = 1;
                foreach (PSMAttribute attribute in firstClass.GetActualPSMAttributes())
                {
                    if (!attribute.Element)
                    {
                        PSMAssociation associationFromSet = new PSMAssociation(topAssociation.Project, Guid.NewGuid());
                        associationFromSet.Lower = 1;
                        associationFromSet.Upper = 1;
                        associationFromSet.Name  = "";
                        PSMClass fakeAttributeClass = new PSMClass(topAssociation.Project, Guid.NewGuid());
                        fakeAttributeClass.PSMAttributes.Add(attribute);
                        fakeAttributeClass.ParentAssociation = associationFromSet;
                        associationFromSet.Child             = fakeAttributeClass;
                        fakeSet.ChildPSMAssociations.Add(associationFromSet);
                    }
                }
                associationToSet.Child = fakeSet;
                if (fakeSet.ChildPSMAssociations.Count > 0)
                {
                    resultAssociations.Add(associationToSet);
                }
            }
            // 2. pridame asociace propagujci @atributy
            resultAssociations.AddRange(associationsPropagatingAttributes(topAssociation, false));
            resultAssociations.Add(null);
            // 3. pridame asociace na element atributy
            if (topAssociation.Child is PSMClass)
            {
                foreach (PSMAttribute attribute in ((PSMClass)topAssociation.Child).GetActualPSMAttributes())
                {
                    if (attribute.Element)
                    {
                        PSMAssociation association = new PSMAssociation(topAssociation.Project, Guid.NewGuid());
                        association.Lower = attribute.Lower;
                        association.Upper = attribute.Upper;
                        association.Name  = attribute.Name;
                        PSMClass fakeAttributeClass = new PSMClass(topAssociation.Project, Guid.NewGuid());
                        fakeAttributeClass.PSMAttributes.Add(attribute);
                        fakeAttributeClass.ParentAssociation = association;
                        association.Child = fakeAttributeClass;
                        resultAssociations.Add(association);
                    }
                }
            }
            // 4. pridame asociace propagujici element atributy
            resultAssociations.AddRange(associationsPropagatingAttributes(topAssociation, true));
            resultAssociations.Add(null);
            // 5. ostatni asociace
            resultAssociations.AddRange(associationsPropagatingElements(topAssociation));

            return(resultAssociations);
        }