Add nemo-ui
[nemo.git] / nemo-ui / src / main / resources / nemo / js / virNetwork.js
diff --git a/nemo-ui/src/main/resources/nemo/js/virNetwork.js b/nemo-ui/src/main/resources/nemo/js/virNetwork.js
new file mode 100644 (file)
index 0000000..7ddcb0d
--- /dev/null
@@ -0,0 +1,248 @@
+nodes_vir = new vis.DataSet();
+edges_vir = new vis.DataSet();
+
+var VirtualDatas='';
+
+ function getVirtualInfos(){
+        var virData=null;
+               jQuery.ajax({
+                       url: "/restconf/config/generic-virtual-network:virtual-networks/", 
+                       type:"GET",
+                       dataType:"json",
+                       async: false,
+                       success: function(data){
+                               if(data != null)
+                               {
+                                       virData = data;
+                                       VirtualDatas=data;
+                                       console.log(VirtualDatas);
+                               }
+                               else
+                                       alert("No Virtual Data");
+                       },
+                       error:function(data){
+                       alert("Get Virtual Data Error!");
+                       }
+               });
+        return virData;
+ }
+  getVirtualInfos();
+ function getVirtualDatas(){
+       var Datas=getVirtualInfos();
+       if(!Datas){
+       Datas=virtualJson;
+       }
+       VirtualDatas=Datas;
+       // console.log(VirtualDatas);
+       //return virtualDatas;
+ }
+
+function getVirtualInfoById(user_id,Data){
+       if(!Data) Data=VirtualDatas;
+       if(!Data) return;
+       if(typeof(Data)=='string'){
+    var user_json = JSON.parse(Data);
+    }
+    else
+    {
+    var user_json = Data;
+    }
+
+    var user_info = user_json['virtual-networks']['virtual-network'];
+       for(var item in user_info){
+               if(user_id==user_info[item]['user-id']){
+                       return user_info[item];
+               }
+       }
+}
+
+var virtual_nodes=[];
+function create_virtual_topo(topo_data,intentinfo,mappinginfo)
+{
+       nodes_vir.clear();
+       edges_vir.clear();
+
+    console.log(topo_data);
+       var vitrual_network=topo_data;
+       if(vitrual_network!=null)
+       {       
+               var vitrual_nodes=vitrual_network["virtual-nodes"]["virtual-node"];
+               for(var i in vitrual_nodes)
+               {
+                       virtual_nodes[vitrual_nodes[i]["node-id"]]=(+i+1);              
+                       nodes_vir.add({
+            id: +i+1,
+            label: vitrual_nodes[i]["node-type"],
+            group: vitrual_nodes[i]["node-type"],
+            radius:20
+        });
+
+               }
+       console.log(virtual_nodes);
+       var vitrual_links=vitrual_network["virtual-links"]["virtual-link"];
+       for(var j in vitrual_links){
+                  edges_vir.add({
+            id: +j+1,
+            from: virtual_nodes[vitrual_links[j]["src-node-id"]],
+            to: virtual_nodes[vitrual_links[j]["dest-node-id"]],
+            length:150,
+            width:2,
+            color:{color:'ff4e00',highlight:'ff4e00',hover:'ff4e00'}
+        });
+       }
+       }
+
+drawOthers(null,intentinfo,mappinginfo);
+console.log(virtual_nodes);
+       var data= {
+               nodes: nodes_vir,
+               edges: edges_vir
+       };
+       var options = {
+               /* physics: {
+               repulsion: {
+                       centralGravity: 0,
+                       springLength: 200,//弹簧长度
+                       springConstant: 0,//弹簧常数
+                       nodeDistance: 0,
+                       damping: 0 //阻尼,减幅,衰减
+               }}, */
+               smoothCurves: false,
+               stabilize: true,
+               nodes: {
+          // default for all nodes
+                       fontSize:15,
+                       shape: 'dot',            
+                       radius:23,
+                       fixed:true
+               },
+               groups:{
+                       vswitch:{                               
+                               color: {
+                                       border: 'black',
+                                       background: '#B0E2FF',                          
+                               }
+            },                         
+                       vrouter:{
+                               color: {
+                                       border: 'black',
+                                       background: '#7FFF00',
+                               }       
+                       },
+                       fw:{
+                               //shape:'box',
+                               color: {
+                                       border: 'black',
+                                       background: '#EEEE00',
+                               }       
+                       },
+                       lb:{
+                               //shape:'box',
+                               color: {
+                                       border: 'black',
+                                       background: '#C63300',
+                               }       
+                       },
+                       cache:{
+                               //shape:'box',
+                               color: {
+                                       border: 'black',
+                                       background: '#FF00FF',
+                               }       
+                       }
+               }
+               
+       };
+
+    console.log(nodes_vir.get().length);
+       var container = document.getElementById('vir_graph');
+       var graph = new vis.Graph(container, data, options);
+}
+
+function drawOthers(virtualData,intentData,mappingData){
+       console.log();
+       var user_nodes=intentData['objects']['node'];
+       var intentNodes=[];
+               for (var i in user_nodes) {
+                       intentNodes[user_nodes[i]['node-id']]=[user_nodes[i]['node-type'],user_nodes[i]['node-name']];
+               };
+       var mapping_nodes=mappingData['intent-vn-mapping-result'];
+       var mappingNodes=[];
+               for (var i in mapping_nodes) {
+                       if(mapping_nodes[i]['intent-type']=='node')
+                       {
+                               mappingNodes[mapping_nodes[i]['intent-id']]=mapping_nodes[i]['virtual-resource'][0]['parent-virtual-resource-entity-id'];
+                       }
+               };
+       console.log(intentNodes);
+       console.log(mappingNodes);
+       var nodelen= nodes_vir.get().length;
+       for(var item in intentNodes){
+               virtual_nodes[item]=nodelen+1;
+               if(intentNodes[item][0]=='host'){
+                       nodes_vir.add({
+            id: ++nodelen,
+            label: ''+intentNodes[item][1],
+            image: "src/app/nemo/images/host.png",
+            shape: 'image',
+                       fontSize: 15
+        });
+               }
+               else if(intentNodes[item][0]=='fw'){
+                       nodes_vir.add({
+            id: ++nodelen,
+            label: ''+intentNodes[item][1],
+            group: 'fw',
+            image: "src/app/nemo/images/fw.png",
+            shape: 'image',
+                       fontSize: 15
+        });
+               }
+               else if(intentNodes[item][0]=='lb'){
+                       nodes_vir.add({
+            id: ++nodelen,
+            label: ''+intentNodes[item][1],
+            group: 'lb',
+            image: "src/app/nemo/images/lb.png",
+            shape: 'image',
+                       fontSize: 15
+        });
+               }
+               else if(intentNodes[item][0]=='cache'){
+                       nodes_vir.add({
+            id: ++nodelen,
+            label: ''+intentNodes[item][1],
+            group: 'cache',
+            image: "src/app/nemo/images/cache.png",
+            shape: 'image',
+                       fontSize: 15
+        });
+               }
+               else if(intentNodes[item][0]=='ext-group'){
+                       nodes_vir.add({
+            id: ++nodelen,
+            label: ''+intentNodes[item][1],
+            image: "src/app/nemo/images/ext-group.png",
+            shape: 'image',
+                       fontSize: 15
+        });
+               }
+               else
+                       {
+                               delete virtual_nodes[item];
+                       }
+       }
+       for(var item in mappingNodes){
+               var edgeslen=edges_vir.get().length;
+                edges_vir.add({
+            id: ++edgeslen,
+            from: virtual_nodes[item],
+            to: virtual_nodes[mappingNodes[item]],
+            length:150
+        });
+       }
+}
+
+
+
+