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 _find
from 'lodash/find';
24 import _indexOf
from 'lodash/indexOf';
25 import _extend
from 'lodash/extend';
27 class RecordViewStore
{
29 this.isLoading
= true;
30 this.cardLoading
= true;
31 this.detailLoading
= true;
32 //Reference to current socket
34 //Reference to current record type
35 //"vnfr", "nsr", "default"
36 this.recordType
= "default";
37 //Reference to current record ID
42 this.recordData
= null;
45 this.configPrimitives
= [];
47 this.bindActions(RecordViewActions
);
48 this.exportPublicMethods({
49 constructAndTriggerVnfConfigPrimitive
: this.constructAndTriggerVnfConfigPrimitive
,
50 constructAndTriggerNsConfigPrimitive
: this.constructAndTriggerNsConfigPrimitive
,
51 triggerCreateScalingGroupInstance
: this.triggerCreateScalingGroupInstance
,
52 triggerDeleteScalingGroupInstance
: this.triggerDeleteScalingGroupInstance
,
53 validateInputs
: this.validateInputs
,
54 handleCloseSocket
: this.handleCloseSocket
,
55 handleCloseJobSocket
: this.handleCloseJobSocket
,
56 triggerCreateVirtualLink
: this.triggerCreateVirtualLink
,
57 triggerEditVirtualLink
: this.triggerEditVirtualLink
,
58 triggerDeleteVirtualLink
: this.triggerDeleteVirtualLink
60 this.exportAsync(RecordViewSource
);
62 handleLogout
= () => {
65 handleCloseSocket
= () => {
67 window
.multiplexer
.channel(this.channelId
).close();
70 handleCloseJobSocket
= () => {
72 window
.multiplexer
.channel(this.jobSocketChannelId
).close();
81 getNSRSocketLoading() {
86 getVNFRSocketLoading() {
91 getConfigSocketJobSuccess(connection
) {
93 let ws
= window
.multiplexer
.channel(connection
);
95 console
.warn('There was an issue connecting to the Config Job socket');
99 self
.handleCloseJobSocket();
104 jobSocketChannelId
: connection
106 ws
.onmessage = function(data
) {
107 let jobData
= JSON
.parse(data
.data
);
108 jobData
= jobData
.nsrs
[0]["config-agent-job"] || [];
109 self
.setState({jobData
:jobData
});
111 ws
.onerror = function(data
) {
112 console
.log('err', data
)
115 getVNFRSocketSuccess(connection
) {
117 connectionManager
.call(this, 'vnfr', connection
);
119 getNSRSocketSuccess(connection
) {
120 connectionManager
.call(this, 'nsr', connection
);
127 getRawSuccess(data
) {
133 getNSRSuccess(data
) {
136 constructAndTriggerVnfConfigPrimitive(data
) {
137 let vnfrs
= data
.vnfrs
;
138 let vnfrIndex
= data
.vnfrIndex
;
139 let configPrimitiveIndex
= data
.configPrimitiveIndex
;
142 let configPrimitive
= vnfrs
[vnfrIndex
]['vnf-configuration']['service-primitive'][configPrimitiveIndex
];
144 payload
['name'] = '';
145 payload
['nsr_id_ref'] = vnfrs
[vnfrIndex
]['nsr-id-ref'];
146 payload
['vnf-list'] = [];
147 payload
['triggered-by'] = 'vnf-primitive';
149 configPrimitive
['parameter'] && configPrimitive
['parameter'].map((parameter
) => {
151 isValid
= validateParameter(parameter
);
154 name
: parameter
['name'],
155 value
: parameter
['value'] || parameter
['default-value']
159 let vnfPrimitive
= [];
161 name
: configPrimitive
['name'],
162 index
: configPrimitiveIndex
165 if (parameters
.length
> 0) {
166 vnfPrimitive
[0].parameter
= parameters
;
169 payload
['vnf-list'].push({
170 'member_vnf_index_ref': vnfrs
[vnfrIndex
]['member-vnf-index-ref'],
171 'vnfr-id-ref': vnfrs
[vnfrIndex
]['id'],
172 'vnf-primitive': vnfPrimitive
175 this.execNsConfigPrimitive(payload
);
179 constructAndTriggerNsConfigPrimitive(data
) {
180 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
181 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
182 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
185 name
: nsConfigPrimitive
['name'],
186 nsr_id_ref
: nsConfigPrimitive
['nsr_id_ref'],
189 'parameter-group': [],
192 nsConfigPrimitive
['vnf-primitive-group'].map((vnf
) => {
194 let vnfPrimitiveList
= []
195 vnf
['inputs'].map((vnfPrimitive
) => {
197 let parameterList
= [];
199 const filterAndAddByValue
= (paramObj
) => {
200 let nameValuePair
= null;
202 if (paramObj
['value'] != undefined) {
205 value
: paramObj
.value
207 } else if (paramObj
['default-value'] != undefined) {
210 value
: paramObj
['default-value']
214 parameterList
.push(nameValuePair
);
217 return paramObj
['value'] != undefined;
220 vnfPrimitive
['parameter'].filter(filterAndAddByValue
);
222 if (parameterList
.length
> 0) {
223 vnfPrimitiveList
.push({
224 name
: vnfPrimitive
['name'],
225 index
: vnfPrimitive
['index'],
226 parameter
: parameterList
232 'member_vnf_index_ref': vnf
['member-vnf-index-ref'],
233 'vnfr-id-ref': vnf
['vnfr-id-ref'],
234 'vnf-primitive': vnfPrimitiveList
238 payload
['vnf-list'] = vnfList
;
240 let nsConfigPrimitiveParameterGroupParameters
= [];
241 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((nsConfigPrimitiveParameterGroup
) => {
242 let nsConfigPrimitiveParameters
= [];
243 nsConfigPrimitiveParameterGroup
['parameter'] && nsConfigPrimitiveParameterGroup
['parameter'].map((nsConfigPrimitiveParameterGroupParameter
) => {
244 if (nsConfigPrimitiveParameterGroupParameter
['value'] != undefined) {
245 nsConfigPrimitiveParameters
.push({
246 'name': nsConfigPrimitiveParameterGroupParameter
.name
,
247 'value': nsConfigPrimitiveParameterGroupParameter
.value
251 nsConfigPrimitiveParameterGroupParameters
.push({
252 'name': nsConfigPrimitiveParameterGroup
.name
,
253 'parameter': nsConfigPrimitiveParameters
257 payload
['parameter-group'] = nsConfigPrimitiveParameterGroupParameters
;
259 let nsConfigPrimitiveParameters
= [];
260 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((nsConfigPrimitiveParameter
) => {
261 if (nsConfigPrimitiveParameter
['value'] != undefined && nsConfigPrimitiveParameter
['value'] != ""
264 nsConfigPrimitiveParameters
.push({
265 'name': nsConfigPrimitiveParameter
.name
,
266 'value': nsConfigPrimitiveParameter
.value
269 if ( (nsConfigPrimitiveParameter
['value'] == undefined)
270 && nsConfigPrimitiveParameter
['default-value']) {
271 nsConfigPrimitiveParameters
.push({
272 'name': nsConfigPrimitiveParameter
.name
,
273 'value': nsConfigPrimitiveParameter
['default-value']
279 payload
['parameter'] = nsConfigPrimitiveParameters
;
281 this.execNsConfigPrimitive(payload
);
283 execNsConfigPrimitiveSuccess(data
) {}
284 createScalingGroupInstanceSuccess(data
) {}
285 deleteScalingGroupInstanceSuccess(data
) {}
286 triggerCreateScalingGroupInstance(params
) {
287 this.createScalingGroupInstance(params
);
289 triggerDeleteScalingGroupInstance(params
) {
290 this.deleteScalingGroupInstance(params
);
292 validateInputs(data
) {
293 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
294 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
295 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
297 //Check parameter groups for required fields
298 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((parameterGroup
, parameterGroupIndex
) => {
299 let isMandatory
= parameterGroup
.mandatory
!= 'false';
300 let optionalChecked
= parameterGroup
.optionalChecked
;
301 let isActiveOptional
= (optionalChecked
&& !isMandatory
);
302 if (isActiveOptional
|| isMandatory
) {
303 parameterGroup
['parameter'] && parameterGroup
['parameter'].map((parameter
, parameterIndex
) => {
304 let msg
= 'Parameter Group: ' + parameterGroup
.name
+ ' is not valid';
306 isValid
= validateParameter(parameter
);
312 //Check top level parameters for required fields
313 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((parameter
, parameterIndex
) => {
315 isValid
= validateParameter(parameter
);
319 nsConfigPrimitive
['vnf-primitive-group'] && nsConfigPrimitive
['vnf-primitive-group'].map((vnfPrimitiveGroup
, vnfPrimitiveGroupIndex
) => {
320 vnfPrimitiveGroup
['inputs'] && vnfPrimitiveGroup
['inputs'].map((input
, inputIndex
) => {
321 input
['parameter'] && input
['parameter'].map((param
) => {
323 isValid
= validateParameter(param
);
332 createVirtualLinkSuccess(data
) {}
333 editVirtualLinkSuccess(data
) {}
334 deleteVirtualLinkSuccess(data
) {}
336 triggerCreateVirtualLink(params
) {
337 this.createVirtualLink(params
);
340 triggerDeleteVirtualLink(params
) {
341 this.deleteVirtualLink(params
);
344 triggerEditVirtualLink(params
) {
345 this.editVirtualLink(params
);
351 function validateParameter(parameter
, msg
) {
352 if ((parameter
['hidden'] == 'true') || (parameter
['read-only'] == 'true')) {
353 if (!parameter
['default-value']) {
354 var errorMsg
= 'Your descriptor has hidden or read-only parameters with no default-values. Please rectify this.';
355 console
.log(errorMsg
);
358 parameter
.value
= parameter
['default-value'];
362 if (parameter
.mandatory
== "true") {
363 if(parameter
.hasOwnProperty('value')){
364 if (!parameter
.value
) {
368 if (!parameter
['default-value']) {
371 parameter
.value
= parameter
['default-value'];
376 // if (parameter.value == '' || !parameter.value) {
377 // if (parameter['default-value']) {
378 // parameter.value = parameter['default-value'];
385 function connectionManager(type
, connection
) {
387 let ws
= window
.multiplexer
.channel(connection
);
389 console
.warn('There was an issue connecting to the ' + type
+ ' socket');
393 self
.handleCloseSocket();
398 channelId
: connection
400 ws
.onmessage = function(data
) {
402 let recordData
= JSON
.parse(data
.data
);
404 let nsrsData
= recordData
['nsrs'] || null;
406 let navigatorState
= {};
410 let nsrs
= nsrsData
[0];
414 nsd_name
: nsrs
.nsd_name
,
416 logo
: nsrs
.nsd
&& nsrs
.nsd
.logo
,
417 logoId
: nsrs
.nsd
&& nsrs
.nsd
&& nsrs
.nsd
.id
421 let scaledVnfrs
= [];
423 nsrs
['scaling-group-record'] && nsrs
['scaling-group-record'].map((sgr
, sgrIndex
) => {
424 sgr
['instance'] && sgr
['instance'].map((sgInstance
, sgInstanceIndex
) => {
427 scalingGroupName
: sgr
['scaling-group-name-ref'],
428 scalingGroupInstanceId
: sgInstance
['instance-id'],
432 sgInstance
['vnfrs'] && sgInstance
['vnfrs'].map((vnfr
, vnfrIndex
) => {
433 scaledVnfrs
.push(vnfr
);
434 let vnfrObj
= _find(nsrs
.vnfrs
, {id
: vnfr
});
435 scaledVnfNav
.vnfr
.push({
436 name
: vnfrObj
['short-name'],
439 logo
: vnfrObj
['vnfd'] && vnfrObj
['vnfd']['logo'],
440 logoId
: vnfrObj
['vnfd'] && vnfrObj
['vnfd']['id']
443 nav
.push(scaledVnfNav
);
448 nsrs
.vnfrs
.map(function(vnfr
, vnfrIndex
) {
449 if (_indexOf(scaledVnfrs
, vnfr
.id
) == -1) {
451 name
: vnfr
["short-name"],
454 logo
: vnfr
['vnfd'] && vnfr
['vnfd']['logo'],
455 logoId
: vnfr
['vnfd'] && vnfr
['vnfd']['id']
466 navigatorState
= _extend(navigatorState
, {
467 recordData
: recordData
,
473 self
.setState(navigatorState
);
477 export default Alt
.createStore(RecordViewStore
, 'RecordViewStore');