CLIENT GUI Framework
[vnfsdk/refrepo.git] / openo-portal / portal-catalog / src / main / webapp / catalog / js / template / tmNodesController.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 : "tmNodesController",\r
18     templateId : "", //store the Id of service template which shows in Topology tab page\r
19     $language: {\r
20         "sProcessing": "<img src='../common/thirdparty/data-tables/images/loading-spinner-grey.gif'/><span>&nbsp;&nbsp;"\r
21         + $.i18n.prop("nfv-nso-iui-table-sProcess") + "</span>",\r
22         "sLengthMenu": $.i18n.prop("nfv-nso-iui-table-sLengthMenu"),\r
23         "sZeroRecords": $.i18n.prop("nfv-nso-iui-table-sZeroRecords"),\r
24         "sInfo": "<span class='seperator'>  </span>" + $.i18n.prop("nfv-nso-iui-table-sInfo"),\r
25         "sInfoEmpty": $.i18n.prop("nfv-nso-iui-table-sInfoEmpty"),\r
26         "sGroupActions": $.i18n.prop("nfv-nso-iui-table-sGroupActions"),\r
27         "sAjaxRequestGeneralError": $.i18n.prop("nfv-nso-iui-table-sAjaxRequestGeneralError"),\r
28         "sEmptyTable": $.i18n.prop("nfv-nso-iui-table-sEmptyTable"),\r
29         "oPaginate": {\r
30             "sPrevious": $.i18n.prop("nfv-nso-iui-table-sPrevious"),\r
31             "sNext": $.i18n.prop("nfv-nso-iui-table-sNext"),\r
32             "sPage": $.i18n.prop("nfv-nso-iui-table-sPage"),\r
33             "sPageOf": $.i18n.prop("nfv-nso-iui-table-sPageOf")\r
34         }\r
35     },\r
36     $restUrl: {\r
37         queryNodeTemplateUrl: "/openoapi/catalog/v1/servicetemplates/{0}/nodetemplates",\r
38         queryTemplateInfoUrl: "/openoapi/catalog/v1/servicetemplates"\r
39     },\r
40     $init: function () {\r
41         vm.$initTemplateData();\r
42     },\r
43     $initTemplateData: function () {\r
44         $.ajax({\r
45             type: "GET",\r
46             url: vm.$restUrl.queryTemplateInfoUrl,\r
47             success: function (resp) {\r
48                 if (resp) {\r
49                     vm.servicesTemplateData = [];\r
50                     for (var i = 0; i < resp.length; i++) {\r
51                         //generate node table display data\r
52                         vm.servicesTemplateData.push(resp[i]);\r
53                     }\r
54                     vm.$initNfvNodesTab();\r
55                 }\r
56             },\r
57             error: function () {\r
58                 commonUtil.showMessage($.i18n.prop("nfv-topology-iui-message-error"), "danger");\r
59             }\r
60         });\r
61     },\r
62     $initNodesData: function (tempId) {\r
63         $.ajax({\r
64             type: "GET",\r
65             //url: vm.$restUrl.queryNodeTemplateUrl,\r
66             url: "/openoapi/catalog/v1/servicetemplates/" + tempId + "/nodetemplates",\r
67             success: function (resp) {\r
68                 if (resp) {\r
69                     var nodesTempData = [];\r
70                     for (var i = 0; i < resp.length; i++) {\r
71                         //generate node table display data\r
72                         var nodeTemplate = topoUtil.generateNodeTemplate(resp[i]);\r
73                         nodesTempData.push(nodeTemplate);\r
74                     }\r
75                     vm.nodesList.nodesData[tempId] = nodesTempData;\r
76                     vm.nodesList.$initNodesTable(tempId);\r
77                 }\r
78             },\r
79             error: function () {\r
80                 commonUtil.showMessage($.i18n.prop("nfv-topology-iui-message-error"), "danger");\r
81             }\r
82         });\r
83     },\r
84     servicesTemplateData: [],\r
85     $nodesTabId: "ict_nodes_template_table",\r
86     $nodesTemplateTabFields: {// table columns\r
87         table: [\r
88             {"mData": "serviceTemplateId", name: "ID","bVisible": false},\r
89             {"mData": "", name: "","sClass": 'details-control'},\r
90             {"mData": "templateName", name: $.i18n.prop("nfv-template-iui-field-templatename")},\r
91             {"mData": "vendor", name: $.i18n.prop("nfv-template-iui-field-vendor")},\r
92             {"mData": "version", name: $.i18n.prop("nfv-template-iui-field-version")},\r
93             {"mData":"csarid", name: "packageID","bVisible": false},\r
94             {"mData": "type", name: $.i18n.prop("nfv-template-iui-field-type")},\r
95         ]\r
96     },\r
97     $initNfvNodesTab: function() {\r
98         var setting = {};\r
99         setting.language = vm.$language;\r
100         setting.paginate = true;\r
101         setting.info = true;\r
102         setting.columns = vm.$nodesTemplateTabFields.table;\r
103         setting.restUrl = vm.$restUrl.queryTemplateInfoUrl;\r
104         setting.tableId = vm.$nodesTabId;\r
105         serverPageTable.initDataTable(setting,{},vm.$nodesTabId + '_div');\r
106         $('#' + vm.$nodesTabId + '>tbody').on("click", 'td.details-control', function () {\r
107             var tr = $(this).closest('tr');\r
108             var table =  $('#' + vm.$nodesTabId).dataTable();\r
109             if (table.fnIsOpen(tr[0])) {\r
110                 table.fnClose(tr[0]);\r
111                 tr.removeClass('shown');\r
112             }\r
113             else {\r
114                 table.fnOpen(tr[0], vm.nodesList.$format_Detail(table,tr[0]), 'details');\r
115                 tr.addClass('shown');\r
116             }\r
117         });\r
118     },\r
119 \r
120     //nodes list table\r
121     nodesList: {\r
122         nodesData: {}, //used in Nodes tab page, to store nodes data of difference service template\r
123         tempId:"", //used in Nodes tab page,to store the node's templateId\r
124         $nodesTabDataId: "ict_nodes_table",\r
125         $nodesTabFields: {// table columns\r
126             table: [\r
127                 {"mData": "id", name: "ID", "bVisible": false},\r
128                 {\r
129                     "mData": "name",\r
130                     name: $.i18n.prop("nfv-templateDetail-iui-field-nodetypename"),\r
131                     "bSortable": true,\r
132                     "fnRender": tmNodesDetailUtil.nameRender\r
133                 },\r
134                 {"mData": "type", name: $.i18n.prop("nfv-templateDetail-iui-field-type"), "bSortable": false},\r
135                 {\r
136                     "mData": "containedin",\r
137                     name: $.i18n.prop("nfv-templateDetail-iui-field-containedin"),\r
138                     "bSortable": false\r
139                 },\r
140                 {\r
141                     "mData": "deployedon",\r
142                     name: $.i18n.prop("nfv-templateDetail-iui-field-deployedon"),\r
143                     "bSortable": false\r
144                 },\r
145                 {\r
146                     "mData": "connectedto",\r
147                     name: $.i18n.prop("nfv-templateDetail-iui-field-connectedto"),\r
148                     "bSortable": false\r
149                 },\r
150                 {\r
151                     "mData": "virtuallinksto",\r
152                     name: $.i18n.prop("nfv-templateDetail-iui-field-virtuallinksto"),\r
153                     "bSortable": false\r
154                 }\r
155             ]\r
156         },\r
157         $initNodesTable: function (tempId) {\r
158             var setting = {};\r
159             setting.language = vm.$language;\r
160             setting.paginate = true;\r
161             setting.info = true;\r
162             setting.columns = vm.nodesList.$nodesTabFields.table;\r
163             setting.restUrl = "/openoapi/catalog/v1/servicetemplates/" + tempId + "/nodetemplates";\r
164             setting.tableId = vm.nodesList.$nodesTabDataId + "_" + tempId;\r
165             //serverPageTable.initTableWithData(setting,vm.nodesList.$nodesTabDataId + '_div',vm.nodesList.nodesData.$model);\r
166             serverPageTable.initTableWithoutLib(setting, {}, setting.tableId + '_div');\r
167         },\r
168         $format_Detail: function (oTable, nTr) {\r
169             var aData = oTable.fnGetData(nTr);\r
170             var tempId = aData.serviceTemplateId;\r
171             vm.nodesList.tempId = tempId;\r
172             var tableId = "ict_nodes_table" + "_" + tempId + "_div";\r
173             var sOut = '<div class="row-fluid" data-name="table_zone"><div class="col-xs-12" id="'+tableId+'"></div></div>'\r
174             vm.$initNodesData(tempId);\r
175             return sOut;\r
176         },\r
177     },\r
178     //Nodes Details\r
179     nodesDetail : {\r
180         detailTitle: "",\r
181         isShow: "none",\r
182         detailIndex: 0,\r
183         detailData: [\r
184             {id: "general", name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-general"), isActive: true},\r
185             {\r
186                 id: "properties",\r
187                 name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-properties"),\r
188                 isActive: false\r
189             },\r
190             {\r
191                 id: "relationShips",\r
192                 name: $.i18n.prop("nfv-templateDetail-nodesTab-iui-tab-relationShips"),\r
193                 isActive: false\r
194             }\r
195         ],\r
196         $showDetails: function (isShow, nodetypeid, nodetypename,tempId) {\r
197             vm.nodesDetail.isShow = isShow;\r
198             if (isShow == "block") {\r
199                 vm.nodesDetail.detailTitle = nodetypename + " " + $.i18n.prop("nfv-templateDetail-nodesTab-iui-title-nodeDetail"),\r
200                     $('#' + vm.nodesDetail.detailData[0].id).click();\r
201                 vm.nodesDetail.detailData[0].isActive = true;\r
202                 vm.nodesDetail.$initNodeDetailTable(nodetypeid,tempId);\r
203             }\r
204         },\r
205         detailCondChange: function (index) {\r
206             vm.nodesDetail.detailIndex = index;\r
207             for (var i = 0; i < vm.nodesDetail.detailData.length; i++) {\r
208                 vm.nodesDetail.detailData[i].isActive = false;\r
209             }\r
210             vm.nodesDetail.detailData[index].isActive = true;\r
211         },\r
212         $tableFields : {// table columns\r
213             general: [\r
214                 {\r
215                     "mData": "key",\r
216                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-key"),\r
217                     "bSortable": false\r
218                 },\r
219                 {\r
220                     "mData": "value",\r
221                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-value"),\r
222                     "bSortable": false\r
223                 }\r
224             ],\r
225             properties: [\r
226                 {\r
227                     "mData": "key",\r
228                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-key"),\r
229                     "bSortable": false\r
230                 },\r
231                 {\r
232                     "mData": "value",\r
233                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-value"),\r
234                     "bSortable": false\r
235                 }\r
236             ],\r
237             relationShips: [\r
238                 {\r
239                     "mData": "sourceNodeName",\r
240                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-sourceNodeName"),\r
241                     "bSortable": false\r
242                 },\r
243                 {\r
244                     "mData": "targetNodeName",\r
245                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-targetNodeName"),\r
246                     "bSortable": false\r
247                 },\r
248                 {\r
249                     "mData": "type",\r
250                     "name": $.i18n.prop("nfv-templateDetail-nodesTab-iui-field-type"),\r
251                     "bSortable": false\r
252                 }\r
253             ]\r
254         },\r
255         $initNodeDetailTable: function (nodetemplateid,tempId) {\r
256             var data = topoUtil.getCurrentDetailData(vm.nodesList.nodesData[tempId], nodetemplateid);\r
257             //initialize three tables of nodedetail\r
258             $.each(vm.nodesDetail.$tableFields, function(key, value){\r
259                 var setting = {};\r
260                 setting.language = vm.$language;\r
261                 setting.paginate = false;\r
262                 setting.info = false;\r
263                 setting.columns = value;\r
264                 setting.tableId = "ict_table_" + key;\r
265                 serverPageTable.initTableWithData(setting, setting.tableId + '_div', data[key]);\r
266             });\r
267         }\r
268     },\r
269 });\r
270 \r
271 var initParam = function() { //initialize template detail params\r
272     var paramStr = window.location.search.substring(1);\r
273     if(paramStr.length > 0) {\r
274         var params = paramStr.split("&");\r
275         var templateId = params[0].substring(params[0].indexOf('=') + 1);\r
276         var flavor = params[1].substring(params[1].indexOf('=') + 1);\r
277         avalon.scan();\r
278 \r
279         vm.templateId = templateId;\r
280         vm.$restUrl.queryNodeTemplateUrl = commonUtil.format(vm.$restUrl.queryNodeTemplateUrl, templateId);\r
281 \r
282         if(flavor) {\r
283             vm.$restUrl.queryNodeTemplateUrl += "?flavor=" + flavor;\r
284         }\r
285 \r
286         vm.$init();\r
287     }\r
288 };\r
289 initParam();