/// <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); }