From 06dc09c8da61c06cf571386187dce0995781b6f2 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Thu, 12 Aug 2021 18:17:24 +0200
Subject: [PATCH] SSDM-11506 : Improve initial loading time of NG UI - move the
 bundle generation to openbis_standard_technologies

---
 .../public/resources/api/v3/.gitignore        |  2 ++
 .../public/resources/api/v3/bundle/build.sh   | 25 ---------------
 openbis_ng_ui/build.gradle                    |  7 ++--
 openbis_standard_technologies/.gitignore      |  1 +
 openbis_standard_technologies/build.gradle    | 20 ++++++++++--
 openbis_standard_technologies/package.json    |  8 +++++
 .../resource/js/v3/.gitignore                 |  1 +
 .../resource/js/v3/build.sh                   | 32 +++++++++++++++++++
 .../resource/js/v3}/config.bundle.template.js |  4 +++
 .../resource/js/v3}/r.config.template.js      |  1 -
 .../resource/js/v3}/r.js                      |  0
 11 files changed, 70 insertions(+), 31 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore
 delete mode 100755 openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/build.sh
 create mode 100644 openbis_standard_technologies/package.json
 create mode 100644 openbis_standard_technologies/resource/js/v3/.gitignore
 create mode 100755 openbis_standard_technologies/resource/js/v3/build.sh
 rename {openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle => openbis_standard_technologies/resource/js/v3}/config.bundle.template.js (91%)
 rename {openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle => openbis_standard_technologies/resource/js/v3}/r.config.template.js (94%)
 rename {openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle => openbis_standard_technologies/resource/js/v3}/r.js (100%)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore
new file mode 100644
index 00000000000..de4bae125ed
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore
@@ -0,0 +1,2 @@
+config.bundle.js
+openbis.bundle.js
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/build.sh b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/build.sh
deleted file mode 100755
index 5890b1829bb..00000000000
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-pushd $(dirname $0) > /dev/null
-
-# create temporary output folder
-rm -rvf output
-mkdir output
-
-# create a list of all *.js files from 'as', 'dss' and 'util' folders
-find ../as ../dss ../util -name "*.js" | sed 's/^..\//"/g' | sed 's/.js$/",/g' > output/files.js
-
-# create config files from their templates by replacing '__FILES__' with a content of 'files.js'
-cat r.config.template.js | sed -e '\|__FILES__|{' -e 'r output/files.js' -e 'd' -e '}' > output/r.config.js
-cat config.bundle.template.js | sed -e '\|__FILES__|{' -e 'r output/files.js' -e 'd' -e '}' > output/config.bundle.js
-
-# create a JS bundle with all *.js files
-node r.js -o output/r.config.js
-
-# copy relevant output files to resource folder
-cp output/config.bundle.js output/openbis.bundle.js ../
-
-# remove temporary output folder
-rm -rvf output
-
-popd > /dev/null
\ No newline at end of file
diff --git a/openbis_ng_ui/build.gradle b/openbis_ng_ui/build.gradle
index e42b1e0fb66..2be6dcbfc18 100644
--- a/openbis_ng_ui/build.gradle
+++ b/openbis_ng_ui/build.gradle
@@ -5,11 +5,12 @@ buildscript {
           url "https://plugins.gradle.org/m2/"
         }
     }
+    dependencies {
+        classpath 'com.moowork.gradle:gradle-node-plugin:1.2.0'
+    }
 }
 
-plugins {
-  id "com.moowork.node" version "1.2.0"
-}
+apply plugin: "com.moowork.node"
 
 configure(allprojects) {
   apply plugin:'base'
diff --git a/openbis_standard_technologies/.gitignore b/openbis_standard_technologies/.gitignore
index 44068dcafbe..e88629274f8 100644
--- a/openbis_standard_technologies/.gitignore
+++ b/openbis_standard_technologies/.gitignore
@@ -1,6 +1,7 @@
 /targets
 /bin
 /build/
+/node/
 /.idea/
 *.iml
 *.eml
\ No newline at end of file
diff --git a/openbis_standard_technologies/build.gradle b/openbis_standard_technologies/build.gradle
index fb17d04db03..e6f6c70be18 100644
--- a/openbis_standard_technologies/build.gradle
+++ b/openbis_standard_technologies/build.gradle
@@ -6,12 +6,14 @@ buildscript {
     dependencies {
         classpath 'apache:commons-codec:1.10',
                   'owasp:dependency-check-gradle:3.1.2',
-				  'paleozogt:symzip-plugin:0.10.1'
+				  'paleozogt:symzip-plugin:0.10.1',
+				  'com.moowork.gradle:gradle-node-plugin:1.2.0'
     }
 }
 
 apply plugin: org.owasp.dependencycheck.gradle.DependencyCheckPlugin
 apply plugin: "org.paleozogt.symzip"
+apply plugin: "com.moowork.node"
 
 dependencyCheck {
   failBuildOnCVSS = 7 // 0 - 4 = low, 4 - 7 = medium, 7 - 9 = high, 9-10 = critical
@@ -185,7 +187,21 @@ task untarGwt(type: Copy) {
 	into gwtBuildDir
 }
 
-task copyOpenbisStaticResources(type: Copy, dependsOn: untarGwt) {
+node {
+	download = true
+	version = '10.22.0'
+	workDir = file("${projectDir}/node/nodejs")
+	nodeModulesDir = file("${projectDir}")
+}
+
+task bundleOpenbisStaticResources(type: Exec) {
+	dependsOn 'untarGwt'
+	dependsOn 'npmInstall'
+	commandLine 'bash', '-c', "${projectDir}/resource/js/v3/build.sh"
+}
+
+task copyOpenbisStaticResources(type: Copy) {
+	dependsOn 'bundleOpenbisStaticResources'
 	from "${project(':openbis').projectDir}/source/java/ch/systemsx/cisd/openbis/public"
 	into gwtModuleBuildDir
 }
diff --git a/openbis_standard_technologies/package.json b/openbis_standard_technologies/package.json
new file mode 100644
index 00000000000..c0cb0f5c17f
--- /dev/null
+++ b/openbis_standard_technologies/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "dummy-package-json",
+  "version": "0.0.1",
+  "description": "This configuration file is required by NodeJS gradle plugin which is used to bundle all JS files together",
+  "scripts": {},
+  "devDependencies": {},
+  "dependencies": {}
+}
diff --git a/openbis_standard_technologies/resource/js/v3/.gitignore b/openbis_standard_technologies/resource/js/v3/.gitignore
new file mode 100644
index 00000000000..3602361dafe
--- /dev/null
+++ b/openbis_standard_technologies/resource/js/v3/.gitignore
@@ -0,0 +1 @@
+temp
\ No newline at end of file
diff --git a/openbis_standard_technologies/resource/js/v3/build.sh b/openbis_standard_technologies/resource/js/v3/build.sh
new file mode 100755
index 00000000000..c4e0122053b
--- /dev/null
+++ b/openbis_standard_technologies/resource/js/v3/build.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+pushd $(dirname $0) > /dev/null
+
+OPENBIS_STANDARD_TECHNOLOGIES_DIR=../../..
+OPENBIS_DIR=../../../../openbis
+
+CURRENT_DIR=$(pwd)
+TEMP_DIR=${CURRENT_DIR}/temp
+
+V3_DIR=$OPENBIS_DIR/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3
+
+# create an empty temporary folder
+rm -rvf $TEMP_DIR
+mkdir -p $TEMP_DIR
+
+# create a list of all *.js files from chosen V3 folders
+cd $V3_DIR
+find ./as ./dss ./util -name "*.js" | sed 's/^.\//"/g' | sed 's/.js$/",/g' > $TEMP_DIR/files.js
+
+# create config files from their templates by replacing '__FILES__' with a content of 'files.js'
+cd $CURRENT_DIR
+cat r.config.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js" -e 'd' -e '}' > $TEMP_DIR/r.config.js
+cat config.bundle.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js" -e 'd' -e '}' > $TEMP_DIR/config.bundle.js
+
+# create a JS bundle using NodeJS binary installed by NodeJS gradle plugin
+$OPENBIS_STANDARD_TECHNOLOGIES_DIR/node/nodejs/node-*/bin/node r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR
+
+# copy relevant files to the V3 public folder
+cp $TEMP_DIR/config.bundle.js $TEMP_DIR/openbis.bundle.js $V3_DIR
+
+popd > /dev/null
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/config.bundle.template.js b/openbis_standard_technologies/resource/js/v3/config.bundle.template.js
similarity index 91%
rename from openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/config.bundle.template.js
rename to openbis_standard_technologies/resource/js/v3/config.bundle.template.js
index f49edcda3be..ac7c455be22 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/config.bundle.template.js
+++ b/openbis_standard_technologies/resource/js/v3/config.bundle.template.js
@@ -18,6 +18,10 @@ var require = (function () {
     baseUrl: getBaseUrl(),
     bundles: {
       'openbis.bundle': [
+        'jquery',
+        'stjs',
+        'underscore',
+        'moment',
         //
         __FILES__
         //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/r.config.template.js b/openbis_standard_technologies/resource/js/v3/r.config.template.js
similarity index 94%
rename from openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/r.config.template.js
rename to openbis_standard_technologies/resource/js/v3/r.config.template.js
index ce3ff84dab8..8e46ef030a6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/r.config.template.js
+++ b/openbis_standard_technologies/resource/js/v3/r.config.template.js
@@ -1,5 +1,4 @@
 ({
-  baseUrl: '../../',
   include: [
     //
     __FILES__
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/r.js b/openbis_standard_technologies/resource/js/v3/r.js
similarity index 100%
rename from openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/bundle/r.js
rename to openbis_standard_technologies/resource/js/v3/r.js
-- 
GitLab