Add nemo-ui
[nemo.git] / nemo-ui / src / main / resources / nemo / js / virNetwork.js
1 nodes_vir = new vis.DataSet();
2 edges_vir = new vis.DataSet();
3
4 var VirtualDatas='';
5
6  function getVirtualInfos(){
7          var virData=null;
8                 jQuery.ajax({
9                         url: "/restconf/config/generic-virtual-network:virtual-networks/", 
10                         type:"GET",
11                         dataType:"json",
12                         async: false,
13                         success: function(data){
14                                 if(data != null)
15                                 {
16                                         virData = data;
17                                         VirtualDatas=data;
18                                         console.log(VirtualDatas);
19                                 }
20                                 else
21                                         alert("No Virtual Data");
22                         },
23                         error:function(data){
24                         alert("Get Virtual Data Error!");
25                         }
26                 });
27          return virData;
28  }
29   getVirtualInfos();
30  function getVirtualDatas(){
31         var Datas=getVirtualInfos();
32         if(!Datas){
33         Datas=virtualJson;
34         }
35         VirtualDatas=Datas;
36         // console.log(VirtualDatas);
37         //return virtualDatas;
38  }
39
40 function getVirtualInfoById(user_id,Data){
41         if(!Data) Data=VirtualDatas;
42         if(!Data) return;
43         if(typeof(Data)=='string'){
44     var user_json = JSON.parse(Data);
45     }
46     else
47     {
48     var user_json = Data;
49     }
50
51     var user_info = user_json['virtual-networks']['virtual-network'];
52         for(var item in user_info){
53                 if(user_id==user_info[item]['user-id']){
54                         return user_info[item];
55                 }
56         }
57 }
58
59 var virtual_nodes=[];
60 function create_virtual_topo(topo_data,intentinfo,mappinginfo)
61 {
62         nodes_vir.clear();
63         edges_vir.clear();
64
65     console.log(topo_data);
66         var vitrual_network=topo_data;
67         if(vitrual_network!=null)
68         {       
69                 var vitrual_nodes=vitrual_network["virtual-nodes"]["virtual-node"];
70                 for(var i in vitrual_nodes)
71                 {
72                         virtual_nodes[vitrual_nodes[i]["node-id"]]=(+i+1);              
73                         nodes_vir.add({
74             id: +i+1,
75             label: vitrual_nodes[i]["node-type"],
76             group: vitrual_nodes[i]["node-type"],
77             radius:20
78         });
79
80                 }
81        console.log(virtual_nodes);
82        var vitrual_links=vitrual_network["virtual-links"]["virtual-link"];
83        for(var j in vitrual_links){
84            edges_vir.add({
85             id: +j+1,
86             from: virtual_nodes[vitrual_links[j]["src-node-id"]],
87             to: virtual_nodes[vitrual_links[j]["dest-node-id"]],
88             length:150,
89             width:2,
90             color:{color:'ff4e00',highlight:'ff4e00',hover:'ff4e00'}
91         });
92        }
93         }
94
95 drawOthers(null,intentinfo,mappinginfo);
96 console.log(virtual_nodes);
97         var data= {
98                 nodes: nodes_vir,
99                 edges: edges_vir
100         };
101         var options = {
102                 /* physics: {
103                 repulsion: {
104                         centralGravity: 0,
105                         springLength: 200,//弹簧长度
106                         springConstant: 0,//弹簧常数
107                         nodeDistance: 0,
108                         damping: 0 //阻尼,减幅,衰减
109                 }}, */
110                 smoothCurves: false,
111                 stabilize: true,
112                 nodes: {
113           // default for all nodes
114                         fontSize:15,
115                         shape: 'dot',            
116                         radius:23,
117                         fixed:true
118                 },
119                 groups:{
120                         vswitch:{                               
121                                 color: {
122                                         border: 'black',
123                                         background: '#B0E2FF',                          
124                                 }
125             },                          
126                         vrouter:{
127                                 color: {
128                                         border: 'black',
129                                         background: '#7FFF00',
130                                 }       
131                         },
132                         fw:{
133                                 //shape:'box',
134                                 color: {
135                                         border: 'black',
136                                         background: '#EEEE00',
137                                 }       
138                         },
139                         lb:{
140                                 //shape:'box',
141                                 color: {
142                                         border: 'black',
143                                         background: '#C63300',
144                                 }       
145                         },
146                         cache:{
147                                 //shape:'box',
148                                 color: {
149                                         border: 'black',
150                                         background: '#FF00FF',
151                                 }       
152                         }
153                 }
154                 
155         };
156
157     console.log(nodes_vir.get().length);
158         var container = document.getElementById('vir_graph');
159         var graph = new vis.Graph(container, data, options);
160 }
161
162 function drawOthers(virtualData,intentData,mappingData){
163         console.log();
164         var user_nodes=intentData['objects']['node'];
165         var intentNodes=[];
166                 for (var i in user_nodes) {
167                         intentNodes[user_nodes[i]['node-id']]=[user_nodes[i]['node-type'],user_nodes[i]['node-name']];
168                 };
169         var mapping_nodes=mappingData['intent-vn-mapping-result'];
170         var mappingNodes=[];
171                 for (var i in mapping_nodes) {
172                         if(mapping_nodes[i]['intent-type']=='node')
173                         {
174                                 mappingNodes[mapping_nodes[i]['intent-id']]=mapping_nodes[i]['virtual-resource'][0]['parent-virtual-resource-entity-id'];
175                         }
176                 };
177         console.log(intentNodes);
178         console.log(mappingNodes);
179         var nodelen= nodes_vir.get().length;
180         for(var item in intentNodes){
181                 virtual_nodes[item]=nodelen+1;
182                 if(intentNodes[item][0]=='host'){
183                         nodes_vir.add({
184             id: ++nodelen,
185             label: ''+intentNodes[item][1],
186             image: "src/app/nemo/images/host.png",
187             shape: 'image',
188                         fontSize: 15
189         });
190                 }
191                 else if(intentNodes[item][0]=='fw'){
192                         nodes_vir.add({
193             id: ++nodelen,
194             label: ''+intentNodes[item][1],
195             group: 'fw',
196             image: "src/app/nemo/images/fw.png",
197             shape: 'image',
198                         fontSize: 15
199         });
200                 }
201                 else if(intentNodes[item][0]=='lb'){
202                         nodes_vir.add({
203             id: ++nodelen,
204             label: ''+intentNodes[item][1],
205             group: 'lb',
206             image: "src/app/nemo/images/lb.png",
207             shape: 'image',
208                         fontSize: 15
209         });
210                 }
211                 else if(intentNodes[item][0]=='cache'){
212                         nodes_vir.add({
213             id: ++nodelen,
214             label: ''+intentNodes[item][1],
215             group: 'cache',
216             image: "src/app/nemo/images/cache.png",
217             shape: 'image',
218                         fontSize: 15
219         });
220                 }
221                 else if(intentNodes[item][0]=='ext-group'){
222                         nodes_vir.add({
223             id: ++nodelen,
224             label: ''+intentNodes[item][1],
225             image: "src/app/nemo/images/ext-group.png",
226             shape: 'image',
227                         fontSize: 15
228         });
229                 }
230                 else
231                         {
232                                 delete virtual_nodes[item];
233                         }
234         }
235         for(var item in mappingNodes){
236                 var edgeslen=edges_vir.get().length;
237                  edges_vir.add({
238             id: ++edgeslen,
239             from: virtual_nodes[item],
240             to: virtual_nodes[mappingNodes[item]],
241             length:150
242         });
243         }
244 }
245
246
247
248