internal override void GenerateSubCommands() { PSMClass psmClass = Project.TranslateComponent <PSMClass>(ClassGuid); foreach (PSMAttribute a in psmClass.PSMAttributes) { cmdDeletePSMAttribute da = new cmdDeletePSMAttribute(Controller); da.Set(a); Commands.Add(da); } foreach (PSMAssociation a in psmClass.ChildPSMAssociations) { cmdDeletePSMAssociation da = new cmdDeletePSMAssociation(Controller); da.Set(a); Commands.Add(da); } foreach (PSMGeneralization g in psmClass.GeneralizationsAsGeneral) { acmdDeletePSMGeneralization dg = new acmdDeletePSMGeneralization(Controller, g); Commands.Add(dg); } if (psmClass.GeneralizationAsSpecific != null) { Commands.Add(new acmdDeletePSMGeneralization(Controller, psmClass.GeneralizationAsSpecific)); } Commands.Add(new acmdRenameComponent(Controller, ClassGuid, "")); foreach (PSMClass representant in psmClass.Representants) { Commands.Add(new acmdSetRepresentedClass(Controller, representant, Guid.Empty)); } Commands.Add(new acmdSetRepresentedClass(Controller, ClassGuid, Guid.Empty)); Commands.Add(new acmdSetPSMClassInterpretation(Controller, ClassGuid, Guid.Empty)); Commands.Add(new acmdDeletePSMClass(Controller, ClassGuid)); }
internal override PropagationMacroCommand PrePropagation() { PIMClass pimClass = Project.TranslateComponent <PIMClass>(classGuid); List <PSMClass> list = pimClass.GetInterpretedComponents().Cast <PSMClass>().ToList <PSMClass>(); if (list.Count == 0) { return(null); } PropagationMacroCommand command = new PropagationMacroCommand(Controller) { CheckFirstOnlyInCanExecute = true }; command.Report = new CommandReport("Pre-propagation (update PIM class final property)"); foreach (PSMClass c in list) { if (c.GeneralizationsAsGeneral.Count > 0) { foreach (PSMGeneralization g in c.GeneralizationsAsGeneral) { //This should be only in case of: Debug.Assert(g.General.Interpretation == g.Specific.Interpretation); //If not, the PSM class was still involved in a generalization and acmdDeletePSMGeneralization d1 = new acmdDeletePSMGeneralization(Controller, g) { Propagate = false }; command.Commands.Add(d1); } } acmdUpdatePSMClassFinal d = new acmdUpdatePSMClassFinal(Controller, c, newFinal) { Propagate = false }; command.Commands.Add(d); } return(command); }