Bug 204 - Composer error adding EPA - NUMA Policy
[osm/UI.git] / skyquake / plugins / composer / src / src / libraries / model / DescriptorModelSerializer.js
index 7581ed5..b9070db 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -121,13 +121,15 @@ const DescriptorModelSerializer = {
                                return constituentVNFD;
 
                        });
-
+                       for (var key in confd) {
+                               checkForChoiceAndRemove(key, confd, nsdModel);
+                       }
                        // serialize the VLD instances
                        confd.vld = confd.vld.map(d => {
                                return DescriptorModelSerializer.serialize(d);
                        });
 
-                       return confd;
+                       return cleanEmptyTopKeys(confd);
 
                }
        },
@@ -142,11 +144,15 @@ const DescriptorModelSerializer = {
                        // once that is fixed, remove this piece of code.
                        // fix-start
                        for (var key in confd) {
-                               if (confd.hasOwnProperty(key) && confd[key] === '') {
-                                       delete confd[key];
-                               }
+                               if (confd.hasOwnProperty(key) && confd[key] === '') {
+                       delete confd[key];
+                } else {
+                       //removes choice properties from top level object and copies immediate children onto it.
+                                       checkForChoiceAndRemove(key, confd, vldModel);
+                }
                        }
 
+
                        const deepProperty = 'provider-network';
                        for (var key in confd[deepProperty]) {
                                if (confd[deepProperty].hasOwnProperty(key) && confd[deepProperty][key] === '') {
@@ -154,10 +160,8 @@ const DescriptorModelSerializer = {
                                }
                        }
                        // fix-end
-
-
                        confd[property] = confd[property].map(d => DescriptorModelSerializer[property].serialize(d));
-                       return confd;
+                       return cleanEmptyTopKeys(confd);
                }
        },
        'vnfd-connection-point-ref': {
@@ -165,6 +169,11 @@ const DescriptorModelSerializer = {
                        return _.pick(ref, ['member-vnf-index-ref', 'vnfd-id-ref', 'vnfd-connection-point-ref']);
                }
        },
+       'internal-connection-point': {
+               serialize(ref) {
+                       return _.pick(ref, ['id-ref']);
+               }
+       },
        'constituent-vnfd': {
                serialize(cvnfdModel) {
                        if(!cvnfdFields) cvnfdFields = DescriptorModelMetaFactory.getModelFieldNamesForType('nsd.constituent-vnfd');
@@ -176,15 +185,55 @@ const DescriptorModelSerializer = {
                        if(!vnfdFields) vnfdFields = DescriptorModelMetaFactory.getModelFieldNamesForType('vnfd').concat('uiState');
                        const confd = _.pick(vnfdModel, vnfdFields);
                        confd.vdu = confd.vdu.map(d => DescriptorModelSerializer.serialize(d));
-                       return confd;
+                       return cleanEmptyTopKeys(confd);
                }
        },
        vdu: {
                serialize(vduModel) {
-                       const confd = _.omit(vduModel, ['uiState']);
-                       return confd;
+                       const copy = _.cloneDeep(vduModel);
+                       const confd = _.omit(copy, ['uiState']);
+                       return cleanEmptyTopKeys(confd);
                }
        }
 };
 
+
+function checkForChoiceAndRemove(k, confd, model) {
+    let state = model.uiState;
+    if (state.choice) {
+        let choice = state.choice[k]
+        if(choice) {
+            if (choice.constructor.name == "Array") {
+                for(let i = 0; i < choice.length; i++) {
+                    for (let key in confd[k][i]) {
+                        if(choice[i] && (choice[i].selected.indexOf(key) > -1)) {
+                            confd[k][i][key] = confd[k][i][key]
+                        }
+                        confd[key];
+                    };
+                }
+            } else {
+                for (let key in confd[k]) {
+                    if(choice && (choice.selected.indexOf(key) > -1)) {
+                        confd[key] = confd[k][key]
+                    }
+                };
+                delete confd[k];
+            }
+
+        }
+    }
+    return confd;
+}
+
+function cleanEmptyTopKeys(m){
+    Object.keys(m).forEach(k => {
+        const isEmptyObject = typeof m[k] === 'object' && _.isEmpty(m[k]);
+        if (typeof m[k] === 'undefined' || isEmptyObject || m[k] === '') {
+            delete m[k];
+        }
+    });
+    return m;
+}
+
 export default DescriptorModelSerializer;