Merge branch 'fibre' of ssh://git.onelab.eu/git/myslice into fibre
[unfold.git] / plugins / univbrisfv / static / js / univbrisfv.js
index 82581ab..7cefef6 100644 (file)
 
     pk_flowspace_index=0;
     opt_flowspace_index=0;
+    pk_mode=0;
     fvf_add=1;
     fvf_nrow=0;
+    
 
     var UnivbrisFv = Plugin.extend({
 
 
         initialize_table: function() 
         {
+
+           
             /* Transforms the table into DataTable, and keep a pointer to it */
             var self = this;
+           //alert(self.options);
             var actual_options = {
                 // Customize the position of Datatables elements (length,filter,button,...)
                 // we use a fluid row on top and another on the bottom, making sure we take 12 grid elt's each time
            $('<td><button id="submit_flowspace" type="button" style="height: 25px; width: 400px" onclick="fnButsubmit()">Define controller location</button></td></tr></table>').appendTo('div.buttons');**/
        
           
-           jQuery( "#univbris_flowspace_selection" ).hide();
+           //jQuery( "#univbris_flowspace_selection" ).hide();
 
              //$('<a href="http://localhost:8000/login/" id="next_link">next link</a>').appendTo('div.submit');
 
                //this.new_record("t");
                //this.new_record("t");
                this._querytable_draw_callback();
-       
+               jQuery("#univbris_flowspace_selection").hide(); 
                
 
         }, // initialize_table
 
 
        fnButsubmit:function(e){
-                alert("submitting"); 
-                var rows = $("#univbris_flowspace_selection__table").dataTable().fnGetNodes();
-                var cells=[];
-                for(var i=0;i<rows.length;i++){
-                       var htmlStr=$(rows[i]).find("td:eq(0)").html();
-                       var parser=new DOMParser();
-                       var htmlDoc=parser.parseFromString(htmlStr, "text/html");
-                       var para=htmlDoc.getElementsByTagName('p');
-                       if(typeof para.item(0).id != 'undefined'){
-                               cells.push(para.item(0).id);
+               alert("verifying before submitting");
+
+               sync_query_uuid=e.data.options.sync_query_uuid;
+               try{
+
+                        var controller= $('#controller_loc').val();
+
+                        //validating controller field
+                        //alert (controller.length);
+                        if (controller.length>=7){
+                               //alert(controller.substring(0,4))
+                               if(controller.substring(0,4)=="tcp:" | controller.substring(0,4)=="ssl:"){
+                                       var controller_ip=controller.substring(4,controller.length);
+                                       //alert(controller_ip)
+                                       var index=controller_ip.indexOf(":")
+                                       if (index!=-1){
+                                               var controller_ip1=controller_ip.substring(0,index);
+                                               //alert(controller_ip1);
+                                               var ip_validator= /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; 
+                                               if (!controller_ip1.match(ip_validator)){
+                                                 throw "Incorrect IP format";
+                                               }
+                                               //else{
+                                               //  throw "incorrect ip";
+                                               //}
+
+                                               var controller_port=controller_ip.substring(index+1,controller_ip.length);
+                                               if(!isNaN(controller_port)){
+                                                       controller_port=parseInt(controller_port,10);
+                                                       if (!((controller_port >0) & (controller_port <65536))){
+                                                       //if(controller_port >0){
+                                                               throw "Incorrect controller port";
+                                                       }
+                                                       //else{
+                                                       //      throw "correct port";
+                                                       //}
+                                               }
+                                               else{
+                                                       throw "Incorrect controller port";
+                                               }
+                                       }
+                                       else{
+                                               throw "Incorrect controller specified";
+                                       } 
+                               }
+                               else{
+                                       throw "Controller must start with tcp: or ssl:";
+                               }
+
+                        }
+                        else{
+                           throw "Incorrect controller specified";
+                        }
+                        //end of validation of controller field
+        
+                        var rows = $("#univbris_flowspace_selection__table").dataTable().fnGetNodes();
+                        var cells=[];
+                        
+                        var json_rspec={};
+                        json_rspec["controller"]=controller;
+                        var groups_rspec=[];
+                        var matches_rspec=[];
+
+                        if (rows.length <=0) {
+                               throw "No Flowspace defined"
+                        }
+
+
+                        var queryStringToJSON = function (url) {
+                if (url === '') return '';
+                var pairs = (url || location.search).slice(1).split('&');
+                var result = {};
+                for (var idx in pairs) {
+                    if ($.isNumeric(idx)) {
+                           var pair = pairs[idx].split('=');
+                           if (!!pair[0]){
+                                       result[pair[0].toLowerCase()] = decodeURIComponent(pair[1].replace(/\+/g, " ") || '');
+                        }
+                    }
+                }
+                return result;
                        }
-                }
 
-               var controller= $('#controller_loc').val();
+                        for(var i=0;i<rows.length;i++){
+                               var htmlStr=$(rows[i]).find("td:eq(0)").html();
+                               var parser=new DOMParser();
+                               var htmlDoc=parser.parseFromString(htmlStr, "text/html");
+                               var para=htmlDoc.getElementsByTagName('p');
+                               if(typeof para.item(0).id != 'undefined'){
+                                       cells.push(para.item(0).id);
+                                       var m_form=para.item(0).id.split(",");
+                                       var result=queryStringToJSON("?"+m_form[0]);
+                                       matches_rspec.push(result);
+                                       //console.log(m_form[1]);
+                                       var result2=queryStringToJSON("?"+m_form[1]);
+                                       result2["flowspace_name"]=result["flowspace_name"];
+                                       groups_rspec.push(result2);
+                               }
+                        }
+
+                       json_rspec["groups"]=groups_rspec;
+                       json_rspec["matches"]=matches_rspec;    
+
+                       //console.log(JSON.stringify(json_rspec));
+
 
-               cells.push("controller="+controller);
+                       //var controller= $('#controller_loc').val();
 
-               var str="";             
+                       //cells.push("controller="+controller);
 
-               //Just for show: built output string 
-               for(var i=0;i<cells.length;i++){
-                       str+=cells[i]+"\n";
+                       
+                       
+
+                       //var str="";           
+
+                       //Just for show: built output string 
+                       //for(var i=0;i<cells.length;i++){
+                       //      str+=cells[i]+"\n";
+
+                       //}
+                   //alert(str);
+            data = {
+                state: STATE_SET,
+                key  : null,
+                op   : STATE_SET_ADD,
+                value: json_rspec 
+            }
+            manifold.raise_event(sync_query_uuid, FIELD_STATE_CHANGED, data);
+
+                   //alert("sending to manifold backend to build rspec");
 
                }
-               alert(str);
-               alert("send to manifold backend to build rspec");               
+               catch(err){
+                       alert(err)
+               }
+               
+                               
        },
 
+
+
        fnAddflowspace:function(e){
+               sync_query_uuid=e.data.options.sync_query_uuid;
+               pk_mode=1;
+               hideFvfError();
+               var port_table=$("#univbris_foam_ports_selection__table").dataTable();
+               var nodes = $('input',port_table.fnGetNodes());
+               for(var i=0;i<nodes.length;i++){
+                       nodes[i].checked=false;
+                       nodes[i].disabled=false;
+               }
+
                fvf_add=1;
                $("#uob_fv_table_form").trigger("reset");
-               this.table = $("#univbris_flowspace_selection__table").dataTable();
+               var port_table = $("#univbris_flowspace_selection__table").DataTable();
                //alert("table length" + this.table.fnGetNodes().length);       
                $("#flowspace_name").val("pk_flowspace_"+ pk_flowspace_index);
                //pk_flowspace_index=1+pk_flowspace_index;
-
                $("[id='addflowspaceform']").show();
                $("#uob_fv_table_form :input").prop("disabled", false);
-               $("[name='flowspace_name']").prop("disabled", true)
+               $("[name='flowspace_name']").prop("disabled", true);
                $("[id='cancel_addflowspaceform']").text('cancel');
-               $("[id='addflowspaceform'").text('add flowspace');
-               jQuery( "#univbris_flowspace_selection" ).hide();
-               jQuery("#uob_fv_table_form").show();            
+               $("[id='addflowspaceform']").text('add flowspace');
+               
+               try{
+                       manifold.raise_event(e.data.options.sync_query_uuid,CLEAR_FILTERS);
+                       var filter=[];
+                       filter.push("link type");
+                       filter.push("!=");
+                       filter.push("optical");
+                       manifold.raise_event(e.data.options.sync_query_uuid,FILTER_ADDED,filter);
+               }
+               catch(err){
+                       alert("raise error:"+err);
+               }
+
+               var svg_links = svg.selectAll(".link");
+               for(var i=0;i<svg_links[0].length;i++){
+                       svg_links[0][i].style.stroke= '#ccc';
+                       svg_links[0][i].style.strokeWidth= '4px';
+               };
+
+
+               jQuery("#univbris_flowspace_selection").hide(); 
+               jQuery("#uob_fv_table_form").show();
+               jQuery( "#univbris_foam_ports_selection" ).show();
+               
+               
+               topoviewer_state={mode:"edit",link_type:"non-optical"};
+
+               jQuery('#topo_plugin').show();
+               
        },
 
        fnAddcflowspace:function(e){
-               this.table = $("#univbris_flowspace_selection__table").dataTable();
-               //alert("table length" + this.table.fnGetNodes().length);       
-               $("#flowspace_name").val("opt_flowspace_"+ opt_flowspace_index);
-               opt_flowspace_index=1+pk_flowspace_index;
+               pk_mode=0;
+               sync_query_uuid=e.data.options.sync_query_uuid;
+               hideFvfError();
+               var port_table=$("#univbris_foam_ports_selection__table").dataTable();
+               var nodes = $('input',port_table.fnGetNodes());
+               for(var i=0;i<nodes.length;i++){
+                       nodes[i].checked=false;
+                       nodes[i].disabled=false;
+               }
+
+               $("#uob_ofv_table_form").trigger("reset");
+               $("#oflowspace_name").val("opt_flowspace_"+ opt_flowspace_index);
+               fvf_add=1;
+               $("[id='addflowspaceform']").show();
+               $("#uob_ofv_table_form :input").prop("disabled", false);
+               $("[name='oflowspace_name']").prop("disabled", true);
+               $("[id='cancel_addflowspaceform']").text('cancel');
+               $("[id='addflowspaceform']").text('add flowspace');
+
+               try{
+                       manifold.raise_event(e.data.options.sync_query_uuid,CLEAR_FILTERS);
+                       var filter=[];
+                       filter.push("link type");
+                       filter.push("!=");
+                       filter.push("packet");
+                       manifold.raise_event(e.data.options.sync_query_uuid,FILTER_ADDED,filter);
+                       filter=[];
+                       filter.push("link type");
+                       filter.push("!=");
+                       filter.push("compute");
+                       manifold.raise_event(e.data.options.sync_query_uuid,FILTER_ADDED,filter);
+                       filter=[];
+                       filter.push("link type");
+                       filter.push("!=");
+                       filter.push("federation");
+                       manifold.raise_event(e.data.options.sync_query_uuid,FILTER_ADDED,filter);
+               }
+               catch(err){
+                       alert("raise error:"+err);
+               }
+
+               var svg_links = svg.selectAll(".link");
+               for(var i=0;i<svg_links[0].length;i++){
+                       svg_links[0][i].style.stroke= '#ccc';
+                       svg_links[0][i].style.strokeWidth= '4px';
+               };
+
                jQuery( "#univbris_flowspace_selection" ).hide();
-               jQuery("#uob_fv_table_form").show();            
+               jQuery("#uob_ofv_table_form").show();
+               jQuery( "#univbris_foam_ports_selection" ).show();
+
+
+
+               topoviewer_state={mode:"edit",link_type:"optical"};
+
+               jQuery("#topo_plugin").show();          
        },
 
        
 
        fnDelete:function(e){
                        e.preventDefault();
+                       //alert("delwete");
                        var nRow = $(this).parents('tr')[0];
                        this.table = $("#univbris_flowspace_selection__table").dataTable();
                        this.table.fnDeleteRow( nRow );
        },
 
-       fnEdit:function(e){
+       fnEdit:function(e){     
                        e.preventDefault();
                        fvf_add=0;
+                       hideFvfError();
                        
-                       var nRow = $(this).parents('tr')[0];
-                       fvf_nrow=nRow;
-                       var row= $("#univbris_flowspace_selection__table").dataTable().fnGetData(nRow);
-                       var parser=new DOMParser();
-                       var htmlDoc=parser.parseFromString(row[0], "text/html");
-                       //alert("html_doc"+htmlDoc);
-                       var para=htmlDoc.getElementsByTagName('p');
-
-                       //alert("test:"+ para.item(0).id);
+                       try{
+                               var nRow = $(this).parents('tr')[0];
+                               fvf_nrow=nRow;
+                               var row= $("#univbris_flowspace_selection__table").dataTable().fnGetData(nRow);
+                               var parser=new DOMParser();
+                               var htmlDoc=parser.parseFromString(row[0], "text/html");
+                               //alert("html_doc"+htmlDoc);
+                               var para=htmlDoc.getElementsByTagName('p');
+                       }
+                       catch(err){
+                               alert("error:"+err);
+
+                       }
+                       //alert("p id:"+ para.item(0).id);
+                       var m_form=para.item(0).id.split(",");
+                       //console.log(htmlDoc.getElementsByTagName('a'));
                        $("#uob_fv_table_form").trigger("reset");
                        $("#uob_fv_table_form :input").prop("disabled", false);
-                       //$("[name='flowspace_name']").prop("disabled", false);
-                       $("#uob_fv_table_form").deserialize(para.item(0).id);
+                       $("[name='flowspace_name']").prop("disabled", false);
+                       $("#uob_fv_table_form").deserialize(m_form[0]);
+
+                       try{
+                               deserializeDT(m_form[1]);
+                       }
+                       catch (err){
+                               alert("error:"+err);
+                       }
+
+                        var port_table=$("#univbris_foam_ports_selection__table").dataTable();
+                        var nodes = $('input',port_table.fnGetNodes());
+                        var svg_links = svg.selectAll(".link");
+
+                        for(n=0;n<nodes.length;n++){
+                               for(var i=0;i<svg_links[0].length;i++){
+                                       if(svg_links[0][i].__data__.value==nodes[n].id){
+                                               if(nodes[n].checked==true){
+                                                       svg_links[0][i].style.stroke= 'black';
+                                                       svg_links[0][i].style.strokeWidth= '5px';
+                                               }
+                                               else{
+                                                       svg_links[0][i].style.stroke= '#ccc';
+                                                       svg_links[0][i].style.strokeWidth= '4px';
+                                               }
+                                               break;
+                                       }
+                               }
+                               nodes[n].disabled=false;
+                       };
+                       
+                       //alert($("#flowspace_name").val());
+
+                       if  ($("#flowspace_name").val().search("pk")==0){
+                               topoviewer_state={mode:"edit",link_type:"non-optical"};
+                       }
+                       else{
+                               topoviewer_state={mode:"edit",link_type:"optical"};
+                       }
+
+                       
+                       
                        $("[name='flowspace_name']").prop("disabled", true);
                        $("[id='cancel_addflowspaceform']").prop("disabled", false);
                        $("[id='addflowspaceform']").prop("disabled", false);
-                       $("[id='addflowspaceform'").text('modify');
-                       $("[id='addflowspaceform'").show();
-                       jQuery("#univbris_flowspace_selection").hide();
+                       $("[id='addflowspaceform']").text('modify');
+                       $("[id='addflowspaceform']").show();                    
+                       jQuery( "#univbris_foam_ports_selection" ).show();                              
                        jQuery("#uob_fv_table_form").show();
+                       jQuery("#univbris_flowspace_selection").hide();
+                       jQuery('#topo_plugin').show();
+                       
        },
 
 
-       fnModflowspace:function(e){
-               alert("modify");
-               //pk_flowspace_index=1+pk_flowspace_index;
-               jQuery("#uob_fv_table_form").hide();
-               var sData=$("#uob_fv_table_form").find("input").serialize();
-               var form =serializeAnything("#uob_fv_table_form");
-               this.table = $("#univbris_flowspace_selection__table").dataTable();
-               flowspace=sData;
-               alert(form+"\n"+sData);
-               
-               var string = "<p id='"+form+"'> <a onclick=\'fnPopTable(\""+form+"\");'>"+$("#flowspace_name").val()+"</a></p>";
-               this.table.fnDeleteRow(fvf_nrow);       
-               this.table.fnAddData([string, '<a class="edit">Edit</a>', '<a class="delete" href="">Delete</a>']);
-               jQuery( "#univbris_flowspace_selection" ).show();
-               //onclick=\'fnEdit("test");\'
-               //alert("myserialise: "+form);          
-               //alert("added flowspace:" + sData);    
-       },
 
        
 
         on_all_query_done: function()
         {
            if (debug) messages.debug("1-shot initializing dataTables content with " + this.buffered_lines.length + " lines");
+
+
            this.table.fnAddData (this.buffered_lines);
            this.buffered_lines=[];