예제 #1
0
        private void Agregar_Click(object sender, EventArgs e)
        {
            String a = Clasea.Text;
            String b = Claseb.Text;

            if (a.Equals("") | b.Equals(""))
            {
                MessageBox.Show("No se puede crear la relacion, falta especificar alguna clase");
                return;
            }

            Relaciones nueva = new Relaciones();

            nueva.tipo   = UML.relacion;
            nueva.clasea = a;
            nueva.claseb = b;

            clasesuml.Relaciones.Add(nueva);
            MessageBox.Show("Relacion agregada");
            this.Close();
        }
예제 #2
0
파일: UML.cs 프로젝트: baf2117/compi2
        private void agregartree(ParseTreeNode raiz)
        {
            if (raiz == null)
            {
                return;
            }
            raiz = raiz.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0);
            ArrayList rela   = new ArrayList();
            String    nombre = raiz.ChildNodes.ElementAt(0).Token.Text;
            clasesuml nueva  = new clasesuml(nombre, null);

            foreach (clasesuml hijo in clasesuml.Lista)
            {
                if (hijo.Nombre.Equals(nombre))
                {
                    MessageBox.Show("Ya existe una clase con el nombre " + nombre);
                    return;
                }
            }


            ParseTreeNode cuerpo = raiz.ChildNodes.ElementAt(4);
            ParseTreeNode auxn;
            ArrayList     atributos1 = new ArrayList();
            ArrayList     relac      = new ArrayList();
            atributosuml  auxa;
            String        visi = "publico";

            foreach (ParseTreeNode nodo in cuerpo.ChildNodes)
            {
                auxa = new atributosuml();

                switch (nodo.Term.Name)
                {
                case "DECG":
                    visi = nodo.ChildNodes.ElementAt(0).Token.Text;
                    if (!nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).Term.Name.Equals("id"))
                    {
                        auxa.visibilidad = visi;
                        auxa.tipo        = 1;
                        auxa.tipo2       = nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).Token.Text;
                        auxa.Nombre      = nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).ChildNodes.ElementAt(0).Token.Text;
                        atributos1.Add(auxa);
                    }
                    else
                    {
                        auxn = nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(1);
                        if (auxn.ChildNodes.Count > 1)
                        {
                            Relaciones relb = new Relaciones();
                            relb.tipo   = 4;
                            relb.clasea = nombre;
                            relb.claseb = nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).Token.Text;
                            relac.Add(relb);
                        }
                        else if (nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(2).ChildNodes.Count > 0)
                        {
                            Relaciones relb = new Relaciones();
                            relb.tipo   = 4;
                            relb.claseb = nombre;
                            relb.clasea = nodo.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).Token.Text;
                            relac.Add(relb);
                        }
                    }


                    break;

                case "METODO":
                    auxa.tipo        = 2;
                    auxa.tipo2       = "metodo";
                    auxa.visibilidad = nodo.ChildNodes.ElementAt(0).Token.Text;
                    auxa.Nombre      = nodo.ChildNodes.ElementAt(1).Token.Text;
                    atributos1.Add(auxa);
                    break;

                case "FUNCION":
                    auxa.tipo        = 3;
                    auxa.tipo2       = nodo.ChildNodes.ElementAt(1).Token.Text;
                    auxa.visibilidad = nodo.ChildNodes.ElementAt(0).Token.Text;
                    auxa.Nombre      = nodo.ChildNodes.ElementAt(2).Token.Text;
                    atributos1.Add(auxa);
                    break;

                case "CONSTRUCTOR":
                    if (nodo.ChildNodes.Count > 2)
                    {
                        ParseTreeNode parametros = nodo.ChildNodes.ElementAt(1);
                        ParseTreeNode bloque     = nodo.ChildNodes.ElementAt(1);
                        if (parametros.Term.Name.Equals("PARAMETROS"))
                        {
                            foreach (ParseTreeNode para in parametros.ChildNodes)
                            {
                                Relaciones relb = new Relaciones();
                                relb.tipo   = 2;
                                relb.claseb = nombre;
                                relb.clasea = para.ChildNodes.ElementAt(0).Token.Text;
                                relac.Add(relb);
                            }
                            if (nodo.ChildNodes.Count > 3)
                            {
                                bloque = nodo.ChildNodes.ElementAt(3);
                            }
                        }
                        else
                        {
                            bloque = nodo.ChildNodes.ElementAt(2);
                        }

                        foreach (ParseTreeNode bloquesito in bloque.ChildNodes)
                        {
                            if (bloquesito.ChildNodes.ElementAt(1).ChildNodes.Count > 1)
                            {
                                Relaciones relb = new Relaciones();
                                relb.tipo   = 3;
                                relb.claseb = nombre;
                                relb.clasea = bloquesito.ChildNodes.ElementAt(1).ChildNodes.ElementAt(1).Token.Text;
                                relac.Add(relb);
                            }
                        }
                    }
                    break;
                }
            }



            if (raiz.ChildNodes.ElementAt(2).ChildNodes.Count != 0)
            {
                String hereda = raiz.ChildNodes.ElementAt(1).ChildNodes.ElementAt(0).Token.Text;
                foreach (clasesuml hijo in clasesuml.Lista)
                {
                    if (hijo.Nombre.Equals(hereda))
                    {
                        Relaciones rel = new Relaciones();
                        rel.tipo   = 1;
                        rel.clasea = nombre;
                        rel.claseb = hereda;
                        clasesuml.Relaciones.Add(rel);
                        goto siguiente;
                    }
                }
                MessageBox.Show("No existe la clase de la que se desea heredar: " + hereda);
                return;
            }

siguiente:
            foreach (Relaciones relach in relac)
            {
                clasesuml.Relaciones.Add(relach);
            }
            nueva.atributos = atributos1;
            clasesuml.Lista.Add(nueva);
            clases.Items.Add(nueva.Nombre);
        }