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'].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
,
161 parameter
: parameters
164 payload
['vnf-list'].push({
165 'member_vnf_index_ref': vnfrs
[vnfrIndex
]['member-vnf-index-ref'],
166 'vnfr-id-ref': vnfrs
[vnfrIndex
]['id'],
167 'vnf-primitive': vnfPrimitive
170 this.execNsConfigPrimitive(payload
);
174 constructAndTriggerNsConfigPrimitive(data
) {
175 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
176 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
177 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
180 name
: nsConfigPrimitive
['name'],
181 nsr_id_ref
: nsConfigPrimitive
['nsr_id_ref'],
184 'parameter-group': [],
187 nsConfigPrimitive
['vnf-primitive-group'].map((vnf
) => {
189 let vnfPrimitiveList
= []
190 vnf
['inputs'].map((vnfPrimitive
) => {
192 let parameterList
= [];
194 const filterAndAddByValue
= (paramObj
) => {
195 if (paramObj
['value'] != undefined) {
198 value
: paramObj
.value
201 return paramObj
['value'] != undefined;
204 vnfPrimitive
['parameter'].filter(filterAndAddByValue
);
206 if (parameterList
.length
> 0) {
207 vnfPrimitiveList
.push({
208 name
: vnfPrimitive
['name'],
209 index
: vnfPrimitive
['index'],
210 parameter
: parameterList
216 'member_vnf_index_ref': vnf
['member-vnf-index-ref'],
217 'vnfr-id-ref': vnf
['vnfr-id-ref'],
218 'vnf-primitive': vnfPrimitiveList
222 payload
['vnf-list'] = vnfList
;
224 let nsConfigPrimitiveParameterGroupParameters
= [];
225 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((nsConfigPrimitiveParameterGroup
) => {
226 let nsConfigPrimitiveParameters
= [];
227 nsConfigPrimitiveParameterGroup
['parameter'] && nsConfigPrimitiveParameterGroup
['parameter'].map((nsConfigPrimitiveParameterGroupParameter
) => {
228 if (nsConfigPrimitiveParameterGroupParameter
['value'] != undefined) {
229 nsConfigPrimitiveParameters
.push({
230 'name': nsConfigPrimitiveParameterGroupParameter
.name
,
231 'value': nsConfigPrimitiveParameterGroupParameter
.value
235 nsConfigPrimitiveParameterGroupParameters
.push({
236 'name': nsConfigPrimitiveParameterGroup
.name
,
237 'parameter': nsConfigPrimitiveParameters
241 payload
['parameter-group'] = nsConfigPrimitiveParameterGroupParameters
;
243 let nsConfigPrimitiveParameters
= [];
244 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((nsConfigPrimitiveParameter
) => {
245 if (nsConfigPrimitiveParameter
['value'] != undefined && nsConfigPrimitiveParameter
['value'] != ""
248 nsConfigPrimitiveParameters
.push({
249 'name': nsConfigPrimitiveParameter
.name
,
250 'value': nsConfigPrimitiveParameter
.value
253 if ( (nsConfigPrimitiveParameter
['value'] == undefined)
254 && nsConfigPrimitiveParameter
['default-value']) {
255 nsConfigPrimitiveParameters
.push({
256 'name': nsConfigPrimitiveParameter
.name
,
257 'value': nsConfigPrimitiveParameter
['default-value']
263 payload
['parameter'] = nsConfigPrimitiveParameters
;
265 this.execNsConfigPrimitive(payload
);
267 execNsConfigPrimitiveSuccess(data
) {}
268 createScalingGroupInstanceSuccess(data
) {}
269 deleteScalingGroupInstanceSuccess(data
) {}
270 triggerCreateScalingGroupInstance(params
) {
271 this.createScalingGroupInstance(params
);
273 triggerDeleteScalingGroupInstance(params
) {
274 this.deleteScalingGroupInstance(params
);
276 validateInputs(data
) {
277 let nsConfigPrimitiveIndexToExecute
= data
.nsConfigPrimitiveIndex
;
278 let nsConfigPrimitives
= data
.nsConfigPrimitives
;
279 let nsConfigPrimitive
= data
.nsConfigPrimitives
[nsConfigPrimitiveIndexToExecute
];
281 //Check parameter groups for required fields
282 nsConfigPrimitive
['parameter-group'] && nsConfigPrimitive
['parameter-group'].map((parameterGroup
, parameterGroupIndex
) => {
283 let isMandatory
= parameterGroup
.mandatory
!= 'false';
284 let optionalChecked
= parameterGroup
.optionalChecked
;
285 let isActiveOptional
= (optionalChecked
&& !isMandatory
);
286 if (isActiveOptional
|| isMandatory
) {
287 parameterGroup
['parameter'] && parameterGroup
['parameter'].map((parameter
, parameterIndex
) => {
288 let msg
= 'Parameter Group: ' + parameterGroup
.name
+ ' is not valid';
290 isValid
= validateParameter(parameter
);
296 //Check top level parameters for required fields
297 nsConfigPrimitive
['parameter'] && nsConfigPrimitive
['parameter'].map((parameter
, parameterIndex
) => {
299 isValid
= validateParameter(parameter
);
303 nsConfigPrimitive
['vnf-primitive-group'] && nsConfigPrimitive
['vnf-primitive-group'].map((vnfPrimitiveGroup
, vnfPrimitiveGroupIndex
) => {
304 vnfPrimitiveGroup
['inputs'] && vnfPrimitiveGroup
['inputs'].map((input
, inputIndex
) => {
305 input
['parameter'] && input
['parameter'].map((param
) => {
307 isValid
= validateParameter(param
);
316 createVirtualLinkSuccess(data
) {}
317 editVirtualLinkSuccess(data
) {}
318 deleteVirtualLinkSuccess(data
) {}
320 triggerCreateVirtualLink(params
) {
321 this.createVirtualLink(params
);
324 triggerDeleteVirtualLink(params
) {
325 this.deleteVirtualLink(params
);
328 triggerEditVirtualLink(params
) {
329 this.editVirtualLink(params
);
336 function validateParameter(parameter
, msg
) {
337 if ((parameter
['hidden'] == 'true') || (parameter
['read-only'] == 'true')) {
338 if (!parameter
['default-value']) {
339 var errorMsg
= 'Your descriptor has hidden or read-only parameters with no default-values. Please rectify this.';
340 console
.log(errorMsg
);
343 parameter
.value
= parameter
['default-value'];
347 if (parameter
.mandatory
== "true") {
348 if(parameter
.hasOwnProperty('value')){
349 if (!parameter
.value
) {
353 if (!parameter
['default-value']) {
356 parameter
.value
= parameter
['default-value'];
361 // if (parameter.value == '' || !parameter.value) {
362 // if (parameter['default-value']) {
363 // parameter.value = parameter['default-value'];
370 function connectionManager(type
, connection
) {
372 let ws
= window
.multiplexer
.channel(connection
);
374 console
.warn('There was an issue connecting to the ' + type
+ ' socket');
378 self
.handleCloseSocket();
383 channelId
: connection
385 ws
.onmessage = function(data
) {
387 let recordData
= JSON
.parse(data
.data
);
389 let nsrsData
= recordData
['nsrs'] || null;
391 let navigatorState
= {};
395 let nsrs
= nsrsData
[0];
399 nsd_name
: nsrs
.nsd_name
,
404 let scaledVnfrs
= [];
406 nsrs
['scaling-group-record'] && nsrs
['scaling-group-record'].map((sgr
, sgrIndex
) => {
407 sgr
['instance'] && sgr
['instance'].map((sgInstance
, sgInstanceIndex
) => {
410 scalingGroupName
: sgr
['scaling-group-name-ref'],
411 scalingGroupInstanceId
: sgInstance
['instance-id'],
415 sgInstance
['vnfrs'] && sgInstance
['vnfrs'].map((vnfr
, vnfrIndex
) => {
416 scaledVnfrs
.push(vnfr
);
417 scaledVnfNav
.vnfr
.push({
418 name
: _
.findWhere(nsrs
.vnfrs
, {id
: vnfr
})['short-name'],
423 nav
.push(scaledVnfNav
);
428 nsrs
.vnfrs
.map(function(vnfr
, vnfrIndex
) {
429 if (_
.indexOf(scaledVnfrs
, vnfr
.id
) == -1) {
431 name
: vnfr
["short-name"],
444 navigatorState
= _
.extend(navigatorState
, {
445 recordData
: recordData
,
451 self
.setState(navigatorState
);
455 export default Alt
.createStore(RecordViewStore
);