3 * Copyright 2016 RIFT.IO Inc
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 import RecordViewActions
from './recordViewActions.js';
19 import RecordViewSource
from './recordViewSource.js';
21 // import AppHeaderActions from 'widgets/header/headerActions.js';
22 import Alt
from '../alt';
23 import _
from 'underscore';
25 class RecordViewStore
{
27 this.isLoading
= true;
28 this.cardLoading
= true;
29 this.detailLoading
= true;
30 //Reference to current socket
32 //Reference to current record type
33 //"vnfr", "nsr", "default"
34 this.recordType
= "default";
35 //Reference to current record ID
40 this.recordData
= null;
43 this.configPrimitives
= [];
45 this.bindActions(RecordViewActions
);
46 this.exportPublicMethods({
47 constructAndTriggerVnfConfigPrimitive
: this.constructAndTriggerVnfConfigPrimitive
,
48 constructAndTriggerNsConfigPrimitive
: this.constructAndTriggerNsConfigPrimitive
,
49 triggerCreateScalingGroupInstance
: this.triggerCreateScalingGroupInstance
,
50 triggerDeleteScalingGroupInstance
: this.triggerDeleteScalingGroupInstance
,
51 validateInputs
: this.validateInputs
,
52 handleCloseSocket
: this.handleCloseSocket
,
53 handleCloseJobSocket
: this.handleCloseJobSocket
,
54 triggerCreateVirtualLink
: this.triggerCreateVirtualLink
,
55 triggerEditVirtualLink
: this.triggerEditVirtualLink
,
56 triggerDeleteVirtualLink
: this.triggerDeleteVirtualLink
58 this.exportAsync(RecordViewSource
);
60 handleLogout
= () => {
63 handleCloseSocket
= () => {
65 window
.multiplexer
.channel(this.channelId
).close();
68 handleCloseJobSocket
= () => {
70 window
.multiplexer
.channel(this.jobSocketChannelId
).close();
79 getNSRSocketLoading() {
84 getVNFRSocketLoading() {
89 getConfigSocketJobSuccess(connection
) {
91 let ws
= window
.multiplexer
.channel(connection
);
93 console
.warn('There was an issue connecting to the Config Job socket');
97 self
.handleCloseJobSocket();
102 jobSocketChannelId
: connection
104 ws
.onmessage = function(data
) {
105 let jobData
= JSON
.parse(data
.data
);
106 jobData
= jobData
.nsrs
[0]["config-agent-job"] || [];
107 self
.setState({jobData
:jobData
});
109 ws
.onerror = function(data
) {
110 console
.log('err', data
)
113 getVNFRSocketSuccess(connection
) {
115 connectionManager
.call(this, 'vnfr', connection
);
117 getNSRSocketSuccess(connection
) {
118 connectionManager
.call(this, 'nsr', connection
);
125 getRawSuccess(data
) {
131 getNSRSuccess(data
) {
134 constructAndTriggerVnfConfigPrimitive(data
) {
135 let vnfrs
= data
.vnfrs
;
136 let vnfrIndex
= data
.vnfrIndex
;
137 let configPrimitiveIndex
= data
.configPrimitiveIndex
;
140 let configPrimitive
= vnfrs
[vnfrIndex
]['vnf-configuration']['service-primitive'][configPrimitiveIndex
];
142 payload
['name'] = '';
143 payload
['nsr_id_ref'] = vnfrs
[vnfrIndex
]['nsr-id-ref'];
144 payload
['vnf-list'] = [];
145 payload
['triggered-by'] = 'vnf-primitive';
147 configPrimitive
['parameter'] && configPrimitive
['parameter'].map((parameter
) => {
149 isValid
= validateParameter(parameter
);
152 name
: parameter
['name'],
153 value
: parameter
['value'] || parameter
['default-value']
157 let vnfPrimitive
= [];
159 name
: configPrimitive
['name'],
160 index
: configPrimitiveIndex
163 if (parameters
.length
> 0) {
164 vnfPrimitive
[0].parameter
= parameters
;
167 payload
['vnf-list'].push({
168 'member_vnf_index_ref': vnfrs
[vnfrIndex
]['member-vnf-index-ref'],
169 'vnfr-id-ref': vnfrs
[vnfrIndex
]['id'],
170 'vnf-primitive': vnfPrimitive
173 this.execNsConfigPrimitive(payload
);
177 constructAndTriggerNsConfigPrimitive(data
) {
178 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
179 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
180 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
183 name
: nsConfigPrimitive
['name'],
184 nsr_id_ref
: nsConfigPrimitive
['nsr_id_ref'],
187 'parameter-group': [],
190 nsConfigPrimitive
['vnf-primitive-group'].map((vnf
) => {
192 let vnfPrimitiveList
= []
193 vnf
['inputs'].map((vnfPrimitive
) => {
195 let parameterList
= [];
197 const filterAndAddByValue
= (paramObj
) => {
198 let nameValuePair
= null;
200 if (paramObj
['value'] != undefined) {
203 value
: paramObj
.value
205 } else if (paramObj
['default-value'] != undefined) {
208 value
: paramObj
['default-value']
212 parameterList
.push(nameValuePair
);
215 return paramObj
['value'] != undefined;
218 vnfPrimitive
['parameter'].filter(filterAndAddByValue
);
220 if (parameterList
.length
> 0) {
221 vnfPrimitiveList
.push({
222 name
: vnfPrimitive
['name'],
223 index
: vnfPrimitive
['index'],
224 parameter
: parameterList
230 'member_vnf_index_ref': vnf
['member-vnf-index-ref'],
231 'vnfr-id-ref': vnf
['vnfr-id-ref'],
232 'vnf-primitive': vnfPrimitiveList
236 payload
['vnf-list'] = vnfList
;
238 let nsConfigPrimitiveParameterGroupParameters
= [];
239 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((nsConfigPrimitiveParameterGroup
) => {
240 let nsConfigPrimitiveParameters
= [];
241 nsConfigPrimitiveParameterGroup
['parameter'] && nsConfigPrimitiveParameterGroup
['parameter'].map((nsConfigPrimitiveParameterGroupParameter
) => {
242 if (nsConfigPrimitiveParameterGroupParameter
['value'] != undefined) {
243 nsConfigPrimitiveParameters
.push({
244 'name': nsConfigPrimitiveParameterGroupParameter
.name
,
245 'value': nsConfigPrimitiveParameterGroupParameter
.value
249 nsConfigPrimitiveParameterGroupParameters
.push({
250 'name': nsConfigPrimitiveParameterGroup
.name
,
251 'parameter': nsConfigPrimitiveParameters
255 payload
['parameter-group'] = nsConfigPrimitiveParameterGroupParameters
;
257 let nsConfigPrimitiveParameters
= [];
258 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((nsConfigPrimitiveParameter
) => {
259 if (nsConfigPrimitiveParameter
['value'] != undefined && nsConfigPrimitiveParameter
['value'] != ""
262 nsConfigPrimitiveParameters
.push({
263 'name': nsConfigPrimitiveParameter
.name
,
264 'value': nsConfigPrimitiveParameter
.value
267 if ( (nsConfigPrimitiveParameter
['value'] == undefined)
268 && nsConfigPrimitiveParameter
['default-value']) {
269 nsConfigPrimitiveParameters
.push({
270 'name': nsConfigPrimitiveParameter
.name
,
271 'value': nsConfigPrimitiveParameter
['default-value']
277 payload
['parameter'] = nsConfigPrimitiveParameters
;
279 this.execNsConfigPrimitive(payload
);
281 execNsConfigPrimitiveSuccess(data
) {}
282 createScalingGroupInstanceSuccess(data
) {}
283 deleteScalingGroupInstanceSuccess(data
) {}
284 triggerCreateScalingGroupInstance(params
) {
285 this.createScalingGroupInstance(params
);
287 triggerDeleteScalingGroupInstance(params
) {
288 this.deleteScalingGroupInstance(params
);
290 validateInputs(data
) {
291 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
292 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
293 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
295 //Check parameter groups for required fields
296 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((parameterGroup
, parameterGroupIndex
) => {
297 let isMandatory
= parameterGroup
.mandatory
!= 'false';
298 let optionalChecked
= parameterGroup
.optionalChecked
;
299 let isActiveOptional
= (optionalChecked
&& !isMandatory
);
300 if (isActiveOptional
|| isMandatory
) {
301 parameterGroup
['parameter'] && parameterGroup
['parameter'].map((parameter
, parameterIndex
) => {
302 let msg
= 'Parameter Group: ' + parameterGroup
.name
+ ' is not valid';
304 isValid
= validateParameter(parameter
);
310 //Check top level parameters for required fields
311 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((parameter
, parameterIndex
) => {
313 isValid
= validateParameter(parameter
);
317 nsConfigPrimitive
['vnf-primitive-group'] && nsConfigPrimitive
['vnf-primitive-group'].map((vnfPrimitiveGroup
, vnfPrimitiveGroupIndex
) => {
318 vnfPrimitiveGroup
['inputs'] && vnfPrimitiveGroup
['inputs'].map((input
, inputIndex
) => {
319 input
['parameter'] && input
['parameter'].map((param
) => {
321 isValid
= validateParameter(param
);
330 createVirtualLinkSuccess(data
) {}
331 editVirtualLinkSuccess(data
) {}
332 deleteVirtualLinkSuccess(data
) {}
334 triggerCreateVirtualLink(params
) {
335 this.createVirtualLink(params
);
338 triggerDeleteVirtualLink(params
) {
339 this.deleteVirtualLink(params
);
342 triggerEditVirtualLink(params
) {
343 this.editVirtualLink(params
);
349 function validateParameter(parameter
, msg
) {
350 if ((parameter
['hidden'] == 'true') || (parameter
['read-only'] == 'true')) {
351 if (!parameter
['default-value']) {
352 var errorMsg
= 'Your descriptor has hidden or read-only parameters with no default-values. Please rectify this.';
353 console
.log(errorMsg
);
356 parameter
.value
= parameter
['default-value'];
360 if (parameter
.mandatory
== "true") {
361 if(parameter
.hasOwnProperty('value')){
362 if (!parameter
.value
) {
366 if (!parameter
['default-value']) {
369 parameter
.value
= parameter
['default-value'];
374 // if (parameter.value == '' || !parameter.value) {
375 // if (parameter['default-value']) {
376 // parameter.value = parameter['default-value'];
383 function connectionManager(type
, connection
) {
385 let ws
= window
.multiplexer
.channel(connection
);
387 console
.warn('There was an issue connecting to the ' + type
+ ' socket');
391 self
.handleCloseSocket();
396 channelId
: connection
398 ws
.onmessage = function(data
) {
400 let recordData
= JSON
.parse(data
.data
);
402 let nsrsData
= recordData
['nsrs'] || null;
404 let navigatorState
= {};
408 let nsrs
= nsrsData
[0];
412 nsd_name
: nsrs
.nsd_name
,
414 logo
: nsrs
.nsd
&& nsrs
.nsd
.logo
,
415 logoId
: nsrs
.nsd
&& nsrs
.nsd
&& nsrs
.nsd
.id
419 let scaledVnfrs
= [];
421 nsrs
['scaling-group-record'] && nsrs
['scaling-group-record'].map((sgr
, sgrIndex
) => {
422 sgr
['instance'] && sgr
['instance'].map((sgInstance
, sgInstanceIndex
) => {
425 scalingGroupName
: sgr
['scaling-group-name-ref'],
426 scalingGroupInstanceId
: sgInstance
['instance-id'],
430 sgInstance
['vnfrs'] && sgInstance
['vnfrs'].map((vnfr
, vnfrIndex
) => {
431 scaledVnfrs
.push(vnfr
);
432 let vnfrObj
= _
.findWhere(nsrs
.vnfrs
, {id
: vnfr
});
433 scaledVnfNav
.vnfr
.push({
434 name
: vnfrObj
['short-name'],
437 logo
: vnfrObj
['vnfd'] && vnfrObj
['vnfd']['logo'],
438 logoId
: vnfrObj
['vnfd'] && vnfrObj
['vnfd']['id']
441 nav
.push(scaledVnfNav
);
446 nsrs
.vnfrs
.map(function(vnfr
, vnfrIndex
) {
447 if (_
.indexOf(scaledVnfrs
, vnfr
.id
) == -1) {
449 name
: vnfr
["short-name"],
452 logo
: vnfr
['vnfd'] && vnfr
['vnfd']['logo'],
453 logoId
: vnfr
['vnfd'] && vnfr
['vnfd']['id']
464 navigatorState
= _
.extend(navigatorState
, {
465 recordData
: recordData
,
471 self
.setState(navigatorState
);
475 export default Alt
.createStore(RecordViewStore
);