/// <summary>
 /// Delete dependencies of element within the ReqIF Packages
 /// </summary>
 /// <param name="el"></param>
 /// <param name="packageGuidList"></param>
 private void DeleteDependencies(EA.Element el, List <ReqIfModuleAssign> packageGuidList)
 {
     for (int i = el.Connectors.Count - 1; i >= 0; i--)
     {
         var    elConnector   = (EA.Connector)el.Connectors.GetAt((short)i);
         var    elTarget      = _rep.GetElementByID(elConnector.SupplierID);
         string pkgTargetGuid = _rep.GetPackageByID(elTarget.PackageID).PackageGUID;
         // Check if guid exists
         if (packageGuidList.Exists(y => y.Guid == pkgTargetGuid))
         {
             el.Connectors.DeleteAt((short)i, true);
         }
     }
     el.Refresh();
     el.Update();
 }
        private EnAr.Element ConstructClassifier(Ecore.IEClassifier eClassifier)
        {
            if (eclassifier2Class.ContainsKey(eClassifier))
            {
                return(eclassifier2Class[eClassifier]);
            }

            EnAr.Element result;

            if (eClassifier is Ecore.IEClass)
            {
                result = ConstructClass((Ecore.IEClass)eClassifier);
            }
            else if (eClassifier is Ecore.IEEnum)
            {
                result = ConstructEnumeration((Ecore.IEEnum)eClassifier);
            }
            else
            {
                result = ConstructPrimitiveType((Ecore.IEDataType)eClassifier);
            }

            EA.Element clazzEa = explorer.GetEaObject(result);

            // Manage type parameters (eg. T in MyClass<T>)
            foreach (Ecore.IETypeParameter eTypeParameter in eClassifier.ETypeParameters)
            {
                dynamic eaTemplateParameter = clazzEa.TemplateParameters.AddNew(eTypeParameter.Name, "");
                eaTemplateParameter.Constraint = "";
                List <string> guids = new List <string>();
                foreach (Ecore.IEGenericType eGenericType in eTypeParameter.EBounds)
                {
                    EnAr.Element constraintClass = ConstructClassifier(eGenericType.EClassifier);
                    guids.Add(constraintClass.ElementGUID);
                }
                eaTemplateParameter.Constraint = string.Join(",", guids);
                eaTemplateParameter.Update();
            }
            clazzEa.TemplateParameters.Refresh();
            clazzEa.Refresh();
            clazzEa.Update();
            return(result);
        }
        /// <summary>
        /// Set attributes and tags of supplier port when port is created or connected.
        /// </summary>
        /// <param name="connectorId">The created item flow connector.</param>
        /// <param name="portStereotype">The stereotype of the port.</param>
        /// <param name="connectorStereotype">The stereotype of the port connectiong flow connector.</param>
        /// <param name="supplierName">The EA default name for the new created supplier port.</param>
        public void SetPropertyTypeAndDirectionOnFlowPortCreation(int connectorId,
                                                                  string portStereotype,
                                                                  string connectorStereotype,
                                                                  string supplierName)
        {
            EAShared.Connector connector = Rep.GetConnectorByID(connectorId);

            EAShared.Element client   = Rep.GetElementByID(connector.ClientID);
            EAShared.Element supplier = Rep.GetElementByID(connector.SupplierID);

            if ((supplier.Stereotype == portStereotype) &&
                (connector.Stereotype == connectorStereotype))
            {
                CopyTaggedValuesFromClientToSupplierPort(client, supplier);

                if (supplier.PropertyType == 0)
                {
                    supplier.PropertyType = client.PropertyType;
                    if (supplier.Alias == "")
                    {
                        supplier.Alias = client.Alias;
                    }

                    if (supplier.Multiplicity == "")
                    {
                        supplier.Multiplicity = client.Multiplicity;
                    }

                    // Copy notes text from client to supplier
                    if (supplier.Notes == "")
                    {
                        supplier.Notes = client.Notes;
                    }
                }
                else if (supplier.PropertyType == client.PropertyType)
                {
                    if (supplier.Alias == "")
                    {
                        supplier.Alias = client.Alias;
                    }

                    if (supplier.Multiplicity == "")
                    {
                        supplier.Multiplicity = client.Multiplicity;
                    }

                    // Copy notes text from client to supplier
                    if (supplier.Notes == "")
                    {
                        supplier.Notes = client.Notes;
                    }
                }

                if (supplier.Name.StartsWith(supplierName) || supplier.Name == "")
                {
                    supplier.Name = client.Name;
                }


                supplier.Update();
                supplier.Refresh();
            } // if
        }