CLIENT GUI Framework
[vnfsdk/refrepo.git] / portal-catalog / src / main / webapp / catalog / js / template / tmDetailController.js
1 /*\r
2  * Copyright 2016-2017 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 var vm = avalon.define({\r
17     $id : "tmDetailController",\r
18     templateId : "",//store the Id of service template which shows in Topology tab page\r
19     globalNodesData: {},//store the nodes data which shows in Topology tab page\r
20     templateData : [\r
21         {href: "#topology", name: "Topology", value: true},\r
22         {href: "#nodes", name: "Nodes", value: false}\r
23     ],\r
24     $language: {\r
25         "sProcessing": "<img src='../common/thirdparty/data-tables/images/loading-spinner-grey.gif'/><span>&nbsp;&nbsp;"\r
26         + $.i18n.prop("nfv-nso-iui-table-sProcess") + "</span>",\r
27         "sLengthMenu": $.i18n.prop("nfv-nso-iui-table-sLengthMenu"),\r
28         "sZeroRecords": $.i18n.prop("nfv-nso-iui-table-sZeroRecords"),\r
29         "sInfo": "<span class='seperator'>  </span>" + $.i18n.prop("nfv-nso-iui-table-sInfo"),\r
30         "sInfoEmpty": $.i18n.prop("nfv-nso-iui-table-sInfoEmpty"),\r
31         "sGroupActions": $.i18n.prop("nfv-nso-iui-table-sGroupActions"),\r
32         "sAjaxRequestGeneralError": $.i18n.prop("nfv-nso-iui-table-sAjaxRequestGeneralError"),\r
33         "sEmptyTable": $.i18n.prop("nfv-nso-iui-table-sEmptyTable"),\r
34         "oPaginate": {\r
35             "sPrevious": $.i18n.prop("nfv-nso-iui-table-sPrevious"),\r
36             "sNext": $.i18n.prop("nfv-nso-iui-table-sNext"),\r
37             "sPage": $.i18n.prop("nfv-nso-iui-table-sPage"),\r
38             "sPageOf": $.i18n.prop("nfv-nso-iui-table-sPageOf")\r
39         }\r
40     },\r
41     $restUrl: {\r
42         queryNodeTemplateUrl: "/openoapi/catalog/v1/servicetemplates/{0}/nodetemplates",\r
43         queryTemplateInfoUrl: "/openoapi/catalog/v1/servicetemplates"\r
44     },\r
45     $init: function () {\r
46         vm.$initTemplateData();\r
47         vm.$initTopoNodesData();\r
48     },\r
49     $initTemplateData: function () {\r
50         $.ajax({\r
51             type: "GET",\r
52             url: vm.$restUrl.queryTemplateInfoUrl,\r
53             success: function (resp) {\r
54                 if (resp) {\r
55                     vm.nodesTab.servicesTemplateData = [];\r
56                     for (var i = 0; i < resp.length; i++) {\r
57                         //generate node table display data\r
58                         vm.nodesTab.servicesTemplateData.push(resp[i]);\r
59                     }\r
60                     vm.nodesTab.$initNfvNodesTab();\r
61                 }\r
62             },\r
63             error: function () {\r
64                 commonUtil.showMessage($.i18n.prop("nfv-topology-iui-message-error"), "danger");\r
65             }\r
66         });\r
67     },\r
68     $initTopoNodesData: function () {\r
69         $.ajax({\r
70             type: "GET",\r
71             url: vm.$restUrl.queryNodeTemplateUrl,\r
72             success: function (resp) {\r
73                 if (resp) {\r
74                     vm.nodesDetail.nodesTemplateDetailData = [];\r
75                     var nodesTempData = [];\r
76                     for (var i = 0; i < resp.length; i++) {\r
77                         //generate node table display data\r
78                         var nodeTemplate = topoUtil.generateNodeTemplate(resp[i]);\r
79                         nodesTempData.push(nodeTemplate);\r
80                     }\r
81                     vm.globalNodesData[vm.templateId] = nodesTempData;\r
82                     //generate topology graph display data\r
83                     vm.nodesDetail.nodesTemplateDetailData = resp;\r
84                     //initialize topology data\r
85                     vm.topologyTab.topoTemplateData = topoUtil.generateTopoTemplate(vm.globalNodesData[vm.templateId]);\r
86                     topoUtil.initTopoData(vm.topologyTab.topoTemplateData.$model);\r
87                 }\r
88             },\r
89             error: function () {\r
90                 commonUtil.showMessage($.i18n.prop("nfv-topology-iui-message-error"), "danger");\r
91             }\r
92         });\r
93     },\r
94     topologyTab: {\r
95         topology: "topology.html",\r
96         vnfTip: $.i18n.prop("nfv-topology-iui-vnf-tip"),\r
97         btnTip: $.i18n.prop("nfv-topology-iui-btn-return-tip"),\r
98         topoTemplateData: [],\r
99         boxTopoDatas: [],\r
100         networkTopoDatas: [],\r
101         isShowNum: false,\r
102         returnBtnVisible: false,\r
103         $getColor: function (index) {\r
104             return topoUtil.getColor(index);\r
105         },\r
106         $getCidr: function (properties) {\r
107             return topoUtil.getCidr(properties);\r
108         },\r
109         $getCpTop: function (index, parentBoxId) {\r
110             return topoUtil.getCpTop(index, parentBoxId);\r
111         },\r
112         $initTopology: function () {\r
113             topoUtil.initTopoData(vm.topologyTab.topoTemplateData.$model);\r
114         },\r
115         $showTopo: function (id, name) {\r
116             vm.topologyTab.$showTopoDetails("block", id, name);\r
117         },\r
118         $showVnfTopo: function (templateId) {\r
119             vm.topologyTab.returnBtnVisible = true;\r
120             vm.$restUrl.queryNodeTemplateUrl = "/openoapi/catalog/v1/servicetemplates/" + templateId + "/nodetemplates";\r
121             vm.$init();\r
122         },\r
123         $returnNS: function () {\r
124             vm.topologyTab.returnBtnVisible = false;\r
125             vm.$restUrl.queryNodeTemplateUrl = "/openoapi/catalog/v1/servicetemplates/" + vm.templateId + "/nodetemplates";\r
126             vm.$init();\r
127         },\r
128         $showTopoDetails: function (isShow, nodetypeid, nodetypename) {\r
129             vm.nodesDetail.isShow = isShow;\r
130             if (isShow == "block") {\r
131                 vm.nodesDetail.detailTitle = nodetypename + " " + $.i18n.prop("nfv-templateDetail-nodesTab-iui-title-nodeDetail"),\r
132                     $('#' + vm.nodesDetail.detailData[0].id).click();\r
133                 vm.nodesDetail.detailData[0].isActive = true;\r
134                 vm.nodesDetail.$initTopoNodesDetailTable(nodetypeid);\r
135             }\r
136         },\r
137 \r
138     },\r
139     nodesTab: {\r
140         servicesTemplateData: [],\r
141         $nodesTabId: "ict_nodes_template_table",\r
142         $nodesTemplateTabFields: {// table columns\r
143             table: [\r
144                 {"mData": "serviceTemplateId", name: "ID", "bVisible": false},\r
145                 {"mData": "", name: "", "sClass": 'details-control'},\r
146                 {"mData": "templateName", name: $.i18n.prop("nfv-template-iui-field-templatename")},\r
147                 {"mData": "vendor", name: $.i18n.prop("nfv-template-iui-field-vendor")},\r
148                 {"mData": "version", name: $.i18n.prop("nfv-template-iui-field-version")},\r
149                 {"mData": "csarid", name: "packageID", "bVisible": false},\r
150                 {"mData": "type", name: $.i18n.prop("nfv-template-iui-field-type")},\r
151             ]\r
152         },\r
153         $initNfvNodesTab: function () {\r
154             var setting = {};\r
155             setting.language = vm.$language;\r
156             setting.paginate = true;\r
157             setting.info = true;\r
158             //setting.sort = true;\r
159             setting.columns = vm.nodesTab.$nodesTemplateTabFields.table;\r
160             setting.restUrl = vm.$restUrl.queryTemplateInfoUrl;\r
161             setting.tableId = vm.nodesTab.$nodesTabId;\r
162             //serverPageTable.initTableWithData(setting,vm.nodesTab.$nodesTabId + '_div',vm.nodesTab.servicesTemplateData.$model);\r
163             serverPageTable.initDataTable(setting, {}, vm.nodesTab.$nodesTabId + '_div');\r
164             $('#' + vm.nodesTab.$nodesTabId + '>tbody').on("click", 'td.details-control', function () {\r
165                 var tr = $(this).closest('tr');\r
166                 var table = $('#' + vm.nodesTab.$nodesTabId).dataTable();\r
167                 if (table.fnIsOpen(tr[0])) {\r
168                     table.fnClose(tr[0]);\r
169                     tr.removeClass('shown');\r
170                 }\r
171                 else {\r
172                     table.fnOpen(tr[0], vm.nodesTab.nodesList.$format_Detail(table,tr[0]), 'details');\r
173                     tr.addClass('shown');\r
174                 }\r
175             });\r
176         },\r
177         $initNodesData: function (tempId) {\r
178             $.ajax({\r
179                 type: "GET",\r
180                 //url: vm.$restUrl.queryNodeTemplateUrl,\r
181                 url: "/openoapi/catalog/v1/servicetemplates/" + tempId + "/nodetemplates",\r
182                 success: function (resp) {\r
183                     if (resp) {\r
184                         var nodesTempData = [];\r
185                         for (var i = 0; i < resp.length; i++) {\r
186                             //generate node table display data\r
187                             var nodeTemplate = topoUtil.generateNodeTemplate(resp[i]);\r
188                             nodesTempData.push(nodeTemplate);\r
189                         }\r
190                         vm.nodesTab.nodesList.nodesData[tempId] = nodesTempData;\r
191                         //generate topology graph display data\r
192                         vm.nodesTab.nodesList.$initNodesTable(tempId);\r
193                     }\r
194                 },\r
195                 error: function () {\r
196                     commonUtil.showMessage($.i18n.prop("nfv-topology-iui-message-error"), "danger");\r
197                 }\r
198             });\r
199         },\r
200         //nodes list table\r
201         nodesList: {\r
202             nodesData: {},\r
203             tempId:"",\r
204             $nodesTabDataId: "ict_nodes_table",\r
205             $nodesTabFields: {// table columns\r
206                 table: [\r
207                     {"mData": "id", name: "ID", "bVisible": false},\r
208                     {\r
209                         "mData": "name",\r
210                         name: $.i18n.prop("nfv-templateDetail-iui-field-nodetypename"),\r
211                         "bSortable": true,\r
212                         "fnRender": tmDetailUtil.nameRender\r
213                     },\r
214                     {"mData": "type", name: $.i18n.prop("nfv-templateDetail-iui-field-type"), "bSortable": false},\r
215                     {\r
216                         "mData": "containedin",\r
217                         name: $.i18n.prop("nfv-templateDetail-iui-field-containedin"),\r
218                         "bSortable": false\r
219                     },\r
220                     {\r
221                         "mData": "deployedon",\r
222                         name: $.i18n.prop("nfv-templateDetail-iui-field-deployedon"),\r
223                         "bSortable": false\r
224                     },\r
225                     {\r
226                         "mData": "connectedto",\r
227                         name: $.i18n.prop("nfv-templateDetail-iui-field-connectedto"),\r
228                         "bSortable": false\r
229                     },\r
230                     {\r
231                         "mData": "virtuallinksto",\r
232                         name: $.i18n.prop("nfv-templateDetail-iui-field-virtuallinksto"),\r
233                         "bSortable": false\r
234                     }\r
235                 ]\r
236             },\r
237             $initNodesTable: function (tempId) {\r
238                 var setting = {};\r
239                 setting.language = vm.$language;\r
240                 setting.paginate = true;\r
241                 setting.info = true;\r
242                 //setting.sort = true;\r
243                 setting.columns = vm.nodesTab.nodesList.$nodesTabFields.table;\r
244                 setting.restUrl = "/openoapi/catalog/v1/servicetemplates/" + tempId + "/nodetemplates";\r
245                 setting.tableId = vm.nodesTab.nodesList.$nodesTabDataId + "_" + tempId;\r
246                 //serverPageTable.initTableWithData(setting,vm.nodesTab.nodesList.$nodesTabDataId + '_div',vm.nodesTab.nodesList.nodesData.$model);\r
247                 serverPageTable.initTableWithoutLib(setting, {}, setting.tableId + '_div');\r
248             },\r
249             $format_Detail: function (oTable, nTr) {\r
250                 var aData = oTable.fnGetData(nTr);\r
251                 var tempId = aData.serviceTemplateId;\r
252                 vm.nodesTab.nodesList.tempId = tempId;\r
253                 var tableId = "ict_nodes_table" + "_" + tempId + "_div";\r
254                 var sOut = '<div class="row-fluid" data-name="table_zone"><div class="col-xs-12" id="'+tableId+'"></div></div>'\r
255                 vm.nodesTab.$initNodesData(tempId);\r
256                 return sOut;\r
257             },\r
258         },\r
259     },\r
260     //Nodes Details\r
261     nodesDetail: {\r
262         nodesTemplateDetailData: [], //used in topo tab page to show node detail\r
263         detailTitle: "",\r
264         isShow: "none",\r
265         detailIndex: 0,\r
266         detailData: [\r
267             {id: "general", name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-general"), isActive: true},\r
268             {\r
269                 id: "properties",\r
270                 name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-properties"),\r
271                 isActive: false\r
272             },\r
273             {\r
274                 id: "relationShips",\r
275                 name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-relationShips"),\r
276                 isActive: false\r
277             }\r
278         ],\r
279         $showDetails: function (isShow, nodetypeid, nodetypename,tempId) {\r
280             vm.nodesDetail.isShow = isShow;\r
281             if (isShow == "block") {\r
282                 vm.nodesDetail.detailTitle = nodetypename + " " + $.i18n.prop("nfv-templateDetail-nodesTab-iui-title-nodeDetail"),\r
283                     $('#' + vm.nodesDetail.detailData[0].id).click();\r
284                 vm.nodesDetail.detailData[0].isActive = true;\r
285                 vm.nodesDetail.$initNodeDetailTable(nodetypeid,tempId);\r
286             }\r
287         },\r
288         detailCondChange: function (index) {\r
289             vm.nodesDetail.detailIndex = index;\r
290             for (var i = 0; i < vm.nodesDetail.detailData.length; i++) {\r
291                 vm.nodesDetail.detailData[i].isActive = false;\r
292             }\r
293             vm.nodesDetail.detailData[index].isActive = true;\r
294         },\r
295         $tableFields : {// table columns\r
296             general: [\r
297                 {\r
298                     "mData": "key",\r
299                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-key"),\r
300                     "bSortable": false\r
301                 },\r
302                 {\r
303                     "mData": "value",\r
304                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-value"),\r
305                     "bSortable": false\r
306                 }\r
307             ],\r
308             properties: [\r
309                 {\r
310                     "mData": "key",\r
311                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-key"),\r
312                     "bSortable": false\r
313                 },\r
314                 {\r
315                     "mData": "value",\r
316                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-value"),\r
317                     "bSortable": false\r
318                 }\r
319             ],\r
320             relationShips: [\r
321                 {\r
322                     "mData": "sourceNodeName",\r
323                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-sourceNodeName"),\r
324                     "bSortable": false\r
325                 },\r
326                 {\r
327                     "mData": "targetNodeName",\r
328                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-targetNodeName"),\r
329                     "bSortable": false\r
330                 },\r
331                 {\r
332                     "mData": "type",\r
333                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-type"),\r
334                     "bSortable": false\r
335                 }\r
336             ]\r
337         },\r
338         $initNodeDetailTable: function (nodetemplateid,tempId) {\r
339             var data = topoUtil.getCurrentDetailData(vm.nodesTab.nodesList.nodesData[tempId], nodetemplateid);\r
340             //initialize three tables of nodedetail\r
341             $.each(vm.nodesDetail.$tableFields, function (key, value) {\r
342                 var setting = {};\r
343                 setting.language = vm.$language;\r
344                 setting.paginate = false;\r
345                 setting.info = false;\r
346                 setting.columns = value;\r
347                 setting.tableId = "ict_table_" + key;\r
348                 serverPageTable.initTableWithData(setting, setting.tableId + '_div', data[key]);\r
349             });\r
350         },\r
351         $initTopoNodesDetailTable: function (nodetemplateid) {\r
352             var data = topoUtil.getCurrentDetailData(vm.nodesDetail.nodesTemplateDetailData.$model, nodetemplateid);\r
353             //initialize three tables of nodedetail\r
354             $.each(vm.nodesDetail.$tableFields, function (key, value) {\r
355                 var setting = {};\r
356                 setting.language = vm.$language;\r
357                 setting.paginate = false;\r
358                 setting.info = false;\r
359                 setting.columns = value;\r
360                 setting.tableId = "ict_table_" + key;\r
361                 serverPageTable.initTableWithData(setting, setting.tableId + '_div', data[key]);\r
362             });\r
363         }\r
364     },\r
365     executionTab: {\r
366         $eventsTabId: "ict_events_table",\r
367         $eventsTabFields: {// table columns\r
368             table: [\r
369                 {"mData": "currentStepId", name: "ID", "bVisible": false},\r
370                 {\r
371                     "mData": "currentStepName",\r
372                     name: $.i18n.prop("nfv-templateDetail-executionTab-iui-field-currentStepName")\r
373                 },\r
374                 {\r
375                     "mData": "currentStepStatus",\r
376                     name: $.i18n.prop("nfv-templateDetail-executionTab-iui-field-currentStepStatus")\r
377                 },\r
378                 {\r
379                     "mData": "currentStepDesc",\r
380                     name: $.i18n.prop("nfv-templateDetail-executionTab-iui-field-currentStepDesc")\r
381                 },\r
382                 {"mData": "currentTime", name: $.i18n.prop("nfv-templateDetail-executionTab-iui-field-executionTime")},\r
383                 {"mData": "allSteps", name: "allSteps", "bVisible": false}\r
384             ]\r
385         },\r
386         $queryEventsInfoUrl: "/api/nsoc/appinstance/operateschedule?instanceId=",\r
387         $queryStepUrl: "",\r
388         $getEventsCond: function () {\r
389             var cond = {};\r
390             return cond;\r
391         },\r
392         $initEventsTable: function () {\r
393             console.log("initEventsTable ");\r
394             var setting = {};\r
395             setting.language = vm.$language;\r
396             setting.paginate = false;\r
397             setting.info = false;\r
398             setting.columns = vm.executionTab.$eventsTabFields.table;\r
399             setting.restUrl = vm.executionTab.$queryEventsInfoUrl;\r
400             setting.tableId = vm.executionTab.$eventsTabId;\r
401             serverPageTable.initDataTable(setting, vm.executionTab.$getEventsCond(),\r
402                 vm.executionTab.$eventsTabId + '_div');\r
403         },\r
404         $operation: "",\r
405         steps: [],\r
406         $init: function () {\r
407             vm.executionTab.$initEventsTable();\r
408         }\r
409     }\r
410 \r
411 });\r
412 \r
413 var initParam = function () { //initialize template detail params\r
414     var paramStr = window.location.search.substring(1);\r
415     if (paramStr.length > 0) {\r
416         var params = paramStr.split("&");\r
417         var templateId = params[0].substring(params[0].indexOf('=') + 1);\r
418         var flavor = params[1].substring(params[1].indexOf('=') + 1);\r
419         avalon.scan();\r
420 \r
421         vm.templateId = templateId;\r
422         vm.$restUrl.queryNodeTemplateUrl = commonUtil.format(vm.$restUrl.queryNodeTemplateUrl, templateId);\r
423 \r
424         if (flavor) {\r
425             vm.$restUrl.queryNodeTemplateUrl += "?flavor=" + flavor;\r
426         }\r
427         vm.$init();\r
428     }\r
429 };\r
430 initParam();