Пример #1
0
        private void TestSerializationForOrmAssociationEnd(OrmAssociationEnd originalAttribute)
        {
            OrmAssociationEnd clonedAttribute = null;
            Action            cloneAttribute  = () => clonedAttribute = originalAttribute.Clone();

            cloneAttribute();
            Assert.IsTrue(originalAttribute.EqualsTo(clonedAttribute));

            Action testClonedNotEquals = () => Assert.IsFalse(originalAttribute.EqualsTo(clonedAttribute));

            clonedAttribute.PairTo.SetAsDefault();
            testClonedNotEquals();

            cloneAttribute();
            clonedAttribute.Multiplicity = MultiplicityKind.One;
            testClonedNotEquals();

            cloneAttribute();
            clonedAttribute.OnOwnerRemove = AssociationOnRemoveAction.Default;
            testClonedNotEquals();

            cloneAttribute();
            clonedAttribute.OnTargetRemove = AssociationOnRemoveAction.Clear;
            testClonedNotEquals();
        }
Пример #2
0
        private static void CustomReadPropertiesFromElements(SerializationContext serializationContext, PersistentTypeHasAssociations element, XmlReader reader)
        {
            Action useAssocAttrUpgradeFunc =
                () =>
            {
                // this is here when converting from older versions than 1.0.5.0 to set 'UseAssociationAttribute' to true
                if (ModelUpgrader.Instance.DeserializingModelVersion <
                    ModelUpgrader.Version_1_0_5_0)
                {
                    ModelUpgrader.Instance.UpdateMakeChangesFlag();
                }
            };

            while (!serializationContext.Result.Failed && !reader.EOF && reader.NodeType == XmlNodeType.Element)
            {
                switch (reader.LocalName)
                {
                case "end1":
                    if (reader.IsEmptyElement)
                    {                                        // No serialized value, must be default one.
                        SerializationUtilities.Skip(reader); // Skip this tag.
                    }
                    else
                    {
                        OrmAssociationEnd end1 = new OrmAssociationEnd(element, "End1");
                        end1.DeserializeFromXml(reader, "end1");
                        element.End1 = end1;

                        useAssocAttrUpgradeFunc();

                        SerializationUtilities.SkipToNextElement(reader);
                        reader.SkipToNextElementFix();
                    }
                    break;

                case "end2":
                    if (reader.IsEmptyElement)
                    {                                        // No serialized value, must be default one.
                        SerializationUtilities.Skip(reader); // Skip this tag.
                    }
                    else
                    {
                        OrmAssociationEnd end2 = new OrmAssociationEnd(element, "End2");
                        end2.DeserializeFromXml(reader, "end2");
                        element.End2 = end2;

                        useAssocAttrUpgradeFunc();

                        SerializationUtilities.SkipToNextElement(reader);
                        reader.SkipToNextElementFix();
                    }
                    break;

                default:
                    return;      // Don't know this element.
                }
            }
        }
Пример #3
0
        private void TestSerializationForOrmAssociationEnd()
        {
            const string referentialXml =
                "<end multiplicity=\"Many\" onOwnerRemove=\"Clear\" onTargetRemove=\"Deny\"><pairTo valueType=\"Custom\"><value>Items</value></pairTo></end>";

            OrmAssociationEnd originalAttribute = CreateOrmAssociationEnd(TestAttributeValuesType.Values1);

            string xml = originalAttribute.SerializeToString();

            Assert.IsTrue(Util.StringEqual(xml, referentialXml, true),
                          "Serialized xml form of 'OrmAssociationEnd' type differs from referential xml.");

            TestSerializationForOrmAssociationEnd(originalAttribute);
        }
Пример #4
0
        private OrmAssociationEnd CreateOrmAssociationEnd(TestAttributeValuesType valuesType)
        {
            OrmAssociationEnd originalAttribute = new OrmAssociationEnd();
            bool isValues1 = valuesType == TestAttributeValuesType.Values1;

            originalAttribute.Multiplicity  = isValues1 ? MultiplicityKind.Many : MultiplicityKind.ZeroOrOne;
            originalAttribute.OnOwnerRemove = isValues1
                                                  ? AssociationOnRemoveAction.Clear
                                                  : AssociationOnRemoveAction.Deny;
            originalAttribute.OnTargetRemove = isValues1
                                                   ? AssociationOnRemoveAction.Deny
                                                   : AssociationOnRemoveAction.Clear;
            originalAttribute.PairTo.SetAsCustom(isValues1 ? "Items" : "RevertedItems");

            return(originalAttribute);
        }
Пример #5
0
        public void HandleEvent(ElementEventArgs args)
        {
            if (args.EventType == ElementEventType.ElementPropertyChanged)
            {
                Func <Tuple <OrmAssociationEnd, OrmAssociationEnd> > getAssocEnd = () =>
                {
                    PersistentType currentOwner = this.PersistentTypeOfNavigationProperty;
                    bool           isSource     = this.PersistentTypeHasAssociations.SourcePersistentType == currentOwner;

                    OrmAssociationEnd assocEnd1 = isSource
                                                     ? this.PersistentTypeHasAssociations.End2
                                                     : this.PersistentTypeHasAssociations.End1;
                    OrmAssociationEnd assocEnd2 = isSource
                                                     ? this.PersistentTypeHasAssociations.End1
                                                     : this.PersistentTypeHasAssociations.End2;
                    return(new Tuple <OrmAssociationEnd, OrmAssociationEnd>(assocEnd1, assocEnd2));
                };

                var e = args.ElementPropertyChangedEventArgs;
                if (e.DomainProperty.Id == MultiplicityDomainPropertyId)
                {
                    if (this.PersistentTypeHasAssociations != null)
                    {
                        var assocEnds = getAssocEnd();
                        assocEnds.Item1.Multiplicity = (MultiplicityKind)e.NewValue;
                    }
                }
                else if (e.DomainProperty.Id == NameDomainPropertyId)
                {
                    if (this.PersistentTypeHasAssociations != null)
                    {
                        var assocEnds = getAssocEnd();
                        assocEnds.Item2.PairTo.SetAsCustom(e.NewValue as string);
                    }
                }
            }
        }
Пример #6
0
        public void HandleEvent(ElementEventArgs args)
        {
            if (args.EventType == ElementEventType.CustomEvent)
            {
                object            customEventArgs   = args.CustomEventArgs[0];
                OrmAssociationEnd eventFromAssocEnd = customEventArgs as OrmAssociationEnd;
                string            changedProperty   = (string)args.CustomEventArgs[1];
                string            calledFromEndId   = (string)args.CustomEventArgs[2];

                if (eventFromAssocEnd != null)
                {
                    bool changeAll             = string.IsNullOrEmpty(changedProperty);
                    bool canChangeMultiplicity = changeAll || Util.StringEqual(changedProperty, "Multiplicity", true);
                    bool canChangePairTo       = changeAll || Util.StringEqual(changedProperty, "PairTo", true);

                    bool eventFromEnd1 = Util.StringEqual(calledFromEndId, "End1", true);

                    Func <bool, Tuple <NavigationProperty, OrmAssociationEnd> > getDefinitions = delegate(bool revert)
                    {
                        PersistentType persistentToFind = eventFromEnd1
                                                              ? (revert
                                                                     ? this.SourcePersistentType
                                                                     : this.TargetPersistentType)
                                                              : (revert
                                                                     ? this.TargetPersistentType
                                                                     : this.SourcePersistentType);

                        OrmAssociationEnd otherAssocEnd = eventFromEnd1
                                                              ? (revert
                                                                    ? this.End2
                                                                    : eventFromAssocEnd)
                                                              : (revert
                                                                    ? eventFromAssocEnd
                                                                    : this.End2);

                        NavigationProperty navigationProperty = this.NavigationProperties.SingleOrDefault(
                            navProperty => navProperty.PersistentTypeOfNavigationProperty == persistentToFind);

                        return(new Tuple <NavigationProperty, OrmAssociationEnd>(navigationProperty, otherAssocEnd));
                    };


                    {
                        if (canChangeMultiplicity)
                        {
                            bool revert             = false;
                            var  definitions        = getDefinitions(revert);
                            var  navigationProperty = definitions.Item1;
                            var  otherAssocEnd      = definitions.Item2;

                            if (navigationProperty != null)
                            {
                                this.Store.MakeActionWithinTransaction(
                                    string.Format("Updating multiplicity on navigation property '{0}' to value '{1}'",
                                                  navigationProperty.Name, eventFromAssocEnd.Multiplicity),
                                    () =>
                                {
                                    navigationProperty.Multiplicity = otherAssocEnd.Multiplicity;
                                });
                            }
                        }

                        if (canChangePairTo && !eventFromAssocEnd.PairTo.IsDefault())
                        {
                            string newName = eventFromAssocEnd.PairTo.Value;

                            bool revert             = true;
                            var  definitions        = getDefinitions(revert);
                            var  navigationProperty = definitions.Item1;

                            if (navigationProperty != null)
                            {
                                this.Store.MakeActionWithinTransaction(
                                    string.Format("Updating name on navigation property '{0}' to value '{1}'",
                                                  navigationProperty.Name, newName),
                                    () =>
                                {
                                    navigationProperty.Name = newName;
                                });
                            }
                        }
                    }
                }
            }
        }