Advertisement
Guest User

Untitled

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