Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }