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