diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java index d71bd1e1850e76137f5231733de7f9499e4fb5fa..7d8e9567bd823b0142f790a8fb63eb98e547f544 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java @@ -597,6 +597,10 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert .substring(BasicConstant.MANAGED_PROPERTY_JSON_PREFIX.length()), List.class); ManagedProperty managedProperty = new ManagedProperty(); + IPerson person = PersonTranslator.translateToIPerson(personPE); + + List<Map<String, String>> bindingsList = new ArrayList<Map<String, String>>(); + for (Object row : readValue) { if (row instanceof Map == false) @@ -604,10 +608,10 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert continue; } - IPerson person = PersonTranslator.translateToIPerson(personPE); - evaluator.updateFromBatchInput(managedProperty, person, - (Map<String, String>) row); + bindingsList.add((Map<String, String>) row); } + + evaluator.updateFromRegistrationForm(managedProperty, person, bindingsList); return managedProperty.getValue(); } catch (Exception ex) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java index 8853ad218b1ef8b54c67d90cbca5279698cd5736..d34cbb4f4ae591c7d34b4e81484bc1e992bc2a26 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java @@ -100,6 +100,12 @@ public class ManagedPropertyEvaluator */ private static final String UPDATE_FROM_BATCH_INPUT_FUNCTION = "updateFromBatchInput"; + /** + * The name of the function that expects a list of maps of bindings. + */ + private static final String UPDATE_FROM_REGISTRATION_FORM_FUNCTION = + "updateFromRegistrationForm"; + private static final String PROPERTY_VARIABLE_NAME = "property"; private static final String PROPERTY_PE_VARIABLE_NAME = "propertyPE"; @@ -112,6 +118,8 @@ public class ManagedPropertyEvaluator private final boolean updateFromBatchFunctionDefined; + private final boolean updateFromRegistrationFormFunctionDefined; + private final boolean showRawValueInForms; private List<IManagedInputWidgetDescription> inputWidgetDescriptions; @@ -120,6 +128,8 @@ public class ManagedPropertyEvaluator { evaluator = new Evaluator("", ManagedPropertyFunctions.class, scriptExpression); updateFromBatchFunctionDefined = evaluator.hasFunction(UPDATE_FROM_BATCH_INPUT_FUNCTION); + updateFromRegistrationFormFunctionDefined = + evaluator.hasFunction(UPDATE_FROM_REGISTRATION_FORM_FUNCTION); boolean batchColumnNamesFunctionDefined = evaluator.hasFunction(BATCH_COLUMN_NAMES_FUNCTION); boolean inputWidgetsFunctionDefined = evaluator.hasFunction(INPUT_WIDGETS_FUNCTION); @@ -192,18 +202,23 @@ public class ManagedPropertyEvaluator private void checkCombinationsOfDefinedFunctions(boolean batchColumnNamesFunctionDefined, boolean inputWidgetsFunctionDefined) { - if ((batchColumnNamesFunctionDefined || inputWidgetsFunctionDefined) - && updateFromBatchFunctionDefined == false) + if (batchColumnNamesFunctionDefined && updateFromBatchFunctionDefined == false) { StringBuilder builder = new StringBuilder("Function "); builder.append(UPDATE_FROM_BATCH_INPUT_FUNCTION); - builder.append(" is not defined although function"); - boolean both = batchColumnNamesFunctionDefined && inputWidgetsFunctionDefined; - builder.append(both ? "s " : " "); - builder.append(batchColumnNamesFunctionDefined ? BATCH_COLUMN_NAMES_FUNCTION : ""); - builder.append(both ? " and " : ""); - builder.append(inputWidgetsFunctionDefined ? INPUT_WIDGETS_FUNCTION : ""); - builder.append(both ? " are defined." : " is defined."); + builder.append(" is not defined although function "); + builder.append(BATCH_COLUMN_NAMES_FUNCTION); + builder.append(" is defined."); + throw new EvaluatorException(builder.toString()); + } + + if (inputWidgetsFunctionDefined && updateFromRegistrationFormFunctionDefined == false) + { + StringBuilder builder = new StringBuilder("Function "); + builder.append(UPDATE_FROM_REGISTRATION_FORM_FUNCTION); + builder.append(" is not defined although function "); + builder.append(INPUT_WIDGETS_FUNCTION); + builder.append(" is defined."); throw new EvaluatorException(builder.toString()); } } @@ -296,4 +311,14 @@ public class ManagedPropertyEvaluator } } + public void updateFromRegistrationForm(IManagedProperty managedProperty, IPerson person, + List<Map<String, String>> bindings) + { + if (updateFromRegistrationFormFunctionDefined) + { + evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty); + evaluator.set(PERSON_VARIABLE_NAME, person); + evaluator.evalFunction(UPDATE_FROM_REGISTRATION_FORM_FUNCTION, bindings); + } + } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverterTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverterTest.java index 7ae610c722e79a05b53fd5565095c33b91f4e696..23acf350c492f07d1ca6c27ef27ba10ae63e516c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverterTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverterTest.java @@ -223,8 +223,9 @@ public final class EntityPropertiesConverterTest extends AbstractBOTest ScriptPE script = new ScriptPE(); script.setScriptType(ScriptType.MANAGED_PROPERTY); script.setScript("def batchColumnNames():\n return ['A']\n" - + "def updateFromBatchInput(bindings):\n" - + " property.setValue('Hello ' + bindings.get('A'))"); + + "def updateFromBatchInput(bindings):\n None\n" + + "def updateFromRegistrationForm(bindings):\n" + + " property.setValue('Hello ' + bindings.get(0).get('A'))"); sampleTypePropertyTypePE.setScript(script); final SampleTypePE sampleType2 = createSampleType(SAMPLE_TYPE2_CODE); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java index 7ebf6f83117a17781dfc682aa187061e4bc9011f..5bf54458b00a2d698f293546fb92f44685b60763 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorTest.java @@ -311,7 +311,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit new ManagedPropertyEvaluator("def batchColumnNames():\n return ['A']"); } - @Test(expectedExceptionsMessageRegExp = "Function updateFromBatchInput is not defined " + @Test(expectedExceptionsMessageRegExp = "Function updateFromRegistrationForm is not defined " + "although function inputWidgets is defined.", expectedExceptions = EvaluatorException.class) public void testScriptWithInputWidgetsFunctionButMissingUpdateFromBatchFunction() { @@ -320,7 +320,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit } @Test(expectedExceptionsMessageRegExp = "Function updateFromBatchInput is not defined " - + "although functions batchColumnNames and inputWidgets are defined.", expectedExceptions = EvaluatorException.class) + + "although function batchColumnNames is defined.", expectedExceptions = EvaluatorException.class) public void testScriptWithInputWidgetsFunctionAndBatchColumnNamesFunctionButMissingUpdateFromBatchFunction() { new ManagedPropertyEvaluator("def inputWidgets():\n" @@ -334,7 +334,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit { new ManagedPropertyEvaluator("def inputWidgets():\n" + " return [inputWidgetFactory().createTextInputField('A'), None]\n" - + "def updateFromBatchInput():\n None"); + + "def updateFromRegistrationForm():\n None"); } @Test(expectedExceptionsMessageRegExp = "Function inputWidgets has returned a list where " @@ -345,7 +345,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit { new ManagedPropertyEvaluator("def inputWidgets():\n" + " return [inputWidgetFactory().createTextInputField('A'), 'B']\n" - + "def updateFromBatchInput():\n None"); + + "def updateFromRegistrationForm():\n None"); } @Test(expectedExceptionsMessageRegExp = "Function 'batchColumnNames' doesn't return a List " @@ -361,7 +361,8 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit { new ManagedPropertyEvaluator("def inputWidgets():\n" + " f = inputWidgetFactory()\n" + " w1 = f.createTextInputField('a')\n" + " w2 = f.createTextInputField('Alpha')\n" - + " w2.code = 'A'\n" + " return [w1, w2]\n" + "def updateFromBatchInput():\n None"); + + " w2.code = 'A'\n" + " return [w1, w2]\n" + + "def updateFromRegistrationForm():\n None"); } @Test @@ -391,7 +392,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit new ManagedPropertyEvaluator( "def inputWidgets():\n" + " return [inputWidgetFactory().createComboBoxInputField('Field', ['A', 'B'])]\n" - + "def updateFromBatchInput():\n None"); + + "def updateFromRegistrationForm():\n None"); assertEquals("[FIELD]", evaluator.getBatchColumnNames().toString()); List<IManagedInputWidgetDescription> inputWidgetDescriptions = evaluator.getInputWidgetDescriptions(); @@ -411,7 +412,8 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit "def batchColumnNames():\n return ['A', 'Beta']\n" + "def inputWidgets():\n" + " return [inputWidgetFactory().createComboBoxInputField('Field', ['A', 'B'])]\n" - + "def updateFromBatchInput():\n None"); + + "def updateFromBatchInput():\n None\n" + + "def updateFromRegistrationForm():\n None"); assertEquals("[A, BETA]", evaluator.getBatchColumnNames().toString()); List<IManagedInputWidgetDescription> inputWidgetDescriptions = evaluator.getInputWidgetDescriptions(); @@ -475,7 +477,7 @@ public class ManagedPropertyEvaluatorTest extends AssertJUnit new ManagedPropertyEvaluator( "def showRawValueInForms():\n return True\n" + "def inputWidgets():\n return [inputWidgetFactory().createTextInputField('A')]\n" - + "def updateFromBatchInput():\n None"); + + "def updateFromRegistrationForm():\n None"); assertEquals("[A]", evaluator.getBatchColumnNames().toString()); assertEquals("[]", evaluator.getInputWidgetDescriptions().toString());