예제 #1
0
        public override MocaNode serializeToMocaTree(MocaNode actNode)
        {
            MocaNode dummyNode = null;

            EcoreUtil.computeLowerUpperBound(ConnectorEnd.getRealConnectorEnd().Cardinality, ref lowerBound, ref upperBound);

            if (ConnectorEnd.getRealConnectorEnd().End == "Client")
            {
                dummyNode = actNode.appendChildNode("ClientReference");

                SQLElement clientEClass = Repository.GetElementByID(this.EaConnector.getRealConnector().ClientID);
                typeGUID = clientEClass.ElementGUID;
                refGUID  = this.EaConnector.getRealConnector().ConnectorGUID + "Client";
                if (this.EaConnector.getRealConnector().SupplierEnd.Role != "")
                {
                    oppositeGUID = this.EaConnector.getRealConnector().ConnectorGUID + "Supplier";
                }


                containment = this.EaConnector.getRealConnector().SupplierEnd.Aggregation == 2;
            }

            else if (ConnectorEnd.getRealConnectorEnd().End == "Supplier")
            {
                dummyNode = actNode.appendChildNode("SupplierReference");
                SQLElement supplierEClass = Repository.GetElementByID(this.EaConnector.getRealConnector().SupplierID);
                typeGUID = supplierEClass.ElementGUID;
                refGUID  = this.EaConnector.getRealConnector().ConnectorGUID + "Supplier";
                if (this.EaConnector.getRealConnector().ClientEnd.Role != "")
                {
                    oppositeGUID = this.EaConnector.getRealConnector().ConnectorGUID + "Client";
                }


                containment = this.EaConnector.getRealConnector().ClientEnd.Aggregation == 2;
            }

            if (Navigable)
            {
                MocaNode ereferenceNode = dummyNode.appendChildNode("EReference");
                ereferenceNode.appendChildAttribute("typeGuid", typeGUID);
                if ((ConnectorEnd.Role == "" || ConnectorEnd.getRealConnectorEnd().Role == null))
                {
                    ereferenceNode.appendChildAttribute("name", this.Name);
                }
                else
                {
                    ereferenceNode.appendChildAttribute("name", ConnectorEnd.getRealConnectorEnd().Role);
                }
                ereferenceNode.appendChildAttribute(Main.GuidStringName, refGUID);
                ereferenceNode.appendChildAttribute("lowerBound", lowerBound);
                ereferenceNode.appendChildAttribute("upperBound", upperBound);
                ereferenceNode.appendChildAttribute("containment", (containment + "").ToLower());
                if (oppositeGUID != "")
                {
                    ereferenceNode.appendChildAttribute("oppositeGuid", oppositeGUID);
                }
            }
            return(dummyNode);
        }
예제 #2
0
        public static void configureConnectorEnd(SQLRepository sqlRepository, EA.ConnectorEnd sourceOrTarget, int valueId, String cardinality)
        {
            EA.Element targetEClass = sqlRepository.GetElementByID(valueId).getRealElement();
            sourceOrTarget.Role = targetEClass.Name.Substring(0, 1).ToLower() + targetEClass.Name.Substring(1, targetEClass.Name.Length - 1);

            // If the association end has a cardinality larger than 1, add a 'plural s' to the role name.
            String lowerBound = "";
            String upperBound = "";

            EcoreUtil.computeLowerUpperBound(cardinality, ref lowerBound, ref upperBound);
            if (upperBound == EcoreUtil.ARBITRARY_MANY_MULTIPLICITY_PLACEHOLDER || int.Parse(upperBound) > 1)
            {
                sourceOrTarget.Role = sourceOrTarget.Role + "s";
            }

            sourceOrTarget.Cardinality = cardinality;
            sourceOrTarget.Update();
        }
예제 #3
0
        private String checkCardinality(String cardinality)
        {
            if (cardinality != "")
            {
                string lowerBound = "";
                string upperBound = "";
                int    lb         = int.MinValue;
                int    ub         = int.MinValue;
                EcoreUtil.computeLowerUpperBound(cardinality, ref lowerBound, ref upperBound);

                try
                {
                    lb = int.Parse(lowerBound);
                    if (lb < 0)
                    {
                        throw new Exception();
                    }
                }
                catch
                {
                    return("multiplicity is invalid: " + cardinality);
                }

                if (upperBound == "*")
                {
                    return("");
                }

                try
                {
                    ub = int.Parse(upperBound);
                    if ((ub < 0 || lb > ub) && ub != -1)
                    {
                        throw new Exception();
                    }
                }
                catch
                {
                    return("multiplicity is invalid: " + cardinality);
                }
            }
            return("");
        }
예제 #4
0
        public void TestComputeLowerUpperBound_SingleCardinality()
        {
            EcoreUtil.computeLowerUpperBound("1", ref lowerBound, ref upperBound);

            AreEqualLowerAndUpperBounds("1", lowerBound, "1", upperBound);
        }
예제 #5
0
        public void TestComputeLowerUpperBound_ZeroOrMore()
        {
            EcoreUtil.computeLowerUpperBound("0..*", ref lowerBound, ref upperBound);

            AreEqualLowerAndUpperBounds("0", lowerBound, EcoreUtil.ARBITRARY_MANY_MULTIPLICITY_PLACEHOLDER, upperBound);
        }
예제 #6
0
        public void TestComputeLowerUpperBound_OneOrTwo()
        {
            EcoreUtil.computeLowerUpperBound("1..2", ref lowerBound, ref upperBound);

            AreEqualLowerAndUpperBounds("1", lowerBound, "2", upperBound);
        }