all files / src/network/helpers/ simulations.js

24.05% Statements 19/79
22.22% Branches 4/18
7.69% Functions 2/26
23.08% Lines 18/78
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165                                                                                                                                                                                                                                                                                                     
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.addFileForSimulationWithContents = addFileForSimulationWithContents;
exports.addEmptyFileForSimulation = addEmptyFileForSimulation;
exports.saveSimulation = saveSimulation;
exports.activateSimulationStep = activateSimulationStep;
 
var _ = require('../');
 
var _2 = _interopRequireDefault(_);
 
var _notifications = require('./notifications');
 
var _AccessHelper = require('../../utils/AccessHelper');
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
function createItemForSimulation(simulation, name, file) {
  return _2.default.createItem(simulation.metadata.inputFolder._id, name).then(function (resp) {
    // fill item with file
    var itemId = resp.data._id;
    var params = {};
    params.parentType = 'item';
    params.parentId = itemId;
    params.name = file.name;
    params.size = file.size;
    console.log('Attach file to', itemId);
    return _2.default.uploadFileToItem(params, file);
  }).then(function (resp) {
    simulation.metadata.inputFolder.files[name] = resp.data._id;
    return _2.default.editSimulation(simulation);
  }).catch(function (error) {
    var msg = error.data && error.data.message ? error.data.message : error.message;
    console.error('upload failed:', msg);
  });
}
 
function addFileForSimulationWithContents(simulation, itemName, fileName, contents) {
  var fileId = void 0;
  return _2.default.createItem(simulation.metadata.inputFolder._id, itemName).then(function (resp) {
    var parentId = resp.data._id;
    return _2.default.newFile({
      parentType: 'item',
      parentId: parentId,
      name: fileName,
      size: 0
    });
  }).then(function (resp) {
    fileId = resp.data._id;
    var blob = new Blob([contents], { type: 'text/plain' });
    return _2.default.updateFileContent(resp.data._id, contents.length).then(function (upload) {
      _2.default.uploadChunk(fileId, 0, blob);
    });
  }).then(function (resp) {
    return { _id: fileId };
  }).catch(function (err) {
    console.log('Error adding ini content', err);
  });
}
 
function addEmptyFileForSimulation(simulation, itemName, fileName) {
  return _2.default.createItem(simulation.metadata.inputFolder._id, itemName).then(function (resp) {
    var parentId = resp.data._id;
    return _2.default.newFile({
      parentType: 'item',
      parentId: parentId,
      name: fileName,
      size: 0
    });
  });
}
 
// if there's not a sim.id, create a sim with two folders input and output
// otherwise update simulation
function saveSimulation(simulation_, attachments) {
  var simulation = simulation_;
  Iif (!simulation._id) {
    var folder = void 0;
    var outputFolder = void 0;
    return _2.default.createSimulation(simulation.projectId, simulation)
    // make output folder
    .then(function (resp) {
      simulation = resp.data;
      folder = {
        name: 'output',
        parentType: 'folder',
        parentId: resp.data.folderId
      };
      return _2.default.createFolder(folder);
    })
    // make input folder
    .then(function (resp) {
      outputFolder = resp.data._id;
      folder.name = 'input';
      return _2.default.createFolder(folder);
    })
    // update sim metadata
    .then(function (resp) {
      var inputFolder = resp.data._id;
      simulation.metadata = Object.assign({}, simulation.metadata, {
        status: 'created',
        inputFolder: {
          _id: inputFolder,
          files: {}
        },
        outputFolder: {
          _id: outputFolder,
          files: {}
        }
      });
      return _2.default.editSimulation(simulation);
    })
    // upload files to inputfolder if there are any,
    // returns either promise result array with sim object as last item or simulation object.
    .then(function (resp) {
      if (attachments) {
        var promises = [];
        Object.keys(attachments).forEach(function (file) {
          promises.push(createItemForSimulation(simulation, file, attachments[file]));
        });
        return new Promise(function (a, r) {
          Promise.all(promises).then(function () {
            a({ data: simulation });
          });
        });
      }
      return new Promise(function (a, r) {
        a({ data: simulation });
      });
    }).catch(function (error) {
      return new Promise(function (a, r) {
        r(error);
      });
    });
  }
 
  return _2.default.editSimulation(simulation);
}
 
function activateSimulationStep(user, simulation, active, disabled) {
  // Update local data
  simulation.active = active;
 
  if (simulation.disabled.indexOf(active) !== -1) {
    simulation.disabled.splice(simulation.disabled.indexOf(active), 1);
  }
 
  if (disabled) {
    simulation.disabled.push(disabled);
  }
  (0, _notifications.invalidateSimulation)(simulation);
 
  if ((0, _AccessHelper.userHasAccess)(user, simulation.access, 'WRITE')) {
    return _2.default.editSimulation(simulation);
  }
 
  return new Promise(function (res, rej) {
    console.warn('User does not have sufficient access to update step on server');
    res();
  });
}