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