Merge master -> master_vca_intg 17/1017/1
authorKIRAN KASHALKAR <kiran.kashalkar@riftio.com>
Wed, 25 Jan 2017 15:50:30 +0000 (10:50 -0500)
committerKIRAN KASHALKAR <kiran.kashalkar@riftio.com>
Wed, 25 Jan 2017 15:50:30 +0000 (10:50 -0500)
Signed-off-by: KIRAN KASHALKAR <kiran.kashalkar@riftio.com>
1  2 
skyquake/plugins/composer/api/composer.js
skyquake/plugins/composer/src/src/components/CanvasPanel.js
skyquake/plugins/composer/src/src/libraries/model/DescriptorModelFields.js
skyquake/plugins/composer/src/src/stores/ComposerAppStore.js

@@@ -272,36 -272,36 +272,36 @@@ Composer.create = function(req) 
          });
      });
  };
// Composer.update = function(req) {
//     var api_server = req.query['api_server'];
//     var catalogType = req.params.catalogType;
//     var id = req.params.id;
//     var data = req.body;
//     console.log('Updating', catalogType, 'id', id, 'on', api_server);
//     var jsonData = {};
//     jsonData[catalogType] = {};
//     jsonData[catalogType] = data;
//     return new Promise(function(resolve, reject) {
//         var requestHeaders = {};
//         _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
//             'Authorization': req.get('Authorization')
//         });
//         request({
//             uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + id,
//             method: 'PUT',
//             headers: requestHeaders,
//             forever: constants.FOREVER_ON,
//             rejectUnauthorized: false,
//             json: jsonData
//         }, function(error, response, body) {
//             if (utils.validateResponse('Composer.update', error, response, body, resolve, reject)) {
//                 resolve({
//                     statusCode: response.statusCode
//                 });
//             }
//         });
//     });
- //
Composer.updateSave = function(req) {
+     var api_server = req.query['api_server'];
+     var catalogType = req.params.catalogType;
+     var id = req.params.id;
+     var data = req.body;
+     console.log('Updating', catalogType, 'id', id, 'on', api_server);
+     var jsonData = {};
+     jsonData[catalogType] = {};
+     jsonData[catalogType] = data;
+     return new Promise(function(resolve, reject) {
+         var requestHeaders = {};
+         _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
+             'Authorization': req.get('Authorization')
+         });
+         request({
+             uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + id,
+             method: 'PUT',
+             headers: requestHeaders,
+             forever: constants.FOREVER_ON,
+             rejectUnauthorized: false,
+             json: jsonData
+         }, function(error, response, body) {
+             if (utils.validateResponse('Composer.update', error, response, body, resolve, reject)) {
+                 resolve({
+                     statusCode: response.statusCode
+                 });
+             }
+         });
+     });
+ }
  
  Composer.update = function(req) {
      console.log(' Updating file', req.file.originalname, 'as', req.file.filename);
      var download_host = req.query['dev_download_server'];
  
      if (!download_host) {
-         download_host = req.protocol + '://' + req.headers.host;
+         download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
      }
      var input = {
          'external-url': download_host + '/composer/update/' + req.file.filename,
@@@ -368,7 -368,7 +368,7 @@@ Composer.upload = function(req) 
      var download_host = req.query['dev_download_server'];
  
      if (!download_host) {
-         download_host = req.protocol + '://' + req.headers.host;
+         download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
      }
  
      return new Promise(function(resolve, reject) {
@@@ -425,7 -425,7 +425,7 @@@ Composer.addFile = function(req) 
      var package_type = req.query['package_type'].toUpperCase();
      var package_path = req.query['package_path'];
      if (!download_host) {
-         download_host = req.protocol + '://' + req.headers.host;
+         download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
      }
  
      return new Promise(function(resolve, reject) {
@@@ -612,6 -612,9 +612,9 @@@ FileManager.get = function(req) 
                                  data: data.body
                              });
                          }
+                     }).catch(function(err) {
+                         console.log('Failed to retrieve FileManager.list')
+                         resolve(err);
                      })
                  }
              })
@@@ -633,7 -636,7 +636,7 @@@ FileManager.job = function(req) 
              forever: constants.FOREVER_ON,
              rejectUnauthorized: false,
          }, function(error, response, body) {
 -            if (utils.validateResponse('restconfAPI.streams', error, response, body, resolve, reject)) {
 +            if (utils.validateResponse('FileManager.job', error, response, body, resolve, reject)) {
                  var data = JSON.parse(response.body)['rw-pkg-mgmt:download-jobs'];
                  var returnData = [];
                  data && data.job.map(function(d) {
@@@ -34,9 -34,9 +34,9 @@@ import CanvasPanelTray from './CanvasPa
  import EditForwardingGraphPaths from './EditorForwardingGraph/EditForwardingGraphPaths'
  import SelectionManager from '../libraries/SelectionManager'
  import DescriptorModelIconFactory from '../libraries/model/IconFactory'
 -
  import FileManager from './filemanager/FileManager.jsx';
  
 +import ConfigPrimitiveParameters from './ConfigPrimitiveParameters/ConfigPrimitiveParameters'
  import '../styles/CanvasPanel.scss'
  
  const CanvasPanel = React.createClass({
                                                <button className={isDescriptorView ? '-selected' : ''} onClick={ComposerAppActions.showDescriptor}>
                                                        Descriptor
                                                </button>
-                                               <button className={!isDescriptorView ? '-selected' : ''}  onClick={ComposerAppActions.showAssets}>
-                                                       Assets
-                                               </button>
+                                               {
+                                                       this.props.files ?
+                                                               <button className={!isDescriptorView ? '-selected' : ''}  onClick={ComposerAppActions.showAssets}>
+                                                                       Assets
+                                                               </button>
+                                                       : null
+                                               }
                                        </div>
                                </div>
                        )
 +        //CanvasPanelTray panel to display
 +        let displayedPanel = null;
 +        switch (this.props.displayedPanel) {
 +            case 'forwarding' : displayedPanel = (<EditForwardingGraphPaths containers={this.props.containers} />); break;
 +            case 'parameter' : displayedPanel = (<ConfigPrimitiveParameters  containers={this.props.containers} />); break;
 +            default: displayedPanel = (<div><p className="welcome-message">Please select a tab</p></div>); break;
 +        }
                return (
                        <div id="canvasPanelDiv" className="CanvasPanel" style={style} onDragOver={this.onDragOver} onDrop={this.onDrop}>
                                <div onDoubleClick={this.onDblClickOpenFullScreen}  className="CanvasPanelHeader panel-header" data-resizable="limit_bottom">
                                                <CanvasZoom zoom={this.props.zoom} style={{bottom: this.props.layout.bottom + 20}}/>
                                                : null
                                }
 -                              <CanvasPanelTray layout={this.props.layout} show={isEditingNSD && isDescriptorView}>
 -                                      <EditForwardingGraphPaths containers={this.props.containers} />
 +                              <CanvasPanelTray layout={this.props.layout} displayedPanel={this.props.displayedPanel} show={isEditingNSD && isDescriptorView}>
 +                                      {displayedPanel}
                                </CanvasPanelTray>
                        </div>
                );
@@@ -27,8 -27,7 +27,8 @@@ export default 
        nsd: common.concat(['constituent-vnfd', 'vnffgd', 'vld']),
        vld: common.concat([]),
        vnfd: common.concat(['vdu', 'internal-vld']),
-       'vnfd.vdu': common.concat(['image', 'external-interface', 'vm-flavor', 'cloud-init', 'filename']),
+       'vnfd.vdu': common.concat(['image', 'image-checksum', 'external-interface', 'vm-flavor', 'cloud-init', 'filename']),
 +    'nsd.config-parameter-map': common.concat([]),
        // white-list valid fields to send in the meta field
        meta: ['containerPositionMap']
  };
@@@ -122,7 -122,7 +122,7 @@@ class ComposerAppStore 
                this.fullScreenMode = false;
                this.panelTabShown = 'descriptor';
                //File manager values
-               this.files = [];
+               this.files = false;
                this.filesState = {};
                this.downloadJobs = {};
                //End File  manager values
                this.setState({showJSONViewer: false});
        }
  
 -      toggleCanvasPanelTray() {
 +      toggleCanvasPanelTray(event) {
                const layout = this.layout;
 -              if (layout.bottom > 25) {
 +              const attrMap = event.target.attributes;
 +              let panelEvent = null;
 +              for(let k in attrMap) {
 +                      if(attrMap[k].name == 'data-event') {
 +                              panelEvent = attrMap[k].nodeValue;
 +                      }
 +              }
 +              if ((layout.bottom > 25) && ((panelEvent == this.displayedPanel) || panelEvent == 'arrow')) {
                        this.closeCanvasPanelTray();
                } else {
                        this.openCanvasPanelTray();
                }
 +              this.setState({displayedPanel: panelEvent})
        }
  
        openCanvasPanelTray() {
                let self = this;
                let filesState = null;
          if (self.fileMonitoringSocketID) {
-                       filesState = addInputState( _.cloneDeep(this.filesState),data);
-                       // filesState = _.merge(self.filesState, addInputState({},data));
-                       let normalizedData = normalizeTree(data);
-                       this.setState({
-                               files: {
-                                       data: _.mergeWith(normalizedData.data, self.files.data, function(obj, src) {
-                                               return _.uniqBy(obj? obj.concat(src) : src, 'name');
-                                       }),
-                                       id: self.files.id || normalizedData.id
-                               },
-                               filesState: filesState
-                       });
+               let newState = {};
+               if(data.hasOwnProperty('contents')) {
+                       filesState = addInputState( _.cloneDeep(this.filesState),data);
+                               // filesState = _.merge(self.filesState, addInputState({},data));
+                               let normalizedData = normalizeTree(data);
+                               newState = {
+                                       files: {
+                                               data: _.mergeWith(normalizedData.data, self.files.data, function(obj, src) {
+                                                       return _.uniqBy(obj? obj.concat(src) : src, 'name');
+                                               }),
+                                               id: self.files.id || normalizedData.id
+                                       },
+                                       filesState: filesState
+                               }
+               } else {
+                       newState = {
+                               files: false
+                       }
+               }
+                       this.setState(newState);
          }
                function normalizeTree(data) {
                        let f = {
                let self = this;
                let ws = window.multiplexer.channel(id);
                let downloadJobs = _.cloneDeep(self.downloadJobs);
-               let newFiles = {};
+               let newFiles = false;
                ws.onmessage = (socket) => {
              if (self.files && self.files.length > 0) {
                  let jobs = [];
        openFileManagerSockets(i) {
                let self = this;
                let item = i || self.item;
-               this.files = {data:[]};
          // this.closeFileManagerSockets();
                this.getInstance().openFileMonitoringSocket(item.id, item.uiState.type).then(function() {
          //    // self.getInstance().openDownloadMonitoringSocket(item.id);