Advertisement
Guest User

Untitled

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