From 1aa0ea62dc0f7823e1462371dbde84a4fb8e0d32 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Thu, 12 Nov 2020 16:38:49 +0100
Subject: [PATCH] NG_UI : plugins : SSDM-10401 - add extra logic for the
 predeployed Java plugins

---
 .../tools/form/plugin/PluginForm.jsx          | 25 +++++++------
 .../tools/form/plugin/PluginFormButtons.jsx   |  3 +-
 .../form/plugin/PluginFormControllerLoad.js   |  3 ++
 .../form/plugin/PluginFormParameters.jsx      | 35 +++++++++++++++++++
 4 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginForm.jsx b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginForm.jsx
index 9468b6ea7ca..9ecbede7d4e 100644
--- a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginForm.jsx
+++ b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginForm.jsx
@@ -10,6 +10,7 @@ import PluginFormFacade from '@src/js/components/tools/form/plugin/PluginFormFac
 import PluginFormScript from '@src/js/components/tools/form/plugin/PluginFormScript.jsx'
 import PluginFormParameters from '@src/js/components/tools/form/plugin/PluginFormParameters.jsx'
 import PluginFormButtons from '@src/js/components/tools/form/plugin/PluginFormButtons.jsx'
+import openbis from '@src/js/services/openbis.js'
 import logger from '@src/js/common/logger.js'
 
 const styles = () => ({})
@@ -55,16 +56,20 @@ class PluginForm extends React.PureComponent {
     const { controller } = this
     const { plugin, selection, mode } = this.state
 
-    return (
-      <PluginFormScript
-        plugin={plugin}
-        selection={selection}
-        mode={mode}
-        onChange={controller.handleChange}
-        onSelectionChange={controller.handleSelectionChange}
-        onBlur={controller.handleBlur}
-      />
-    )
+    if (plugin.pluginKind === openbis.PluginKind.JYTHON) {
+      return (
+        <PluginFormScript
+          plugin={plugin}
+          selection={selection}
+          mode={mode}
+          onChange={controller.handleChange}
+          onSelectionChange={controller.handleSelectionChange}
+          onBlur={controller.handleBlur}
+        />
+      )
+    } else {
+      return <div></div>
+    }
   }
 
   renderAdditionalPanel() {
diff --git a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormButtons.jsx b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormButtons.jsx
index fcfb0169973..0552368188b 100644
--- a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormButtons.jsx
+++ b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormButtons.jsx
@@ -1,5 +1,6 @@
 import React from 'react'
 import PageButtons from '@src/js/components/common/page/PageButtons.jsx'
+import openbis from '@src/js/services/openbis.js'
 import logger from '@src/js/common/logger.js'
 
 class PluginFormButtons extends React.PureComponent {
@@ -12,7 +13,7 @@ class PluginFormButtons extends React.PureComponent {
       <PageButtons
         mode={mode}
         changed={changed}
-        onEdit={onEdit}
+        onEdit={plugin.pluginKind === openbis.PluginKind.JYTHON ? onEdit : null}
         onSave={onSave}
         onCancel={plugin.id ? onCancel : null}
       />
diff --git a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormControllerLoad.js b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormControllerLoad.js
index 7009284b7e3..c6609a04d51 100644
--- a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormControllerLoad.js
+++ b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormControllerLoad.js
@@ -59,6 +59,9 @@ export default class PluginFormControllerLoad extends PageControllerLoad {
       }),
       script: FormUtil.createField({
         value: _.get(loadedPlugin, 'script', null)
+      }),
+      available: FormUtil.createField({
+        value: _.get(loadedPlugin, 'available', true)
       })
     }
     if (loadedPlugin) {
diff --git a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormParameters.jsx b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormParameters.jsx
index e388a406c41..f8da7b61b83 100644
--- a/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormParameters.jsx
+++ b/openbis_ng_ui/src/js/components/tools/form/plugin/PluginFormParameters.jsx
@@ -2,6 +2,7 @@ import React from 'react'
 import { withStyles } from '@material-ui/core/styles'
 import Container from '@src/js/components/common/form/Container.jsx'
 import Header from '@src/js/components/common/form/Header.jsx'
+import Message from '@src/js/components/common/form/Message.jsx'
 import TextField from '@src/js/components/common/form/TextField.jsx'
 import SelectField from '@src/js/components/common/form/SelectField.jsx'
 import PluginFormSelectionType from '@src/js/components/tools/form/plugin/PluginFormSelectionType.js'
@@ -78,6 +79,8 @@ class PluginFormParameters extends React.PureComponent {
     return (
       <Container>
         <Header>Plugin</Header>
+        {this.renderMessageDisabled(plugin)}
+        {this.renderMessagePredeployed(plugin)}
         {this.renderName(plugin)}
         {this.renderEntityKind(plugin)}
         {this.renderDescription(plugin)}
@@ -85,6 +88,38 @@ class PluginFormParameters extends React.PureComponent {
     )
   }
 
+  renderMessageDisabled(plugin) {
+    const { classes } = this.props
+
+    if (!plugin.available.value) {
+      return (
+        <div className={classes.field}>
+          <Message type='warning'>The plugin is disabled.</Message>
+        </div>
+      )
+    } else {
+      return null
+    }
+  }
+
+  renderMessagePredeployed(plugin) {
+    const { classes } = this.props
+
+    if (plugin.pluginKind === openbis.PluginKind.PREDEPLOYED) {
+      return (
+        <div className={classes.field}>
+          <Message type='info'>
+            This is a predeployed Java plugin. Its parameters and logic are
+            defined in the plugin Java class and therefore cannot be changed
+            from the UI.
+          </Message>
+        </div>
+      )
+    } else {
+      return null
+    }
+  }
+
   renderName(plugin) {
     const { visible, enabled, error, value } = { ...plugin.name }
 
-- 
GitLab