public override void ElementDeleted(ElementDeletedEventArgs e)
        {
            DataContractBaseCanBeContainedOnContracts link = e.ModelElement as DataContractBaseCanBeContainedOnContracts;

            Debug.Assert(link != null, "link != null");

            DataContractBase sourceDataContractBase = link.DataContractBase;
            Contract         targetContractElement  = link.Contract;

            if (targetContractElement is DataContract)
            {
                DataContract dataContractElement = targetContractElement as DataContract;

                RemoveDataElement(
                    dataContractElement.Store,
                    dataContractElement.DataMembers,
                    GetDataElement(dataContractElement.DataMembers, link.Id));
            }
            else if (targetContractElement is FaultContract)
            {
                FaultContract faultContractElement = targetContractElement as FaultContract;

                RemoveDataElement(
                    faultContractElement.Store,
                    faultContractElement.DataMembers,
                    GetDataElement(faultContractElement.DataMembers, link.Id));
            }

            base.ElementDeleted(e);
        }
Ejemplo n.º 2
0
        public void ShouldGetNewNameOnMultipleTargets()
        {
            DataContract source = new DataContract(Store);

            source.Name = "Source";
            DataContract target = new DataContract(Store);

            target.Name = "Target";
            DataContractBaseCanBeContainedOnContracts link = new DataContractBaseCanBeContainedOnContracts(source, target);
            ModelElementReference dataElement = new ModelElementReference(Store);

            dataElement.Name = "DcdeName";
            dataElement.SetLinkedElement(link.Id);
            source.DataMembers.Add(dataElement);
            AggregationConnectionBuilder.Connect(source, target);

            Assert.AreEqual(1, target.DataMembers.Count);
            dataElement = (ModelElementReference)target.DataMembers[0];
            Assert.AreEqual("Source", dataElement.Name);

            AggregationConnectionBuilder.Connect(source, target);

            Assert.AreEqual(2, target.DataMembers.Count);
            dataElement = (ModelElementReference)target.DataMembers[1];
            Assert.AreEqual("Source1", dataElement.Name);

            AggregationConnectionBuilder.Connect(source, target);

            Assert.AreEqual(3, target.DataMembers.Count);
            dataElement = (ModelElementReference)target.DataMembers[2];
            Assert.AreEqual("Source2", dataElement.Name);
        }
Ejemplo n.º 3
0
        public void ShouldNotRejectSameLink()
        {
            DataContract source = new DataContract(Store);
            DataContract target = new DataContract(Store);
            DataContractBaseCanBeContainedOnContracts link = new DataContractBaseCanBeContainedOnContracts(source, target);
            ModelElementReference dataElement = new ModelElementReference(Store);

            dataElement.SetLinkedElement(link.Id);
            source.DataMembers.Add(dataElement);
            bool result = AggregationConnectionBuilder.CanAcceptSourceAndTarget(source, target);

            Assert.IsTrue(result);
        }
Ejemplo n.º 4
0
        private List <DataMember> LoadLinkedElements(DataContractBase sourceElement)
        {
            DataContract targetElement = new DataContract(Store);

            targetElement.Name = DataContractLinkedElementType;
            DataContractBaseCanBeContainedOnContracts link = new DataContractBaseCanBeContainedOnContracts(sourceElement, targetElement);

            List <DataMember>     dataElements = new List <DataMember>();
            ModelElementReference element1     = new ModelElementReference(Store);

            element1.Name = sourceElement.Name;
            element1.Type = sourceElement.Name;
            element1.SetLinkedElement(link.Id);

            dataElements.Add(element1);
            return(dataElements);
        }
Ejemplo n.º 5
0
        public static ElementLink Connect(ModelElement source, ModelElement target, string targetDataElementName)
        {
            Guard.ArgumentNotNull(source, "source");
            Guard.ArgumentNotNull(target, "target");

            if (CanAcceptSourceAndTarget(source, target))
            {
                if (source is DataContractBase)
                {
                    if (target is DataContract)
                    {
                        DataContractBase sourceAccepted = (DataContractBase)source;
                        Contract         targetAccepted = (Contract)target;
                        ElementLink      result         = new DataContractBaseCanBeContainedOnContracts(sourceAccepted, targetAccepted);
                        if (DomainClassInfo.HasNameProperty(result))
                        {
                            DomainClassInfo.SetUniqueName(result);
                        }

                        using (Transaction transaction = targetAccepted.Store.TransactionManager.BeginTransaction())
                        {
                            ModelElementReference dataElement = target.Store.ElementFactory.CreateElement(ModelElementReference.DomainClassId) as ModelElementReference;
                            dataElement.ModelElementGuid = result.Id;
                            dataElement.Type             = sourceAccepted.Name;

                            LinkedElementCollection <DataMember> members = ((DataContract)target).DataMembers;

                            dataElement.Name = GetDataElementName(sourceAccepted.Name, targetAccepted.Name, members);
                            members.Add(dataElement);

                            transaction.Commit();
                        }
                        return(result);
                    }
                }
            }

            Debug.Fail("Having agreed that the connection can be accepted we should never fail to make one.");
            throw new InvalidOperationException();
        }