示例#1
0
        public override void ElementPropertyChanged(ElementPropertyChangedEventArgs e)
        {
            if (e.ModelElement != null)
            {
                if (e.ModelElement.Store.TransactionManager.CurrentTransaction != null)
                {
                    if (e.ModelElement.Store.TransactionManager.CurrentTransaction.IsSerializing)
                    {
                        return;
                    }
                }
            }

            if (e.ModelElement == null)
            {
                return;
            }

            if (ImmutabilityExtensionMethods.GetLocks(e.ModelElement) != Locks.None)
            {
                return;
            }

            SerializedDomainRole serializedDomainRole = e.ModelElement as SerializedDomainRole;

            if (serializedDomainRole != null)
            {
                if (e.DomainProperty.Id == SerializedDomainRole.SerializationNameDomainPropertyId && serializedDomainRole.DomainRole.Relationship is ReferenceRelationship)
                {
                    if (serializedDomainRole.DomainRole == serializedDomainRole.DomainRole.Relationship.Source)
                    {
                        //if ((serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationSourceName != serializedDomainRole.SerializationName)
                        //    (serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationSourceName = serializedDomainRole.SerializationName;
                    }
                    else
                    {
                        if ((serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationTargetName != serializedDomainRole.SerializationName)
                        {
                            (serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationTargetName = serializedDomainRole.SerializationName;
                        }
                    }
                }
                else if (e.DomainProperty.Id == SerializedDomainRole.SerializationAttributeNameDomainPropertyId && serializedDomainRole.DomainRole.Relationship is ReferenceRelationship)
                {
                    //if ((serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationAttributeName != serializedDomainRole.SerializationAttributeName)
                    //    (serializedDomainRole.DomainRole.Relationship as ReferenceRelationship).SerializationAttributeName = serializedDomainRole.SerializationAttributeName;
                }
            }
        }
        /// <summary>
        /// Constuctor.
        /// </summary>
        /// <param name="viewModelStore">The store this view model belongs to.</param>
        /// <param name="serializedDomainRole">SerializedDomainRole.</param>
        /// <param name="referencedElement">Element that is referenced by the serialization element. Can be null.</param>
        public SerializedDomainRoleViewModel(ViewModelStore viewModelStore, SerializedDomainRole serializedDomainRole, DomainRelationship referencedElement, SerializedRelationshipViewModel parentVM)
            : base(viewModelStore, serializedDomainRole, referencedElement)
        {
            this.parentVM = parentVM;

            if (this.SerializationElement != null)
            {
                this.domainRole = this.SerializationElement.DomainRole;

                // subscribe
                this.EventManager.GetEvent<ModelElementPropertyChangedEvent>().Subscribe(this.SerializationElement.Id, new Action<ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));

                if (domainRole != null)
                {
                    this.EventManager.GetEvent<ModelElementPropertyChangedEvent>().Subscribe(this.domainRole.Id, new Action<ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));

                    if (this.domainRole.RolePlayer != null)
                        this.EventManager.GetEvent<ModelElementPropertyChangedEvent>().Subscribe(this.domainRole.RolePlayer.Id, new Action<ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));
                }
            }
        }
示例#3
0
        /// <summary>
        /// Constuctor.
        /// </summary>
        /// <param name="viewModelStore">The store this view model belongs to.</param>
        /// <param name="serializedDomainRole">SerializedDomainRole.</param>
        /// <param name="referencedElement">Element that is referenced by the serialization element. Can be null.</param>
        public SerializedDomainRoleViewModel(ViewModelStore viewModelStore, SerializedDomainRole serializedDomainRole, DomainRelationship referencedElement, SerializedRelationshipViewModel parentVM)
            : base(viewModelStore, serializedDomainRole, referencedElement)
        {
            this.parentVM = parentVM;

            if (this.SerializationElement != null)
            {
                this.domainRole = this.SerializationElement.DomainRole;

                // subscribe
                this.EventManager.GetEvent <ModelElementPropertyChangedEvent>().Subscribe(this.SerializationElement.Id, new Action <ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));

                if (domainRole != null)
                {
                    this.EventManager.GetEvent <ModelElementPropertyChangedEvent>().Subscribe(this.domainRole.Id, new Action <ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));

                    if (this.domainRole.RolePlayer != null)
                    {
                        this.EventManager.GetEvent <ModelElementPropertyChangedEvent>().Subscribe(this.domainRole.RolePlayer.Id, new Action <ElementPropertyChangedEventArgs>(OnSerializedRolePropertyChanged));
                    }
                }
            }
        }
        public static void OnReferenceRelationshipAdded(ReferenceRelationship referenceRelationship)
        {
            #region Check Paramaters
            if (referenceRelationship.Source == null)
            {
                throw new ArgumentNullException("referenceRelationship.Source");
            }

            if (referenceRelationship.Target == null)
            {
                throw new ArgumentNullException("referenceRelationship.Target");
            }

            if (!(referenceRelationship.Source.RolePlayer is DomainClass))
            {
                throw new ArgumentNullException("referenceRelationship.Source.RolePlayer needs to be DomainClass");
            }

            if (!(referenceRelationship.Target.RolePlayer is DomainClass) && !(referenceRelationship.Target.RolePlayer is ReferenceRelationship))
            {
                throw new ArgumentNullException("referenceRelationship.Target.RolePlayer needs to be DomainClass or ReferenceRelationship");
            }
            #endregion

            // Add properties and id attribute and set serialization form.
            SerializedReferenceRelationship child = new SerializedReferenceRelationship(referenceRelationship.Store);
            child.ReferenceRelationship = referenceRelationship;
            if (referenceRelationship.NeedsFullSerialization())
            {
                child.IsInFullSerialization = true;
            }
            else
            {
                child.IsInFullSerialization = false;
            }
            child.SerializationName = referenceRelationship.SerializationName;
            SerializationHelper.AddSerializationDomainProperties(referenceRelationship.Store, referenceRelationship);

            referenceRelationship.ModelContext.SerializationModel.Children.Add(child);

            SerializationClass domainClassSource = (referenceRelationship.Source.RolePlayer as DomainClass).SerializedDomainClass;
            domainClassSource.Children.Add(child);

            // Add roles players.
            SerializedDomainRole roleSource = new SerializedDomainRole(referenceRelationship.Store);
            roleSource.DomainRole = referenceRelationship.Source;
            roleSource.SerializationAttributeName = referenceRelationship.SerializationAttributeName;
            roleSource.SerializationName          = referenceRelationship.SerializationSourceName;
            child.Children.Add(roleSource);

            SerializedDomainRole roleTarget = new SerializedDomainRole(referenceRelationship.Store);
            roleTarget.DomainRole = referenceRelationship.Target;
            roleTarget.SerializationAttributeName = referenceRelationship.SerializationAttributeName;
            roleTarget.SerializationName          = referenceRelationship.SerializationTargetName;
            child.Children.Add(roleTarget);

            child.SerializedDomainRoles.Add(roleSource);
            child.SerializedDomainRoles.Add(roleTarget);

            // update derived roles
            SerializationHelper.UpdateDerivedElementsSerializationDomainRoles(referenceRelationship.Source.RolePlayer);
        }