/// <summary>
        /// Generate an EA-Module into the defined package. It adds the EA Module reference if exists.
        /// - Component with Stereotype 'LE Modul'
        /// - <tbd>Tagged values are missing(ASIL level)</tbd>
        /// </summary>
        public void Generate(EA.Package pkg)
        {
            if (El == null)
            {
                // Create Module
                El            = (EA.Element)pkg.Elements.AddNew(Name, "Component");
                El.Stereotype = @"LE Modul";
                El.Update();
                pkg.Elements.Refresh();
            }
            //-------------------------------------------------------
            // Create Ports
            var portNames = new List <string>();

            foreach (var functionItem in RequiredFunctions)
            {
                var interfaceName = functionItem.Interface.Name;
                if (!portNames.Contains(interfaceName))
                {
                    portNames.Add(interfaceName);
                }
            }
            foreach (var functionItem in ProvidedFunctions)
            {
                var interfaceName = functionItem.Interface.Name;
                if (!portNames.Contains(interfaceName))
                {
                    portNames.Add(interfaceName);
                }
            }

            var existingPorts = EaElement.GetEmbeddedElements(El);


            // Create new ports
            var newPorts = from s in portNames
                           where existingPorts.All(i => s != i.Name)
                           select s;
            // Delete not used ports
            var deletePorts = from s in existingPorts
                              where portNames.All(i => s.Name != i)
                              orderby s.Pos descending
                              select s;

            // delete not needed ports
            foreach (var deletePort in deletePorts)
            {
                El.EmbeddedElements.Delete(deletePort.Pos);
            }
            El.EmbeddedElements.Refresh();


            // create new ports
            foreach (var portName in newPorts)
            {
                var newPort = (EA.Element)El.EmbeddedElements.AddNew(portName, "Port");
                newPort.Name = portName;
            }
        }
        /// <summary>
        /// Generate an EA-Interface into the defined package. It adds the EA Interface reference if exists.
        /// </summary>
        public int Generate(EA.Package pkg)
        {
            int newMethods = 0;

            if (El == null)
            {
                // Create Interface
                El = (EA.Element)pkg.Elements.AddNew(Name, "Interface");
                El.Update();
            }
            // Generate operations for Interface
            foreach (FunctionItem functionItem in ProvidedFunctions)
            {
                EA.Method m        = functionItem.Op;
                bool      isUpdate = true;
                if (m == null)
                {
                    isUpdate = false;
                    // new function
                    m = (EA.Method)El.Methods.AddNew(functionItem.Name, "Operation");
                    newMethods++;
                }
                m.ReturnType = functionItem.ReturnType;
                m.Update();
                if (isUpdate)
                {
                    DeleteParameter(m);
                }
                foreach (ParameterItem par in functionItem.ParameterList)
                {
                    string       parName = par.Name;
                    EA.Parameter p       = (EA.Parameter)m.Parameters.AddNew(parName, "Parameter");
                    p.Position = par.Position;
                    p.Type     = par.Type;
                    p.IsConst  = par.IsConst;
                    p.Update();
                    m.Parameters.Refresh();
                    functionItem.Op = m;
                }
                m.Parameters.Refresh();



                functionItem.Op = m;
            }
            El.Methods.Refresh();
            return(newMethods);
        }