From 07391b6900a9aa0f160dd928bbb4fa945c13b76f Mon Sep 17 00:00:00 2001
From: jweg <jweg@informatik.uni-kiel.de>
Date: Wed, 5 Jul 2017 17:26:23 +0200
Subject: [PATCH] work in progress: adding promises for building zip

---
 app.js | 116 +++++++++++++++++++++++++++++----------------------------
 1 file changed, 59 insertions(+), 57 deletions(-)

diff --git a/app.js b/app.js
index 5a39083..2c89efe 100644
--- a/app.js
+++ b/app.js
@@ -66,10 +66,10 @@ if(typeof checkedFiles !== 'undefined' && checkedFiles.length > 0){
 
 
 app.get('/download', function(req, res){
-
+const promiseArray = []
 const checkedFiles = req.query.checkedFiles.split(',');
 
-var zip = new JSZip();
+const zip = new JSZip();
 // create a file to stream archive data to. 
 zip.file("README.txt", "text for README");
 
@@ -86,25 +86,28 @@ if (backendChecked){
  const fileName = backendChecked;
  const downloadURL = downloadFiles[backendChecked]; 
 
- exec('git pull ' + ' && cd ' + fileName + ' && mvn compile war:war ', (error, stdout, stderr) => {
+const backendPromise = new Promise((resolve, reject)=> {
 
- addBackend();
-   
-    var response = 
-          'There was an error during your build. ' +
-          'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
-          'and add the following information: ' + error;
+ 		exec('git pull ' + ' && cd ' + fileName + ' && mvn compile war:war ', (error, stdout, stderr) => {
 
-    if (error) {
-      res.send(response);
+ //addBackend();
+   
+    console.log('error in exec', error);
+   	 if (error) {
+    	reject(error);
+     // res.send(response); beim promise.all
       return;
     }
 
     console.log(stdout);
     console.log(stderr);
-}); //.then(addBackend()), würde auch gehen (npm packet: exec-then), aber hilft nicht dabei, zu wissen, wann zip gebaut werden darf
-
+resolve({fileName:"backend.war", path:"explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war"});
+    
+}); 
+})
 
+promiseArray.push(backendPromise);
+console.log('promiseArray:',promiseArray);
 } 
 //--------------------------------------------------------------------------------frontend
 
@@ -133,7 +136,7 @@ installAddons();
 };
 
 function installAddons(){
-
+console.log('in installAddons()');
 checkedPlugins = checkedFiles.filter(function(file){
   return /\bexplorviz-frontend-plugin-\w*/.exec(file);
 });
@@ -188,14 +191,14 @@ console.log(stderr);
  }; // ------------------------------------------ember build
 
 
-function addBackend(){
-// read a file as a stream and add it to a zip
-console.log('addBackend()');
-const backendStream = fs.createReadStream("explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war");
-zip.file("backend.war", backendStream);
-backendFinished = true;
-createZip();
-};
+// function addBackend(){
+// // read a file as a stream and add it to a zip
+// console.log('addBackend()');
+// const backendStream = fs.createReadStream("explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war");
+// zip.file("backend.war", backendStream);
+// backendFinished = true;
+// createZip();
+// };
 
 function addFrontend(){
 	console.log("in addFrontend");
@@ -218,49 +221,48 @@ var stream = fsReaddir('./explorviz-ui-frontend/dist/')
 
 
 
-function createZip(){
-	console.log('frontendFinished', frontendFinished);
-	console.log('backendFinished', backendFinished);
-	//if(frontendFinished){
-		// if (frontendChecked){
-		// 	if (backendChecked){
-		// 		if(frontendFinished && backendFinished){
-		// 			console.log('both');
-//create zip and download it
-    zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () {
-    // JSZip generates a readable stream with a "end" event,
-    // but is piped here in a writable stream which emits a "finish" event.
-    console.log("explorviz-builds.zip written.");
+Promise.all(promiseArray).then(files => { 
+//if (files.fileName === "backend.war"){
+
+console.log('files.path' ,files.path);
+console.log('files.fileName', files.fileName);
+
+	backendStream = fs.createReadStream(files.path);
+zip.file(files.fileName, backendStream);
+
+
+zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () {
+	console.log('explorviz-builds.zip written.');
     res.download('explorviz-builds.zip');
 }); 
-//} 
+	}).catch(function(error) {let response = 
+          'There was an error during your build. ' +
+          'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
+          'and add the following information: ' + error;
+          res.send(response);
+})
 
-};
-// } else if (frontendFinished) {//!backendChecked
-// 	console.log('frontend only');
-// zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () {
-//     // JSZip generates a readable stream with a "end" event,
-//     // but is piped here in a writable stream which emits a "finish" event.
-//     console.log("explorviz-builds.zip frontend only written.");
-//     res.download('explorviz-builds.zip');
-// });}
-    
 
-// } else if (backendChecked){//!frontendChecked
-// 	if (backendFinished){
-// 		console.log('backend only');
-// 		//create zip and download it
+
+
+
+// function createZip(){
+// 	console.log('frontendFinished', frontendFinished);
+// 	console.log('backendFinished', backendFinished);
+
+// //create zip and download it
 //     zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () {
 //     // JSZip generates a readable stream with a "end" event,
 //     // but is piped here in a writable stream which emits a "finish" event.
-//     console.log("explorviz-builds.zip backend only written.");
+//     console.log("explorviz-builds.zip written.");
 //     res.download('explorviz-builds.zip');
-// });
-// 	}
-// }
-// }
+// }); 
+
+
+// };
+
 });
 
 
-app.listen(8080);
-console.log("Downloader started on port 8080.");
\ No newline at end of file
+app.listen(3000);
+console.log("Downloader started on port 3000.");
\ No newline at end of file
-- 
GitLab