Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. window.onload = initAll;
  2. var zonaEntidades;
  3. var zonaRelaciones;
  4. var zonaRelacional;
  5. var zonaMultivaluados;
  6.  
  7. function initAll() {
  8.     document.getElementsByTagName("form")[0].onsubmit = function() {return agregarER();}
  9.  
  10.     zonaEntidades = document.getElementById("entidades");
  11.     zonaRelaciones = document.getElementById("relaciones");
  12.     zonaRelacional = document.getElementById("relacional");
  13.     zonaMultivaluados = document.getElementById("multivaluados");
  14. }
  15.  
  16. function anadir(tipo){
  17.    
  18.     var nuevaEntidad = document.createElement("table");
  19.     nuevaEntidad.setAttribute('border', '2');
  20.     var numero=Math.random();
  21.     nuevaEntidad.setAttribute('id', ''+numero+'');
  22.     var espacio = document.createElement("br");
  23.     espacio.setAttribute('name',''+numero+'');
  24.    
  25.     var nuevoHead = document.createElement("thead");
  26.     var nuevoBody = document.createElement("tbody");
  27.     var nuevoPie = document.createElement("tfoot");
  28.    
  29.     if(tipo==0){
  30.         nuevoHead.insertRow(0);
  31.         nuevoHead.rows[0].insertCell(0);
  32.         nuevoHead.rows[0].cells[0].innerHTML = 'Entidad: <input type="text" onchange="crearRelaciona()" onblur="actualizarEntidadesLista()"> Es Débil : <input type="checkbox" onchange="crearRelaciona();actualizarEntidadesLista();esDebil('+numero+')"/><input type="button" value="Eliminar Entidad" onclick="eliminar(0,'+ numero + ')">'
  33.         nuevoPie.insertRow(0);
  34.         nuevoPie.rows[0].insertCell(0);
  35.         nuevoPie.rows[0].cells[0].innerHTML = '<input type="button" value="agregarAtributo" onblur="actualizarEntidadesLista()" onclick="agregarAtributo(0,'+ numero + ')">'
  36.     }else{
  37.         nuevoHead.insertRow(0);
  38.         nuevoHead.rows[0].insertCell(0);
  39.         nuevoHead.rows[0].cells[0].innerHTML = 'Entidad: <select name="entidadesLista"></select>'
  40.         nuevoHead.rows[0].insertCell(1);
  41.         nuevoHead.rows[0].cells[1].innerHTML = 'Cardinalidad: <select><option>1</option><option>N</option></select>'
  42.         nuevoHead.rows[0].insertCell(2);
  43.         nuevoHead.rows[0].cells[2].innerHTML = 'Relacion: <input type"text" onchange="crearRelaciona()">'
  44.         nuevoHead.rows[0].insertCell(3);
  45.         nuevoHead.rows[0].cells[3].innerHTML = 'Cardinalidad: <select><option>1</option><option>N</option></select>'
  46.         nuevoHead.rows[0].insertCell(4);
  47.         nuevoHead.rows[0].cells[4].innerHTML = 'Entidad: <select name="entidadesLista"></select>'  
  48.         nuevoPie.insertRow(0);
  49.         nuevoPie.rows[0].insertCell(0);
  50.         nuevoPie.rows[0].cells[0].innerHTML = '<input type="button" value="agregarAtributo" onclick="agregarAtributo(1,'+ numero + ')"><input type="button" value="Eliminar Relación" onclick="eliminar(1,'+ numero + ')">'
  51.     }
  52.    
  53.     nuevaEntidad.appendChild(nuevoHead);   
  54.     nuevaEntidad.appendChild(nuevoBody);
  55.     nuevaEntidad.appendChild(nuevoPie);
  56.     if(tipo==0){
  57.         zonaEntidades.appendChild(nuevaEntidad);
  58.         zonaEntidades.appendChild(espacio);
  59.     }else{
  60.         zonaRelaciones.appendChild(nuevaEntidad);
  61.         zonaRelaciones.appendChild(espacio);
  62.     }
  63. }
  64.  
  65. function eliminar(tipo, cual) {
  66.     var cualBorrar = document.getElementById(cual);
  67.     if(tipo==0){       
  68.         zonaEntidades.removeChild(cualBorrar);
  69.         var cualBorrar = document.getElementsByName(cual);
  70.         zonaEntidades.removeChild(cualBorrar[0]);
  71.     }
  72.     else{
  73.         zonaRelaciones.removeChild(cualBorrar);
  74.         var cualBorrar = document.getElementsByName(cual);
  75.         zonaRelaciones.removeChild(cualBorrar[0]);
  76.     }
  77.     actualizarEntidadesLista()
  78.     crearRelaciona();
  79. }
  80.  
  81. function echameLosAydisDeEntidades()
  82. {
  83.     var numEntidades=zonaEntidades.getElementsByTagName("table").length;
  84.     var arregloId=new Array(numEntidades);
  85.     if(numEntidades==0)
  86.     {
  87.         alert("No hay entidades");
  88.     }
  89.     else
  90.     {
  91.         for(var i=0;i<numEntidades;i++)
  92.         {
  93.             var id=zonaEntidades.getElementsByTagName("table")[i].id;
  94.  
  95.             if(id=="")
  96.                 {
  97.                     arregloId[i]="Entidad sin id";
  98.                 }
  99.             else{
  100.                 arregloId[i]=id;
  101.             }
  102.         }
  103.         return arregloId;
  104.     }
  105. }
  106.  
  107. function agregarAtributo(tipo, aCual){ 
  108.    
  109.     numero = Math.random();
  110.     queTabla = document.getElementById(aCual);
  111.     queFila = queTabla.tBodies[0].rows.length;
  112.     if(queFila==0){
  113.         queTabla.tBodies[0].insertRow(queFila);
  114.         queColumna=0;          
  115.     }else
  116.         queColumna = queTabla.tBodies[0].rows[0].cells.length
  117.     queTabla.tBodies[0].rows[0].insertCell(queColumna);
  118.     queTabla.tBodies[0].rows[0].cells[queColumna].setAttribute('id', ''+numero+'');
  119.     if(tipo==0){       
  120.         queTabla.tBodies[0].rows[0].cells[queColumna].innerHTML = 'Atributo: <input type="text" onchange="crearRelaciona();actualizarEntidadesLista()"> Multivaluado: <input type="checkbox" onchange="crearRelaciona();actualizarEntidadesLista();esMulti('+aCual+','+numero+')"/> Llave <input type="checkbox" onchange="crearRelaciona();actualizarEntidadesLista();esLlave('+aCual+','+numero+')"/><input type="button"  value="Eliminar Atributo"  onclick="eliminarAtributo('+ aCual +','+numero+');actualizarEntidadesLista()">'
  121.     }else
  122.         queTabla.tBodies[0].rows[0].cells[queColumna].innerHTML = 'Atributo: <input type="text" onchange="crearRelaciona();actualizarEntidadesLista()" onblur="actualizarEntidadesLista()"><input type="button"  value="Eliminar Atributo"  onclick="eliminarAtributo('+ aCual +','+numero+');actualizarEntidadesLista()">'
  123.     actualizarEntidadesLista()
  124.    
  125. }
  126.  
  127. function agregarMultivaluado(aCual, queCelda){
  128.     var numero=Math.random();
  129.     var queTabla = document.getElementById(aCual);
  130.     var celda = document.getElementById(queCelda);
  131.    
  132. //  queTabla.tBodies[0].rows[0].cells[i].getElementsByTagName("input")[0].value;
  133.     var nuevoEsquema = document.createElement("table");
  134.     nuevoEsquema.setAttribute('border', '2');
  135.     nuevoEsquema.setAttribute('id', ''+numero+'');
  136.     nuevoEsquema.setAttribute('name',''+aCual+'');
  137.     var espacio = document.createElement("br");
  138.     espacio.setAttribute('name',''+numero+'');
  139.    
  140.     var nuevoHead = document.createElement("thead");
  141.     var nuevoBody = document.createElement("tbody");
  142.     var nuevoPie = document.createElement("tfoot");
  143.    
  144.     nuevoHead.insertRow(0);
  145.     nuevoHead.rows[0].insertCell(0);
  146.     nuevoHead.rows[0].cells[0].innerHTML = 'Multivaluado de: ' + queTabla.tHead.rows[0].cells[0].getElementsByTagName("input")[0].value + ' del atributo ' + celda.getElementsByTagName("input")[0].value;
  147.    
  148.     nuevoBody.insertRow(0);
  149.     nuevoBody.rows[0].insertCell(0);
  150.     nuevoBody.rows[0].cells[0].innerHTML = celda.getElementsByTagName("input")[0].value;
  151.  
  152.     nuevoBody.insertRow(1);
  153.     nuevoBody.rows[1].insertCell(0);
  154.     nuevoBody.rows[1].cells[0].innerHTML = "Valores";
  155.    
  156.     nuevoEsquema.appendChild(nuevoHead);   
  157.     nuevoEsquema.appendChild(nuevoBody);
  158.     nuevoEsquema.appendChild(nuevoPie);
  159.     if(tipo==0){
  160.         zonaEntidades.appendChild(nuevoEsquema);
  161.         zonaEntidades.appendChild(espacio);
  162.     }else{
  163.         zonaRelaciones.appendChild(nuevoEsquema);
  164.         zonaRelaciones.appendChild(espacio);
  165.     }
  166. }
  167.  
  168. function eliminarMultivaluado(aCual, queCelda){
  169.    
  170. }
  171.  
  172. function esLlave(aCual, queCelda){
  173.     var tabla = document.getElementById(aCual);
  174.     var llave;
  175.     if(tabla.tBodies[0].rows[0].cells[queCelda].getElementsByTagName("input")[2].checked==true)
  176.         tabla.tBodies[0].rows[0].cells[queCelda].getElementsByTagName("input")[1].checked=false;
  177.        
  178. }
  179. function esMulti(aCual, queCelda){
  180.     var tabla = document.getElementById(aCual);
  181.     var multi;
  182.     if(tabla.tBodies[0].rows[0].cells[queCelda].getElementsByTagName("input")[1].checked==true){
  183.         tabla.tBodies[0].rows[0].cells[queCelda].getElementsByTagName("input")[2].checked=false;
  184.         multi = 0;
  185.     }
  186.     else
  187.         multi = 1;
  188.     switch(multi){
  189.         case 0:
  190.             agregarMultivaluado(aCual, queCelda);
  191.             break;
  192.         case 1:
  193.             eliminarMultivaluado(aCual, queCelda);
  194.             break;
  195.     }
  196.    
  197. }
  198.  
  199. function nuevoDebil(id)
  200. {
  201.     var nuevaEntidadD = document.createElement("table");
  202.     nuevaEntidadD.setAttribute('border', '2');
  203.     var numero=Math.random();
  204.     nuevaEntidadD.setAttribute('id', ''+numero+'');
  205.     var espacio = document.createElement("br");
  206.     espacio.setAttribute('name',''+numero+'');
  207.     var nom=document.getElementById(id).tHead.rows[0].cells[0].getElementsByTagName("input")[0].value;
  208.     var nuevoHead = document.createElement("thead");
  209.     var nuevoBody = document.createElement("tbody");
  210.     var nuevoPie = document.createElement("tfoot");
  211.    
  212.     nuevoHead.insertRow(0);
  213.     nuevoHead.rows[0].insertCell(0);
  214.     nuevoHead.rows[0].cells[0].innerHTML = 'Entidad: <select name="debil"><option>'+nom+'</option></select>'
  215.     nuevoHead.rows[0].insertCell(1);
  216.     nuevoHead.rows[0].cells[1].innerHTML = 'Cardinalidad: <select><option>1</option><option>N</option></select>'
  217.     nuevoHead.rows[0].insertCell(2);
  218.     nuevoHead.rows[0].cells[2].innerHTML = 'Relacion: <input type"text" value="Pertenece a" onchange="crearRelaciona()" disabled=true>'
  219.     nuevoHead.rows[0].insertCell(3);
  220.     nuevoHead.rows[0].cells[3].innerHTML = 'Cardinalidad: <select><option>1</option><option>N</option></select>'
  221.     nuevoHead.rows[0].insertCell(4);
  222.     nuevoHead.rows[0].cells[4].innerHTML = 'Entidad: <select name="entidadesLista"></select>'  
  223.     nuevoPie.insertRow(0);
  224.     nuevoPie.rows[0].insertCell(0);
  225.     nuevoPie.rows[0].cells[0].innerHTML = '<input type="button" value="agregarAtributo" onclick="agregarAtributo(1,'+ numero + ')">'
  226.     nuevaEntidadD.appendChild(nuevoHead);  
  227.     nuevaEntidadD.appendChild(nuevoBody);
  228.     nuevaEntidadD.appendChild(nuevoPie);
  229.     zonaRelaciones.appendChild(nuevaEntidadD);
  230.     zonaRelaciones.appendChild(espacio);
  231.     actualizarEntidadesLista();
  232. }
  233. function actualizaDebil(id)
  234. {
  235.     if(zonaRelaciones.getElementsByTagName("table").length!=0){
  236.         var listas = document.getElementsByName("debil");
  237.         var atributosLlave = new Array();
  238.         var atributos = new Array();   
  239.         atributosLlave = echameLosAtributos(2,id);
  240.         atributos = echameLosAtributos(0,id);
  241.         if(atributosLlave!=0 && atributos!=0){
  242.             for(var i=0;i<listas.length;i++)
  243.             {
  244.                 if(listas[i].options[0].text==document.getElementById(id).tHead.rows[0].cells[0].getElementsByTagName("input")[0].value)
  245.                 {
  246.                     listas[i].options[0].value="";
  247.                     for(var k=0; k<atributosLlave.length; k++)
  248.                         if(atributosLlave[k]=="on")
  249.                         if(listas[i].options[0].value!="")
  250.                             listas[i].options[0].value += ","+atributos[k];
  251.                         else
  252.                             listas[i].options[0].value += atributos[k];
  253.                 }
  254.             }
  255.         }
  256.         else
  257.         {
  258.             if(atributosLlave==0)
  259.             alert("No hay atributo llave en "+document.getElementById(id).tHead.rows[0].cells[0].getElementsByTagName("input")[0].value);
  260.             else
  261.             alert("No hay atributos en "+entidadesNombres[j]);
  262.         }
  263.     }
  264. }
  265. function quitarRDebil(id)
  266. {
  267.     var relaciones=zonaRelaciones.getElementsByTagName("table");
  268.     var nombre=document.getElementById(id).tHead.rows[0].cells[0].getElementsByTagName("input")[0].value;
  269.     if(relaciones.length!=0)
  270.     {
  271.         for(var i=0;i<relaciones.length;i++)
  272.         {
  273.             var fila=relaciones[i].tHead.rows[0];
  274.             if(fila.cells[0].getElementsByTagName("select")[0].name=="debil" && fila.cells[0].getElementsByTagName("select")[0].getElementsByTagName("option")[0].text==nombre)
  275.             {
  276.                 eliminar(1,relaciones[i].id);
  277.             }
  278.         }
  279.    
  280.     }
  281. }
  282.  
  283.  
  284. function esDebil(aCual){
  285.     var tabla = document.getElementById(aCual);
  286.     if(tabla.tHead.rows[0].cells[0].getElementsByTagName("input")[1].checked==true)
  287.     {
  288.         nuevoDebil(aCual);
  289.         actualizaDebil(aCual);
  290.         document.getElementById(aCual).tHead.rows[0].cells[0].getElementsByTagName("input")[2].setAttribute('onClick','quitarRDebil('+aCual+');eliminar(0,'+ aCual + ')');
  291.     }
  292.     else
  293.         quitarRDebil(aCual);
  294. }
  295.  
  296.  
  297. function actualizarEntidadesLista(){
  298.     if(zonaRelaciones.getElementsByTagName("table").length!=0){
  299.         var listas = document.getElementsByName("entidadesLista");
  300.    
  301.         var entidadesNombres = echameLosNombres();
  302.         for(var i=0; i<listas.length; i++)
  303.                 listas[i].options.length =0;
  304.                
  305.         var entidadesIds = echameLosAydisDeEntidades();
  306.        
  307.        
  308.             var atributosLlave = new Array(entidadesIds.length);
  309.             var atributos = new Array(entidadesIds.length);
  310.             for(var j=0; j<entidadesNombres.length; j++){
  311.                 atributosLlave = echameLosAtributos(2,entidadesIds[j]);
  312.                 atributos = echameLosAtributos(0,entidadesIds[j]);
  313.                 if(atributosLlave!=0 && atributos!=0){
  314.                     for(i=0; i<listas.length; i++)
  315.                     {
  316.                         listas[i].options[j] = new Option(""+entidadesNombres[j]); 
  317.                         listas[i].options[j].value=entidadesIds[j];
  318.                         listas[i].options[j].value="";
  319.                         for(var k=0; k<atributosLlave.length; k++)
  320.                            
  321.                             if(atributosLlave[k]=="on")
  322.                             if(listas[i].options[j].value!="")
  323.                                 listas[i].options[j].value += ","+atributos[k];
  324.                             else
  325.                                 listas[i].options[j].value += atributos[k];
  326.                                 //alert(listas[i].value);
  327.                     }
  328.                 }
  329.                 else
  330.                 {
  331.                     if(atributosLlave==0)
  332.                     alert("No hay atributo llave en "+entidadesNombres[j]);
  333.                     else
  334.                     alert("No hay atributos en "+entidadesNombres[j]);
  335.                 }
  336.             }
  337.     }  
  338. }
  339. function eliminarAtributo(aCual, cualAt){
  340.     queTabla = document.getElementById(aCual);
  341.     var quitarCual = document.getElementById(cualAt);
  342.     if(quitarCual != 0){
  343.         queTabla.tBodies[0].rows[0].removeChild(quitarCual);           
  344.         if(queTabla.tBodies[0].rows[0].cells.length==0)
  345.             queTabla.tBodies[0].deleteRow(0);
  346.     }else
  347.         alert("No hay atributos que borrar");
  348.    
  349.     actualizarEntidadesLista()
  350. }
  351.  
  352. function crearRelaciona(){
  353.     zonaRelacional.innerHTML="";
  354.     var tablas = zonaEntidades.getElementsByTagName("table");
  355.     var nombre = echameLosNombres();
  356.     var i;
  357.     var j;
  358.     for (i=0; i<tablas.length; i++) {
  359.         var nomVal = nombre[i];
  360.         var attrs = echameLosAtributos(0,echameLosAydisDeEntidades()[i]);
  361.         var key = echameLosAtributos(2,echameLosAydisDeEntidades()[i]);
  362.         var mul = echameLosAtributos(1,echameLosAydisDeEntidades()[i]);
  363.         var nuevoEsquema = document.createElement("table");
  364.         nuevoEsquema.setAttribute('border','2');
  365.         var numero=Math.random();
  366.         nuevoEsquema.setAttribute('id', ''+numero+'');
  367.         var espacio = document.createElement("br");
  368.         espacio.setAttribute('name',''+numero+'');
  369.         var nuevoHead = document.createElement("thead");
  370.         var nuevoBody = document.createElement("tbody");
  371.         var nuevoPie = document.createElement("tfoot");
  372.         nuevoHead.insertRow(0);
  373.         nuevoHead.rows[0].insertCell(0);
  374.         nuevoHead.rows[0].cells[0].innerHTML = '<b>' + nomVal+'</b>';
  375.         nuevoBody.insertRow(0);
  376.         nuevoPie.insertRow(0);
  377.         for(j=0; j<attrs.length; j++){
  378.             nuevoBody.rows[0].insertCell(j);
  379.             if(mul[j]=="off"){
  380.             if(key[j]=="on"){
  381.                 nuevoBody.rows[0].cells[j].innerHTML = '<u>'+attrs[j]+'</u>';
  382.             } else
  383.             nuevoBody.rows[0].cells[j].innerHTML = attrs[j];
  384.             }
  385.             else{
  386.             nuevoBody.rows[0].cells[j].setAttribute('width', '0'); }
  387.             nuevoPie.rows[0].insertCell(j);
  388.         }
  389.         nuevoEsquema.appendChild(nuevoHead);   
  390.         nuevoEsquema.appendChild(nuevoBody);
  391.         nuevoEsquema.appendChild(nuevoPie);    
  392.         zonaRelacional.appendChild(nuevoEsquema);
  393.         zonaRelacional.appendChild(espacio);   
  394.     }
  395. }
  396. function echameLosAtributos(queCosa, aCualV){
  397.         var queTablaV = document.getElementById(aCualV);
  398.         var tamV= queTablaV.tBodies[0].rows.length;
  399.         if(tamV != 0 )
  400.         {
  401.             tamV= queTablaV.tBodies[0].rows[0].cells.length;
  402.             //alert(tamV);
  403.             var Val= new Array(tamV);
  404.             var Mul = new Array(tamV);
  405.             var Llave= new Array(tamV);
  406.             for(i=0;i<tamV;i++)
  407.             {
  408.                 Val[i] = queTablaV.tBodies[0].rows[0].cells[i].getElementsByTagName("input")[0].value;
  409.                 if(queTablaV.tBodies[0].rows[0].cells[i].getElementsByTagName("input")[1].checked==true)
  410.                     Mul[i] = "on";
  411.                 else
  412.                     Mul[i]="off";
  413.                    
  414.                 if(queTablaV.tBodies[0].rows[0].cells[i].getElementsByTagName("input")[2].checked==true)
  415.                     Llave[i] = "on";
  416.                 else
  417.                     Llave[i] = "off";
  418.                 //alert(Val[i]+Mul[i]+Llave[i]);
  419.             }  
  420.             switch(queCosa) {
  421.             case 0:
  422.                 return Val;
  423.                 break;
  424.             case 1:
  425.                 return Mul;
  426.                 break;
  427.             case 2:
  428.                 return Llave;
  429.                 break;
  430.             }
  431.         }else
  432.         {
  433.             //alert("hay entidades sin atributos");
  434.             return 0;
  435.         }  
  436. }
  437.  
  438. function echameLosNombres()
  439. {
  440.     var numEntidades=zonaEntidades.getElementsByTagName("table").length;
  441.     var arregloNombres=new Array(numEntidades);
  442.     if(numEntidades==0)
  443.     {
  444.         alert("No hay entidades");
  445.     }
  446.     else
  447.     {
  448.         for(var i=0;i<numEntidades;i++)
  449.         {
  450.             var nombre=zonaEntidades.getElementsByTagName("table")[i].tHead.rows[0].cells[0].getElementsByTagName("input")[0].value;
  451.             if(nombre=="")
  452.                 {
  453.                     arregloNombres[i]="Entidad sin nombre";
  454.                 }
  455.             else{
  456.                 arregloNombres[i]=nombre;
  457.             }
  458.         }
  459.         return arregloNombres;
  460.     }
  461. }
  462.  
  463. function agregarER()  {
  464.     var entidades = zonaEntidades.getElementsByTagName("table").length;
  465.     var relaciones = zonaRelaciones.getElementsByTagName("table").length;
  466.     var botonesAnadir = document.getElementsByTagName("form")[0].cual;
  467.     var anadirCual=-1;
  468.     for (var i=0; i<botonesAnadir.length; i++) {
  469.         if (botonesAnadir[i].checked) {
  470.             anadirCual = i;
  471.         }
  472.     }
  473.    
  474.     switch(anadirCual) {
  475.         case 0:
  476.             anadir(0);
  477.             //actualizarEntidadesLista()
  478.             break;
  479.         case 1:
  480.             if (entidades > 0) {
  481.                 anadir(1);
  482.                 actualizarEntidadesLista()
  483.                 break;
  484.             }
  485.         default:
  486.             alert("No ha elegido una acción válida");
  487.     }
  488.    
  489.     crearRelaciona();
  490.     return false;
  491. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement