From 13a10b59fc58546e1b1c3ce395d5da0d577fae3f Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Mon, 18 Apr 2016 14:02:36 +0000
Subject: [PATCH] SSDM-3510 - make it possible to use jython 2.7 everywhere
 where we use python

SVN: 36198
---
 datastore_server/etc/service.properties       |  2 +-
 .../v2/JythonTopLevelDataSetHandlerV2.java    | 11 +++---
 .../jython/PluginScriptRunnerFactory.java     | 37 ++++++++++---------
 .../source/java/dssApplicationContext.xml     |  7 +++-
 4 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/datastore_server/etc/service.properties b/datastore_server/etc/service.properties
index e43cd36afc7..36f19f02459 100644
--- a/datastore_server/etc/service.properties
+++ b/datastore_server/etc/service.properties
@@ -510,4 +510,4 @@ post-registration.pathinfo-feeding.class = ch.systemsx.cisd.etlserver.path.PathI
 # Example (will only show PNG files for data sets of type HCS_IMAGE): 
 # ftp.server.dataset.filelist.filter.HCS_IMAGE= .*png
 
-
+jython-version=2.7
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
index dd4f6ebe8ab..3a55c0f13a2 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
@@ -48,7 +48,7 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
 {
     protected final IJythonInterpreterFactory jythonInterpreterFactory;
 
-    // version of jython. 2.7 for jython 2.7. Default is jython 2.5
+    // version of jython. Available options are "2.7" and "2.5". Default is jython 2.7
     public static final String JYTHON_VERSION = "jython-version";
 
     /**
@@ -73,13 +73,12 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
         String jythonVersion = PropertyUtils.getProperty(globalState.getThreadParameters()
                 .getThreadProperties(), JYTHON_VERSION);
 
-        if ("2.7".equals(jythonVersion))
-        {
-            jythonInterpreterFactory = new Jython27InterpreterFactory();
-        }
-        else
+        if ("2.5".equals(jythonVersion))
         {
             jythonInterpreterFactory = new Jython25InterpreterFactory();
+        } else
+        {
+            jythonInterpreterFactory = new Jython27InterpreterFactory();
         }
 
         DssRegistrationHealthMonitor.getInstance(globalState.getOpenBisService(),
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java
index cf14dc1abcb..2ea5bfbc883 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java
@@ -29,6 +29,7 @@ import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.jython.JythonUtils;
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.common.jython.v27.Evaluator27;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
@@ -89,7 +90,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
     public PluginScriptRunnerFactory(String scriptPath)
     {
         this.scriptPath = scriptPath;
-        Evaluator.initialize();
+        Evaluator.getFactory().initialize();
     }
 
     /**
@@ -104,7 +105,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
 
         try
         {
-            Evaluator evaluator =
+            IJythonEvaluator evaluator =
                     createEvaluatorWithContentProviders(context, scriptString, pythonPath);
 
             return new AggregationServiceReportingPluginScriptRunner(evaluator);
@@ -123,7 +124,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
 
         try
         {
-            Evaluator evaluator =
+            IJythonEvaluator evaluator =
                     createEvaluatorWithContentProviders(context, scriptString, pythonPath);
 
             return new DbModifyingAggregationServiceReportingPluginScriptRunner(evaluator);
@@ -217,9 +218,9 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
         return evaluator;
     }
 
-    protected Evaluator createEvaluator(String scriptString, String[] pythonPath, DataSetProcessingContext context)
+    protected IJythonEvaluator createEvaluator(String scriptString, String[] pythonPath, DataSetProcessingContext context)
     {
-        final Evaluator evaluator = new Evaluator("", pythonPath, null, scriptString, false);
+        final IJythonEvaluator evaluator = Evaluator.getFactory().create("", pythonPath, null, null, scriptString, false);
 
         evaluator.set(SEARCH_SERVICE_VARIABLE_NAME, createUserSearchService(context));
         evaluator.set(SEARCH_SERVICE_UNFILTERED_VARIABLE_NAME, createUnfilteredSearchService());
@@ -238,10 +239,10 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
         return evaluator;
     }
 
-    private Evaluator createEvaluatorWithContentProviders(
+    private IJythonEvaluator createEvaluatorWithContentProviders(
             DataSetProcessingContext context, String scriptString, String[] pythonPath)
     {
-        Evaluator evaluator = createEvaluator(scriptString, pythonPath, context);
+        IJythonEvaluator evaluator = createEvaluator(scriptString, pythonPath, context);
 
         DataSetContentProvider contentProvider =
                 new DataSetContentProvider(context.getHierarchicalContentProvider());
@@ -320,11 +321,11 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
     private abstract static class AbstractAggregationServiceReportingPluginScriptRunner
     {
 
-        final Evaluator evaluator;
+        final IJythonEvaluator evaluator;
 
         protected abstract String getFunctionName();
 
-        public AbstractAggregationServiceReportingPluginScriptRunner(Evaluator evaluator)
+        public AbstractAggregationServiceReportingPluginScriptRunner(IJythonEvaluator evaluator)
         {
             this.evaluator = evaluator;
 
@@ -354,7 +355,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
         }
 
         AggregationServiceReportingPluginScriptRunner(
-                Evaluator evaluator)
+                IJythonEvaluator evaluator)
         {
             super(evaluator);
         }
@@ -375,7 +376,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
         private final static String FUNCTION_NAME = "process";
 
         DbModifyingAggregationServiceReportingPluginScriptRunner(
-                Evaluator evaluator)
+                IJythonEvaluator evaluator)
         {
             super(evaluator);
         }
@@ -389,7 +390,7 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
         @Override
         public void process(IDataSetRegistrationTransactionV2 transaction,
                 Map<String, Object> parameters, ISimpleTableModelBuilderAdaptor tableBuilder)
-                throws EvaluatorException
+                        throws EvaluatorException
         {
             evaluator.evalFunction(FUNCTION_NAME, transaction, parameters, tableBuilder);
         }
@@ -400,9 +401,9 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
     {
         private final static String DESCRIBE_FUNCTION_NAME = "describe";
 
-        private final Evaluator evaluator;
+        private final IJythonEvaluator evaluator;
 
-        ReportingPluginScriptRunner(Evaluator evaluator)
+        ReportingPluginScriptRunner(IJythonEvaluator evaluator)
         {
             this.evaluator = evaluator;
             if (false == evaluator.hasFunction(DESCRIBE_FUNCTION_NAME))
@@ -429,9 +430,9 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
     {
         private final static String PROCESS_FUNCTION_NAME = "process";
 
-        private final Evaluator evaluator;
+        private final IJythonEvaluator evaluator;
 
-        ProcessingPluginScriptRunner(Evaluator evaluator)
+        ProcessingPluginScriptRunner(IJythonEvaluator evaluator)
         {
             this.evaluator = evaluator;
             if (false == evaluator.hasFunction(PROCESS_FUNCTION_NAME))
@@ -467,9 +468,9 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory
     {
         private final static String FUNCTION_NAME = "handle";
 
-        private final Evaluator27 evaluator;
+        private final IJythonEvaluator evaluator;
 
-        RequestHandlerPluginScriptRunner(Evaluator27 evaluator)
+        RequestHandlerPluginScriptRunner(IJythonEvaluator evaluator)
         {
             this.evaluator = evaluator;
             if (false == evaluator.hasFunction(FUNCTION_NAME))
diff --git a/datastore_server/source/java/dssApplicationContext.xml b/datastore_server/source/java/dssApplicationContext.xml
index d23c1961077..9a2ec6d7c5c 100644
--- a/datastore_server/source/java/dssApplicationContext.xml
+++ b/datastore_server/source/java/dssApplicationContext.xml
@@ -41,7 +41,7 @@
 
     <bean id="data-set-path-infos-provider" class="ch.systemsx.cisd.openbis.dss.generic.server.DatabaseBasedDataSetPathInfoProvider"/>
 
-	  <bean id="plugin-tasks" class="ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.PluginTaskInfoProvider"
+	  <bean id="plugin-tasks" class="ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.PluginTaskInfoProvider" depends-on="jython-evaluator"
         factory-method="create" />
 
 	  <bean id="etl-lims-service" class="ch.systemsx.cisd.openbis.dss.generic.server.EncapsulatedOpenBISService"
@@ -278,5 +278,8 @@
         <constructor-arg ref="general-information-service"/>
         <constructor-arg ref="adapted-ftp-user-manager"/>
     </bean>
-    
+        
+    <bean id="jython-evaluator" class="ch.systemsx.cisd.common.jython.evaluator.JythonEvaluatorSpringComponent" >
+      <constructor-arg ref="propertyConfigurer" /> 
+    </bean>
 </beans>
\ No newline at end of file
-- 
GitLab