예제 #1
0
            /// <summary>
            /// RolePlayerPositionChangeRule: typeof(ORMSolutions.ORMArchitect.ORMAbstraction.UniquenessIncludesConceptTypeChild)
            /// Reorder the columns in a uniqueness constraint when the order changes
            /// </summary>
            private static void UniquenessConstraintRoleOrderChanged(RolePlayerOrderChangedEventArgs e)
            {
                Uniqueness uniqueness;
                LinkedElementCollection <UniquenessConstraint> constraints;
                int constraintCount;

                if (null != (uniqueness = e.SourceElement as Uniqueness) &&
                    e.SourceDomainRole.Id == UniquenessIncludesConceptTypeChild.UniquenessDomainRoleId &&
                    0 != (constraintCount = (constraints = UniquenessConstraintIsForUniqueness.GetUniquenessConstraint(uniqueness)).Count))
                {
                    LinkedElementCollection <ConceptTypeChild> conceptTypeChildren = uniqueness.ConceptTypeChildCollection;
                    int conceptTypeChildCount = conceptTypeChildren.Count;
                    for (int i = 0; i < constraintCount; ++i)
                    {
                        LinkedElementCollection <Column> constraintColumns = constraints[i].ColumnCollection;
                        int constraintColumnCount = constraintColumns.Count;
                        if (constraintColumnCount == conceptTypeChildCount)
                        {
                            constraintColumns.Move(e.OldOrdinal, e.NewOrdinal);
                        }
                        else
                        {
                            // UNDONE: The question of exactly how many columns are associated with a reference to
                            // a conceptTypeChild is highly non-trivial. Punt on the issue for now by regenerating
                            // the model.
                            ConceptType conceptType = uniqueness.ConceptType;
                            if (conceptType != null)
                            {
                                RebuildAbstractionModel(conceptType.Model);
                            }
                        }
                    }
                }
            }
예제 #2
0
            /// <summary>
            /// DeletingRule: typeof(ORMSolutions.ORMArchitect.ORMAbstraction.UniquenessIncludesConceptTypeChild)
            /// Remove a column in a uniqueness constraint when a concept type child is removed from the
            /// corresponding abstraction construct
            /// </summary>
            private static void UniquenessConstraintRoleDeleting(ElementDeletingEventArgs e)
            {
                UniquenessIncludesConceptTypeChild link = (UniquenessIncludesConceptTypeChild)e.ModelElement;
                Uniqueness uniqueness = link.Uniqueness;
                LinkedElementCollection <UniquenessConstraint> constraints;
                int constraintCount;

                if (!uniqueness.IsDeleting &&
                    !link.ConceptTypeChild.IsDeleting &&
                    0 != (constraintCount = (constraints = UniquenessConstraintIsForUniqueness.GetUniquenessConstraint(uniqueness)).Count))
                {
                    int removeAtIndex = UniquenessIncludesConceptTypeChild.GetLinksToConceptTypeChildCollection(uniqueness).IndexOf(link);
                    for (int i = 0; i < constraintCount; ++i)
                    {
                        constraints[i].ColumnCollection.RemoveAt(removeAtIndex);
                    }
                }
            }