codegenerator.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. {
  2. 'interfaces' : [{'method':'POST', 'url=':'/generatecode'}],
  3. 'csworker' :
  4. function(resp,method,uri,reqData,wcontext)
  5. {
  6. var actions = [__wHttpReq('GET','/current.model?wid='+wcontext.__aswid)];
  7. _do.chain(actions)(
  8. function(asdata) {
  9. var writeActions = [_fspp.mkdirs('./generated_code/'+reqData['root'])];
  10. _do.chain(writeActions)(
  11. function()
  12. {
  13. var res;
  14. if( (res = _mmmk.read())['$err'] ) {
  15. __postInternalErrorMsg(resp,res['$err']);
  16. } else {
  17. var cs = _utils.jsonp(res);
  18. var as = _utils.jsonp(asdata['data']);
  19. var subFolders = {};
  20. var from = {};
  21. var to = {};
  22. var filesInFolder = {};
  23. var possibleRoots = [];
  24. for (var key in as.nodes) {
  25. if (as.nodes[key]['$type'].indexOf('Folder') != -1) {
  26. possibleRoots.push(key);
  27. }
  28. }
  29. for (var key in as.edges) {
  30. if (as.nodes[as.edges[key]['src']]['$type'].indexOf('Folder') != -1) {
  31. from[as.edges[key]['dest']] = as.edges[key]['src'];
  32. } else if ((as.nodes[as.edges[key]['dest']]['$type'].indexOf('Folder') != -1)
  33. || (as.nodes[as.edges[key]['dest']]['$type'].indexOf('File') != -1)) {
  34. to[as.edges[key]['src']] = as.edges[key]['dest'];
  35. }
  36. }
  37. for (var key in from) {
  38. if (as.nodes[to[key]]['$type'].indexOf('Folder') != -1) {
  39. if (subFolders[from[key]]) {
  40. subFolders[from[key]].push(to[key]);
  41. } else {
  42. subFolders[from[key]] = [to[key]];
  43. }
  44. if (possibleRoots.indexOf(to[key]) > -1) {
  45. possibleRoots.splice(possibleRoots.indexOf(to[key]), 1);
  46. }
  47. } else if (as.nodes[to[key]]['$type'].indexOf('File') != -1) {
  48. if (filesInFolder[from[key]]) {
  49. filesInFolder[from[key]].push(to[key]);
  50. } else {
  51. filesInFolder[from[key]] = [to[key]];
  52. }
  53. }
  54. }
  55. if (possibleRoots.size > 1) {
  56. __postInternalErrorMsg(resp,"There can only be 1 root, found " + possibleRoots.size);
  57. } else {
  58. function generateFolder(key, prefix) {
  59. var dir = prefix + as.nodes[key]['name']['value'] + '/';
  60. writeActions = _fspp.mkdirs(dir);
  61. _do.chain(writeActions)(
  62. function() {
  63. for (var file in filesInFolder[key]) {
  64. _fs.writeFileSync(dir + as.nodes[filesInFolder[key][file]]['name']['value'], as.nodes[filesInFolder[key][file]]['contents']['value']);
  65. }
  66. },
  67. function(writeErr) { __postInternalErrorMsg(resp,writeErr); }
  68. );
  69. for (var subFolder in subFolders[key]) {
  70. generateFolder(subFolders[key][subFolder], dir);
  71. }
  72. }
  73. generateFolder(possibleRoots[0], './generated_code/' + reqData['root'] + '/');
  74. __postMessage({'statusCode':200,
  75. 'respIndex':resp});
  76. }
  77. }
  78. },
  79. function(writeErr) { __postInternalErrorMsg(resp,writeErr); }
  80. );
  81. },
  82. function(err) {__postInternalErrorMsg(resp,err);}
  83. );
  84. },
  85. 'asworker' :
  86. function(resp,method,uri,reqData,wcontext)
  87. {
  88. __postMessage(
  89. {'statusCode':200,
  90. 'respIndex':resp});
  91. }
  92. }