diff --git a/common/source/java/ch/systemsx/cisd/common/string/ReflectionStringTraverser.java b/common/source/java/ch/systemsx/cisd/common/string/ReflectionStringTraverser.java index 2b4ae9466c42db455780331140c716726760125d..294e4bd09ee41a5e25dc114c01fb2398b12bc5e8 100644 --- a/common/source/java/ch/systemsx/cisd/common/string/ReflectionStringTraverser.java +++ b/common/source/java/ch/systemsx/cisd/common/string/ReflectionStringTraverser.java @@ -101,6 +101,9 @@ class ReflectionStringTraverser LogUtils.logErrorWithFailingAssertion(log, "Cannot traverse primitive collections or primitives " + object); return; + } else if (isArrayList(object)) + { + traverseArrayList(object); } else if (clazz.isArray()) { traverseArray(clazz); @@ -272,7 +275,7 @@ class ReflectionStringTraverser private boolean isMutable(Object element) { return isString(element) == false && element.getClass().isPrimitive() == false - && isStringCollection(element) == false; + && (isStringCollection(element) == false || isArrayList(element)); } private Collection<String> visitStringCollection(Object collection) @@ -319,6 +322,37 @@ class ReflectionStringTraverser } } + private void traverseArrayList(Object arrayListObject) + { + ArrayList<?> arrayList = (ArrayList<?>) arrayListObject; + int length = arrayList.size(); + + for (int index = 0; index < length; ++index) + { + Object element = arrayList.get(index); + if (element == null) + { + continue; + } + if (element.getClass().isPrimitive()) + { + return; // do nothing + } else if (isString(element)) + { + visitStringArrayListElement(arrayList, index, (String) element); + } else + { + if (isStringCollection(element)) + { + visitStringCollectionArrayListElement(arrayList, index, element); + } else + { + traverseMutable(element, element.getClass()); + } + } + } + } + // array[index] contains collection of primitive types which will be modified if necessary private void visitStringCollectionArrayElement(Object array, int index, Object collection) { @@ -326,6 +360,15 @@ class ReflectionStringTraverser Array.set(array, index, newCollection); } + // arrayList[index] contains collection of primitive types which will be modified if necessary + @SuppressWarnings("unchecked") + private void visitStringCollectionArrayListElement(@SuppressWarnings("rawtypes") + ArrayList arrayList, int index, Object collection) + { + Collection<String> newCollection = visitStringCollection(collection); + arrayList.set(index, newCollection); + } + // array[index] contains a value of primitive type which will be modified if necessary private void visitStringArrayElement(Object array, int index, String element, Class<?> componentType) @@ -337,6 +380,18 @@ class ReflectionStringTraverser } } + // arrayList[index] contains a value of primitive type which will be modified if necessary + @SuppressWarnings("unchecked") + private void visitStringArrayListElement(@SuppressWarnings("rawtypes") + ArrayList arrayList, int index, String element) + { + String newElement = tryVisitString(element); + if (newElement != null) + { + arrayList.set(index, newElement); + } + } + private String tryVisitString(String element) { return visitor.tryVisit(element, element, null); @@ -408,4 +463,9 @@ class ReflectionStringTraverser { return o instanceof Collection<?>; } + + private static boolean isArrayList(final Object o) + { + return o instanceof ArrayList<?>; + } } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java index 592f0bc147a5df82536313e1f75f982f0533fa6e..f25a2f455f97830e8d00acb10f359da4052c7fd9 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java @@ -248,11 +248,11 @@ public class UploadingCommandTest extends AssertJUnit createTestData(LOCATION1); ds2 = createTestData(LOCATION2); ExternalData dataSet1 = - DataSetTranslator.translate(createDataSet("1"), "?", null, + DataSetTranslator.translate(createDataSet("1"), "?", null, null, ExperimentTranslator.LoadableFields.PROPERTIES); System.out.println("ds1:" + dataSet1.getExperiment().getProperties()); ExternalData dataSet2 = - DataSetTranslator.translate(createDataSet("2"), "?", null, + DataSetTranslator.translate(createDataSet("2"), "?", null, null, ExperimentTranslator.LoadableFields.PROPERTIES); dataSets = Arrays.<ExternalData> asList(dataSet1, dataSet2); command = diff --git a/openbis/.classpath b/openbis/.classpath index 5684b185ea441e5be7b482c72418a0a9f8a97697..fa44191e62846e008c706965cebb7b4c9dd561cb 100644 --- a/openbis/.classpath +++ b/openbis/.classpath @@ -32,7 +32,7 @@ <classpathentry kind="lib" path="/libraries/javassist/javassist.jar" sourcepath="/libraries/javassist/src.zip"/> <classpathentry kind="lib" path="/libraries/lucene/lucene-core.jar" sourcepath="/libraries/lucene/lucene-2.4.1-src.zip"/> <classpathentry kind="lib" path="/libraries/commons-fileupload/commons-fileupload.jar" sourcepath="/libraries/commons-fileupload/src.zip"/> - <classpathentry kind="lib" path="/libraries/lucene-highlighter/lucene-highlighter.jar"/> + <classpathentry kind="lib" path="/libraries/lucene-highlighter/lucene-highlighter.jar" sourcepath="/libraries/lucene-highlighter/lucene-highlighter-javadoc.jar"/> <classpathentry kind="lib" path="/libraries/apgdiff/apgdiff.jar" sourcepath="/libraries/apgdiff/src.zip"/> <classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/> <classpathentry kind="lib" path="/libraries/eodsql/eodsql.jar" sourcepath="/libraries/eodsql/eodsql_src.zip"/> @@ -82,5 +82,6 @@ <classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-deploy.jar"/> <classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-webapp.jar"/> <classpathentry kind="lib" path="/libraries/lucene-queries/lucene-queries.jar"/> + <classpathentry kind="lib" path="/libraries/cisd-hotdeploy/cisd-hotdeploy.jar" sourcepath="/libraries/cisd-hotdeploy/cisd-hotdeploy-src.zip"/> <classpathentry kind="output" path="targets/www/WEB-INF/classes"/> </classpath> diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index 37381b14fb7a57af6c16db1086a3ea33dcd3f227..f36bb6220a625f8a4be4bd4fac8c6dae523d2cfc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -107,6 +107,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; @@ -1263,4 +1264,9 @@ public interface ICommonClientService extends IClientService * already exists. */ public void registerMetaProject(String name) throws UserFailureException; + + /** + * Lists all the available predeployed plugin names for given script type. + */ + public List<String> listPredeployedPlugins(ScriptType scriptType); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java index ad07a1702184b3452de7eb2c0a05a2ee24a6b8cd..ad07130e9922648df67d5977cbd74310298f403a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java @@ -109,6 +109,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; @@ -1102,7 +1103,7 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync AsyncCallback<String> callback); /** - * @see ICommonClientService#evaluate(DynamicPropertyEvaluationInfo) + * @see ICommonClientService#evaluate(EntityValidationEvaluationInfo) */ public void evaluate(EntityValidationEvaluationInfo entityValidationEvaluationInfo, AsyncCallback<String> callback); @@ -1155,4 +1156,9 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync * @see ICommonClientService#registerMetaProject(String) */ public void registerMetaProject(String name, AsyncCallback<Void> callback); + + /** + * @see ICommonClientService#listPredeployedPlugins(ScriptType) + */ + public void listPredeployedPlugins(ScriptType scriptType, AsyncCallback<List<String>> callback); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index 2bd458523d75d2821bbc8304c64faae369af70a8..e45fe158f99c768810fb08408c2540375e5779bd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -1060,6 +1060,8 @@ public abstract class Dict public static final String SCRIPT_TYPE = "script_type"; + public static final String PLUGIN_TYPE = "plugin_type"; + // // Material Chooser // @@ -1407,5 +1409,9 @@ public abstract class Dict public static final String PROGRESS_PROCESSING = "progress_processing"; + // Predeployed plugins + + public static final String PREDEPLOYED_PLUGIN_NAME = "predeployed_plugin_name"; + // ----- end generic ------------------ } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PluginTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PluginTypeSelectionWidget.java new file mode 100644 index 0000000000000000000000000000000000000000..862248ee78d7a52fa507d6b04969015f4d055645 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PluginTypeSelectionWidget.java @@ -0,0 +1,58 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type; + +import java.util.Arrays; +import java.util.List; + +import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; + +/** + * @author Pawel Glyzewski + */ +public class PluginTypeSelectionWidget extends SimpleComboBox<PluginType> +{ + /** creates a combo box with all script types */ + public static PluginTypeSelectionWidget createAllPluginTypes( + final IViewContext<ICommonClientServiceAsync> viewContext) + { + return new PluginTypeSelectionWidget(viewContext.getMessage(Dict.PLUGIN_TYPE), + viewContext.getMessage(Dict.PLUGIN_TYPE), viewContext.getMessage( + Dict.COMBO_BOX_CHOOSE, "plugin type"), Arrays.asList(PluginType.values())); + } + + private PluginTypeSelectionWidget(final String fieldLabel, final String toolTip, + final String chooseText, final List<PluginType> pluginTypes) + { + setFieldLabel(fieldLabel); + setTriggerAction(TriggerAction.ALL); + GWTUtils.setToolTip(this, toolTip); + GWTUtils.setupAutoWidth(this); + setEmptyText(chooseText); + setEditable(false); + setForceSelection(true); + add(pluginTypes); + GWTUtils.autoselect(this); + setId("plugin-type-selection"); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PredeployedPluginSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PredeployedPluginSelectionWidget.java new file mode 100644 index 0000000000000000000000000000000000000000..ee1aa14b2a12f8464b7fbd8e4e69a4611df145e9 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PredeployedPluginSelectionWidget.java @@ -0,0 +1,111 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.extjs.gxt.ui.client.widget.form.SimpleComboValue; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; + +/** + * @author Pawel Glyzewski + */ +public class PredeployedPluginSelectionWidget extends + DropDownList<SimpleComboValue<String>, String> +{ + private final IViewContext<?> viewContext; + + private ScriptType scriptType = ScriptType.DYNAMIC_PROPERTY; + + public PredeployedPluginSelectionWidget(IViewContext<?> viewContext) + { + super(viewContext, "-predeployed-plugin-names", Dict.PREDEPLOYED_PLUGIN_NAME, "value", + "plugin", "plugins"); + + this.viewContext = viewContext; + } + + @Override + public DatabaseModificationKind[] getRelevantModifications() + { + return DatabaseModificationKind.EMPTY_ARRAY; + } + + @Override + protected void loadData(AbstractAsyncCallback<List<String>> callback) + { + viewContext.getCommonService().listPredeployedPlugins(scriptType, + new ListPredeployedPluginsCallback(viewContext)); + callback.ignore(); + } + + @Override + protected List<SimpleComboValue<String>> convertItems(List<String> pluginNames) + { + ArrayList<SimpleComboValue<String>> results = new ArrayList<SimpleComboValue<String>>(); + + for (String pluginName : pluginNames) + { + results.add(new SimpleComboValue<String>(pluginName) + { + private static final long serialVersionUID = 1L; + }); + } + + return results; + } + + public void updateScriptType(@SuppressWarnings("hiding") + ScriptType scriptType) + { + if (scriptType != this.scriptType) + { + this.scriptType = scriptType; + refreshStore(); + clearSelections(); + } + } + + public void setSelectedValue(String value) + { + setSelection(convertItems(Collections.singletonList(value))); + } + + private class ListPredeployedPluginsCallback extends + PredeployedPluginSelectionWidget.ListItemsCallback + { + + protected ListPredeployedPluginsCallback(IViewContext<?> viewContext) + { + super(viewContext); + } + + @Override + public void process(List<String> result) + { + super.process(result); + } + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java index c33d443ce2a3a0aca82a3ab86f8c1cb301292549..8a40225eb3e2697ed6982f2222b3c990c3c9a91f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java @@ -32,6 +32,7 @@ import com.extjs.gxt.ui.client.widget.form.SimpleComboValue; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.form.Validator; import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.user.client.Element; @@ -44,10 +45,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.D import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PluginTypeSelectionWidget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PredeployedPluginSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.ScriptTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; @@ -58,11 +63,14 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; */ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistrationForm { - protected final IViewContext<ICommonClientServiceAsync> viewContext; protected final ScriptTypeSelectionWidget scriptTypeChooserOrNull; + protected final PluginTypeSelectionWidget pluginTypeChooserOrNull; + + protected final PredeployedPluginSelectionWidget predeployedPluginsWidget; + protected final TextField<String> nameField; protected final DescriptionField descriptionField; @@ -71,7 +79,7 @@ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistratio protected EntityKindSelectionWidget entityKindField; - private ScriptExecutionFramework scriptExecution; + protected ScriptExecutionFramework scriptExecution; abstract protected void saveScript(); @@ -82,36 +90,59 @@ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistratio protected AbstractScriptEditRegisterForm( final IViewContext<ICommonClientServiceAsync> viewContext, EntityKind entityKindOrNull) { - this(viewContext, null, entityKindOrNull); + this(viewContext, null, null, entityKindOrNull); } public AbstractScriptEditRegisterForm(IViewContext<ICommonClientServiceAsync> viewContext, - ScriptTypeSelectionWidget scriptTypeChooser, EntityKind entityKindOrNull) + ScriptTypeSelectionWidget scriptTypeChooser, + PluginTypeSelectionWidget pluginTypeChooser, EntityKind entityKindOrNull) { - this(viewContext, null, scriptTypeChooser, entityKindOrNull); + this(viewContext, null, scriptTypeChooser, pluginTypeChooser, entityKindOrNull); } protected AbstractScriptEditRegisterForm( final IViewContext<ICommonClientServiceAsync> viewContext, TechId scriptIdOrNull, - ScriptTypeSelectionWidget scriptTypeChooserOrNull, EntityKind entityKindOrNull) + ScriptTypeSelectionWidget scriptTypeChooserOrNull, + PluginTypeSelectionWidget pluginTypeChooserOrNull, EntityKind entityKindOrNull) { super(viewContext, createId(scriptIdOrNull), DEFAULT_LABEL_WIDTH + 20, DEFAULT_FIELD_WIDTH); this.viewContext = viewContext; + this.predeployedPluginsWidget = new PredeployedPluginSelectionWidget(viewContext); + this.predeployedPluginsWidget.setVisible(false); + this.scriptTypeChooserOrNull = scriptTypeChooserOrNull; - if (scriptTypeChooserOrNull != null) + this.pluginTypeChooserOrNull = pluginTypeChooserOrNull; + if (scriptTypeChooserOrNull != null || pluginTypeChooserOrNull != null) { - scriptTypeChooserOrNull.setWidth(200); - final ToolBar toolBar = new ToolBar(); - toolBar.add(new LabelToolItem(scriptTypeChooserOrNull.getFieldLabel() - + GenericConstants.LABEL_SEPARATOR)); - toolBar.add(scriptTypeChooserOrNull); + ToolBar toolBar = null; + toolBar = new ToolBar(); setTopComponent(toolBar); - scriptTypeChooserOrNull.addSelectionChangedListener(createScriptTypeChangedListener()); + + if (scriptTypeChooserOrNull != null) + { + scriptTypeChooserOrNull.setWidth(200); + toolBar.add(new LabelToolItem(scriptTypeChooserOrNull.getFieldLabel() + + GenericConstants.LABEL_SEPARATOR)); + toolBar.add(scriptTypeChooserOrNull); + scriptTypeChooserOrNull + .addSelectionChangedListener(createScriptTypeChangedListener()); + } + + if (pluginTypeChooserOrNull != null) + { + pluginTypeChooserOrNull.setWidth(200); + toolBar.add(new SeparatorToolItem()); + toolBar.add(new LabelToolItem(pluginTypeChooserOrNull.getFieldLabel() + + GenericConstants.LABEL_SEPARATOR)); + toolBar.add(pluginTypeChooserOrNull); + pluginTypeChooserOrNull + .addSelectionChangedListener(createPluginTypeChangedListener()); + } } this.nameField = new VarcharField(viewContext.getMessage(Dict.NAME), true); - this.nameField.setId(getId()+"-script-registration-name"); + this.nameField.setId(getId() + "-script-registration-name"); this.scriptExecution = new ScriptExecutionFramework(viewContext, asValidable(formPanel), entityKindOrNull); this.entityKindField = @@ -127,20 +158,33 @@ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistratio scriptExecution.updateEntityKind(entityKindField.tryGetEntityKind()); } }); - entityKindField.setId(getId()+"-script-registration-entity-kind"); + entityKindField.setId(getId() + "-script-registration-entity-kind"); this.descriptionField = AbstractRegistrationDialog.createDescriptionField(viewContext); - this.descriptionField.setId(getId()+"-script-registration-description"); + this.descriptionField.setId(getId() + "-script-registration-description"); this.scriptField = createScriptField(viewContext); - this.scriptField.setId(getId()+"-script-registration-script-content"); + this.scriptField.setId(getId() + "-script-registration-script-content"); - scriptField.addListener(Events.Change, new Listener<BaseEvent>() + Listener<BaseEvent> scriptParametersListener = new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { - scriptExecution.update(scriptField.getValue()); + PluginType pluginTypeOrNull = null; + if (AbstractScriptEditRegisterForm.this.pluginTypeChooserOrNull != null) + { + pluginTypeOrNull = + AbstractScriptEditRegisterForm.this.pluginTypeChooserOrNull + .getSimpleValue(); + } + scriptExecution.update(nameField.isVisible() ? nameField.getValue() + : predeployedPluginsWidget.getValue().getValue(), scriptField + .getValue(), pluginTypeOrNull); } - }); + }; + + scriptField.addListener(Events.Change, scriptParametersListener); + nameField.addListener(Events.Change, scriptParametersListener); + predeployedPluginsWidget.addListener(Events.Change, scriptParametersListener); } private SelectionChangedListener<SimpleComboValue<ScriptType>> createScriptTypeChangedListener() @@ -153,18 +197,51 @@ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistratio SimpleComboValue<ScriptType> selectedItem = se.getSelectedItem(); if (selectedItem != null) { - onScriptTypeChanged(selectedItem.getValue()); + onPluginOrScriptTypeChanged(pluginTypeChooserOrNull.getSimpleValue(), + selectedItem.getValue()); } } }; } - protected void onScriptTypeChanged(ScriptType scriptType) + private SelectionChangedListener<SimpleComboValue<PluginType>> createPluginTypeChangedListener() { + return new SelectionChangedListener<SimpleComboValue<PluginType>>() + { + @Override + public void selectionChanged(SelectionChangedEvent<SimpleComboValue<PluginType>> se) + { + SimpleComboValue<PluginType> selectedItem = se.getSelectedItem(); + if (selectedItem != null) + { + onPluginOrScriptTypeChanged(selectedItem.getValue(), + scriptTypeChooserOrNull.getSimpleValue()); + } + } + }; + } + + protected void onPluginOrScriptTypeChanged(PluginType pluginType, ScriptType scriptType) + { + predeployedPluginsWidget.updateScriptType(scriptType); + nameField.setVisible(pluginType == PluginType.JYTHON); + FieldUtil.setMandatoryFlag(nameField, pluginType == PluginType.JYTHON); + predeployedPluginsWidget.setVisible(pluginType == PluginType.PREDEPLOYED); + FieldUtil.setMandatoryFlag(predeployedPluginsWidget, pluginType == PluginType.PREDEPLOYED); + scriptField.setVisible(pluginType == PluginType.JYTHON); + scriptField.setEnabled(pluginType == PluginType.JYTHON); rightPanel.setVisible(scriptType == ScriptType.DYNAMIC_PROPERTY || scriptType == ScriptType.ENTITY_VALIDATION); this.scriptExecution.setScriptType(scriptType); - scriptField.setValidator(validatorsByScriptType.get(scriptType)); + if (pluginType == PluginType.JYTHON) + { + scriptField.setValidator(validatorsByScriptType.get(scriptType)); + } else + { + scriptField.setValidator(null); + } + + scriptExecution.update(nameField.getValue(), scriptField.getValue(), pluginType); } private IValidable asValidable(final FormPanel panel) @@ -199,11 +276,13 @@ abstract public class AbstractScriptEditRegisterForm extends AbstractRegistratio { super.resetPanel(); nameField.reset(); + predeployedPluginsWidget.reset(); } private final void addFormFields() { formPanel.add(nameField); + formPanel.add(predeployedPluginsWidget); formPanel.add(entityKindField); formPanel.add(descriptionField); formPanel.add(scriptField); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java index cda5e0a075fbae2505543490c0eb2d0d6bac85a9..ad5fe39b9a31cfd3ff9d8eafe7ec3ecba51faf11 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java @@ -24,7 +24,9 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; /** @@ -41,7 +43,7 @@ public class ScriptEditForm extends AbstractScriptEditRegisterForm protected ScriptEditForm(IViewContext<ICommonClientServiceAsync> viewContext, TechId scriptId) { - super(viewContext, scriptId, null, null); + super(viewContext, scriptId, null, null, null); setRevertButtonVisible(true); this.scriptId = scriptId; } @@ -59,17 +61,31 @@ public class ScriptEditForm extends AbstractScriptEditRegisterForm Script script = new Script(); script.setId(scriptId.getId()); script.setDescription(descriptionField.getValue()); - script.setScript(scriptField.getValue()); - script.setName(nameField.getValue()); + if (originalScript.getPluginType() == PluginType.JYTHON) + { + script.setScript(scriptField.getValue()); + script.setName(nameField.getValue()); + } else + { + script.setName(predeployedPluginsWidget.getValue().getValue()); + } return script; } @Override protected void setValues() { + predeployedPluginsWidget.updateScriptType(originalScript.getScriptType()); FieldUtil.setValueWithUnescaping(descriptionField, originalScript.getDescription()); FieldUtil.setValueWithUnescaping(scriptField, originalScript.getScript()); - FieldUtil.setValueWithUnescaping(nameField, originalScript.getName()); + if (originalScript.getPluginType() == PluginType.JYTHON) + { + FieldUtil.setValueWithUnescaping(nameField, originalScript.getName()); + } else + { + predeployedPluginsWidget.setSelectedValue(StringEscapeUtils.unescapeHtml(originalScript + .getName())); + } String entityKind = originalScript.getEntityKind() == null ? GenericConstants.ALL_ENTITY_KINDS : originalScript.getEntityKind().name(); @@ -93,7 +109,8 @@ public class ScriptEditForm extends AbstractScriptEditRegisterForm void setOriginalScript(Script script) { this.originalScript = script; - onScriptTypeChanged(script.getScriptType()); + onPluginOrScriptTypeChanged(script.getPluginType(), script.getScriptType()); + scriptExecution.update(script.getName(), script.getScript(), script.getPluginType()); } private final class ScriptEditCallback extends diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptExecutionFramework.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptExecutionFramework.java index b1b451265b5a01748861a529ea0cd8ebb8e0df19..1d28f948bffd8a83bab797b29a474f7d9c15653e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptExecutionFramework.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptExecutionFramework.java @@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityValidationEvaluationInfo; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; /** @@ -99,8 +100,12 @@ public class ScriptExecutionFramework private static class State { + private String scriptName; + private String script; + private PluginType pluginType; + public String getScript() { return script; @@ -111,6 +116,25 @@ public class ScriptExecutionFramework this.script = script; } + public PluginType getPluginType() + { + return pluginType; + } + + public void setPluginType(PluginType pluginType) + { + this.pluginType = pluginType; + } + + public String getScriptName() + { + return scriptName; + } + + public void setScriptName(String scriptName) + { + this.scriptName = scriptName; + } } public ScriptExecutionFramework(IViewContext<ICommonClientServiceAsync> viewContext, @@ -318,9 +342,15 @@ public class ScriptExecutionFramework return set; } - public void update(String script) + public void update(String scriptName, String script, PluginType pluginTypeOrNull) { + state.setScriptName(scriptName); state.setScript(script); + + if (pluginTypeOrNull != null) + { + state.setPluginType(pluginTypeOrNull); + } } public void updateEntityKind(EntityKind kind) @@ -341,45 +371,25 @@ public class ScriptExecutionFramework if (selectedEntityOrNull != null) { evaluate(selectedEntityOrNull.getEntityKind(), - selectedEntityOrNull.getEntityIdentifier(), state.getScript()); + selectedEntityOrNull.getEntityIdentifier(), state.getPluginType(), + state.getScriptName(), state.getScript()); } } - private void evaluate(EntityKind kind, String entity, String script) + private void evaluate(EntityKind kind, String entity, PluginType pluginType, String scriptName, + String script) { if (entity == null) { return; } if (this.scriptType == ScriptType.DYNAMIC_PROPERTY) - { - updateEvaluationResultField(viewContext.getMessage(Dict.EVALUATION_IN_PROGRESS)); - viewContext.getCommonService().evaluate( - new DynamicPropertyEvaluationInfo(kind, entity, script), - new AbstractAsyncCallback<String>(viewContext) - { - - @Override - protected void process(String result) - { - updateEvaluationResultField(result); - } - - @Override - public void finishOnFailure(Throwable caught) - { - updateEvaluationResultField(""); - evaluationResultPanel.setVisible(false); - } - }); - } else if (this.scriptType == ScriptType.ENTITY_VALIDATION) { updateEvaluationResultField(viewContext.getMessage(Dict.EVALUATION_IN_PROGRESS)); viewContext.getCommonService() .evaluate( - new EntityValidationEvaluationInfo(kind, entity, - isNewEntity.getValue(), script), - new AbstractAsyncCallback<String>(viewContext) + new DynamicPropertyEvaluationInfo(kind, entity, pluginType, scriptName, + script), new AbstractAsyncCallback<String>(viewContext) { @Override @@ -395,6 +405,28 @@ public class ScriptExecutionFramework evaluationResultPanel.setVisible(false); } }); + } else if (this.scriptType == ScriptType.ENTITY_VALIDATION) + { + updateEvaluationResultField(viewContext.getMessage(Dict.EVALUATION_IN_PROGRESS)); + viewContext.getCommonService().evaluate( + new EntityValidationEvaluationInfo(kind, entity, isNewEntity.getValue(), + pluginType, scriptName, script), + new AbstractAsyncCallback<String>(viewContext) + { + + @Override + protected void process(String result) + { + updateEvaluationResultField(result); + } + + @Override + public void finishOnFailure(Throwable caught) + { + updateEvaluationResultField(""); + evaluationResultPanel.setVisible(false); + } + }); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java index 2d93d1d5857885901af4e12eeb79c96283333b82..cc14056accec125b3a89cf1121841a8a3027d134 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java @@ -19,8 +19,10 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PluginTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.ScriptTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; /** @@ -34,13 +36,17 @@ public class ScriptRegistrationForm extends AbstractScriptEditRegisterForm { ScriptTypeSelectionWidget scriptTypeChooser = ScriptTypeSelectionWidget.createAllScriptTypes(viewContext); - return new ScriptRegistrationForm(viewContext, scriptTypeChooser, entityKindOrNull); + PluginTypeSelectionWidget pluginTypeChooser = + PluginTypeSelectionWidget.createAllPluginTypes(viewContext); + return new ScriptRegistrationForm(viewContext, scriptTypeChooser, pluginTypeChooser, + entityKindOrNull); } protected ScriptRegistrationForm(IViewContext<ICommonClientServiceAsync> viewContext, - ScriptTypeSelectionWidget scriptTypeChooser, EntityKind entityKindOrNull) + ScriptTypeSelectionWidget scriptTypeChooser, + PluginTypeSelectionWidget pluginTypeChooser, EntityKind entityKindOrNull) { - super(viewContext, scriptTypeChooser, entityKindOrNull); + super(viewContext, scriptTypeChooser, pluginTypeChooser, entityKindOrNull); setResetButtonVisible(true); } @@ -55,11 +61,20 @@ public class ScriptRegistrationForm extends AbstractScriptEditRegisterForm @Override public Script getScript() { + PluginType pluginType = pluginTypeChooserOrNull.getSimpleValue(); + Script newScript = new Script(); newScript.setDescription(descriptionField.getValue()); - newScript.setName(nameField.getValue()); - newScript.setScript(scriptField.getValue()); + if (pluginType == PluginType.JYTHON) + { + newScript.setScript(scriptField.getValue()); + newScript.setName(nameField.getValue()); + } else + { + newScript.setName(predeployedPluginsWidget.getValue().getValue()); + } newScript.setScriptType(scriptTypeChooserOrNull.getSimpleValue()); + newScript.setPluginType(pluginType); newScript.setEntityKind(entityKindField.tryGetEntityKind()); return newScript; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index 923fe27448d1065ba00a49176a2f1e1ca67742c0..1887894ccfca2b1a6ee85d0a2b3e47172190e632 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -187,6 +187,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; @@ -2805,4 +2806,10 @@ public final class CommonClientService extends AbstractClientService implements metaproject.setName(name); commonServer.registerMetaproject(getSessionToken(), metaproject); } + + @Override + public List<String> listPredeployedPlugins(ScriptType scriptType) + { + return commonServer.listPredeployedPlugins(getSessionToken(), scriptType); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java index d17ec12802a32e21806ad2c5e539272880ba6b55..9bb6d8c1ad61015d79f3be80f5b85e7ec6adb8a6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java @@ -51,7 +51,6 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.ReturnVa import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed; import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ExpressionValidator; import ch.systemsx.cisd.openbis.generic.server.business.IPropertiesBatchManager; -import ch.systemsx.cisd.openbis.generic.server.business.PropertiesBatchManager; import ch.systemsx.cisd.openbis.generic.server.business.bo.DataSetTable; import ch.systemsx.cisd.openbis.generic.server.business.bo.IDataSetTable; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; @@ -158,6 +157,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp @Resource(name = ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME) protected ExposablePropertyPlaceholderConfigurer configurer; + @Resource(name = ComponentNames.PROPERTIES_BATCH_MANAGER) private IPropertiesBatchManager propertiesBatchManager; private String userForAnonymousLogin; @@ -198,10 +198,6 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp protected IPropertiesBatchManager getPropertiesBatchManager() { - if (propertiesBatchManager == null) - { - propertiesBatchManager = new PropertiesBatchManager(); - } return propertiesBatchManager; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java index c5fa9d66aa246a88602e1e537ea7cf4b3faee787..56f73e4fc133bf3f7e03ecdac36f2ef8994df931 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java @@ -87,6 +87,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.IMasterDataScriptRegistrationRunner; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The unique {@link ICommonBusinessObjectFactory} implementation. @@ -100,41 +101,43 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac public CommonBusinessObjectFactory(IDAOFactory daoFactory, IDataStoreServiceFactory dssFactory, IRelationshipService relationshipService, IEntityOperationChecker entityOperationChecker, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(daoFactory, dssFactory, relationshipService, entityOperationChecker, - conversationClient); + conversationClient, managedPropertyEvaluatorFactory); } @Override public final IAttachmentBO createAttachmentBO(final Session session) { - return new AttachmentBO(getDaoFactory(), session); + return new AttachmentBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final ISpaceBO createSpaceBO(final Session session) { - return new SpaceBO(getDaoFactory(), session); + return new SpaceBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IScriptBO createScriptBO(final Session session) { - return new ScriptBO(getDaoFactory(), session); + return new ScriptBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IRoleAssignmentTable createRoleAssignmentTable(final Session session) { - return new RoleAssignmentTable(getDaoFactory(), session); + return new RoleAssignmentTable(getDaoFactory(), session, + getManagedPropertyEvaluatorFactory()); } @Override public final ISampleTable createSampleTable(final Session session) { return new SampleTable(getDaoFactory(), session, getRelationshipService(), - getEntityOperationChecker()); + getEntityOperationChecker(), getManagedPropertyEvaluatorFactory()); } @Override @@ -174,132 +177,142 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac public final ISampleBO createSampleBO(final Session session) { return new SampleBO(getDaoFactory(), session, getRelationshipService(), - getEntityOperationChecker()); + getEntityOperationChecker(), getManagedPropertyEvaluatorFactory()); } @Override public IDataBO createDataBO(Session session) { return new DataBO(getDaoFactory(), session, getRelationshipService(), - getConversationClient()); + getConversationClient(), getManagedPropertyEvaluatorFactory()); } @Override public final IDataSetTable createDataSetTable(final Session session) { return new DataSetTable(getDaoFactory(), getDSSFactory(), session, - getRelationshipService(), getConversationClient()); + getRelationshipService(), getConversationClient(), + getManagedPropertyEvaluatorFactory()); } @Override public IDeletedDataSetTable createDeletedDataSetTable(Session session) { return new DeletedDataSetTable(getDaoFactory(), getDSSFactory(), session, - getRelationshipService(), getConversationClient()); + getRelationshipService(), getConversationClient(), + getManagedPropertyEvaluatorFactory()); } @Override public IExperimentTable createExperimentTable(final Session session) { - return new ExperimentTable(getDaoFactory(), session, getRelationshipService()); + return new ExperimentTable(getDaoFactory(), session, getRelationshipService(), + getManagedPropertyEvaluatorFactory()); } @Override public IMaterialTable createMaterialTable(final Session session) { - return new MaterialTable(getDaoFactory(), session); + return new MaterialTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IExperimentBO createExperimentBO(final Session session) { - return new ExperimentBO(getDaoFactory(), session, getRelationshipService()); + return new ExperimentBO(getDaoFactory(), session, getRelationshipService(), + getManagedPropertyEvaluatorFactory()); } @Override public final IPropertyTypeTable createPropertyTypeTable(final Session session) { - return new PropertyTypeTable(getDaoFactory(), session); + return new PropertyTypeTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IPropertyTypeBO createPropertyTypeBO(final Session session) { - return new PropertyTypeBO(getDaoFactory(), session); + return new PropertyTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IVocabularyBO createVocabularyBO(Session session) { - return new VocabularyBO(getDaoFactory(), session); + return new VocabularyBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public final IVocabularyTermBO createVocabularyTermBO(Session session) { - return new VocabularyTermBO(getDaoFactory(), session); + return new VocabularyTermBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public IEntityTypePropertyTypeBO createEntityTypePropertyTypeBO(Session session, EntityKind entityKind) { - return new EntityTypePropertyTypeBO(getDaoFactory(), session, entityKind); + return new EntityTypePropertyTypeBO(getDaoFactory(), session, entityKind, + getManagedPropertyEvaluatorFactory()); } @Override public IProjectBO createProjectBO(Session session) { - return new ProjectBO(getDaoFactory(), session, getRelationshipService()); + return new ProjectBO(getDaoFactory(), session, getRelationshipService(), + getManagedPropertyEvaluatorFactory()); } @Override public IEntityTypeBO createEntityTypeBO(Session session) { - return new EntityTypeBO(getDaoFactory(), session); + return new EntityTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public IMaterialBO createMaterialBO(Session session) { - return new MaterialBO(getDaoFactory(), session); + return new MaterialBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public IAuthorizationGroupBO createAuthorizationGroupBO(Session session) { - return new AuthorizationGroupBO(getDaoFactory(), session); + return new AuthorizationGroupBO(getDaoFactory(), session, + getManagedPropertyEvaluatorFactory()); } @Override public IGridCustomFilterOrColumnBO createGridCustomFilterBO(Session session) { - return new GridCustomFilterBO(getDaoFactory(), session); + return new GridCustomFilterBO(getDaoFactory(), session, + getManagedPropertyEvaluatorFactory()); } @Override public IGridCustomFilterOrColumnBO createGridCustomColumnBO(Session session) { - return new GridCustomColumnBO(getDaoFactory(), session); + return new GridCustomColumnBO(getDaoFactory(), session, + getManagedPropertyEvaluatorFactory()); } @Override public ITrashBO createTrashBO(Session session) { - return new TrashBO(getDaoFactory(), this, session); + return new TrashBO(getDaoFactory(), this, session, getManagedPropertyEvaluatorFactory()); } @Override public IDeletionTable createDeletionTable(Session session) { - return new DeletionTable(getDaoFactory(), session); + return new DeletionTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory()); } @Override public ICorePluginTable createCorePluginTable(Session session, IMasterDataScriptRegistrationRunner masterDataScriptRunner) { - return new CorePluginTable(getDaoFactory(), session, masterDataScriptRunner); + return new CorePluginTable(getDaoFactory(), session, masterDataScriptRunner, + getManagedPropertyEvaluatorFactory()); } @Override @@ -312,7 +325,8 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac public IMetaprojectBO createMetaprojectBO(Session session) { return new MetaprojectBO(getDaoFactory(), createExperimentBO(session), - createSampleBO(session), createDataBO(session), createMaterialBO(session), session); + createSampleBO(session), createDataBO(session), createMaterialBO(session), session, + getManagedPropertyEvaluatorFactory()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index 5c09d2b7ae42421dd823d7c66c58c028b6c06fd9..ff0a516316f23cc3cb589f9a219041a504331ca4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -133,13 +133,15 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.HibernateSearchDataProvider; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.SampleDataAccessExceptionTranslator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.DynamicPropertyEvaluator; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyCalculatorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyEvaluator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityAdaptorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonDynamicPropertyCalculator; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator.IValidationRequestDelegate; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.IEntityValidatorFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.api.IEntityValidator; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.EncapsulatedCommonServer; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.MasterDataRegistrationScriptRunner; import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper; @@ -304,7 +306,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierF import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluator; -import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.AttachmentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.AuthorizationGroupTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; @@ -342,16 +344,26 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt private final IDataStoreServiceRegistrator dataStoreServiceRegistrator; + private final IEntityValidatorFactory entityValidationFactory; + + private final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory; + + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + private String defaultPutDataStoreServerCodeOrNull; public CommonServer(final IAuthenticationService authenticationService, final ISessionManager<Session> sessionManager, final IDAOFactory daoFactory, final ICommonBusinessObjectFactory businessObjectFactory, IDataStoreServiceRegistrator dataStoreServiceRegistrator, - final LastModificationState lastModificationState) + final LastModificationState lastModificationState, + IEntityValidatorFactory entityValidationFactory, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this(authenticationService, sessionManager, daoFactory, null, businessObjectFactory, - dataStoreServiceRegistrator, lastModificationState); + dataStoreServiceRegistrator, lastModificationState, entityValidationFactory, + dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); } CommonServer(final IAuthenticationService authenticationService, @@ -359,12 +371,18 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt IPropertiesBatchManager propertiesBatchManager, final ICommonBusinessObjectFactory businessObjectFactory, IDataStoreServiceRegistrator dataStoreServiceRegistrator, - final LastModificationState lastModificationState) + final LastModificationState lastModificationState, + IEntityValidatorFactory entityValidationFactory, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(authenticationService, sessionManager, daoFactory, propertiesBatchManager, businessObjectFactory); this.dataStoreServiceRegistrator = dataStoreServiceRegistrator; this.lastModificationState = lastModificationState; + this.entityValidationFactory = entityValidationFactory; + this.dynamicPropertyCalculatorFactory = dynamicPropertyCalculatorFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } ICommonBusinessObjectFactory getBusinessObjectFactory() @@ -653,7 +671,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt if (entityTypePropertyType.isManaged()) { IManagedPropertyEvaluator evaluator = - ManagedPropertyEvaluatorFactory + managedPropertyEvaluatorFactory .createManagedPropertyEvaluator(entityTypePropertyType); List<IManagedInputWidgetDescription> inputWidgetDescriptions = evaluator.getInputWidgetDescriptions(); @@ -867,7 +885,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt List<AbstractEntityPropertyHistoryPE> result = entityPropertyHistoryDAO.getPropertyHistory( DtoConverters.convertEntityKind(entityKind), entityID); - return EntityHistoryTranslator.translate(result, session.getBaseIndexURL()); + return EntityHistoryTranslator.translate(result, session.getBaseIndexURL(), + managedPropertyEvaluatorFactory); } private static List<EntityTypePropertyType<?>> extractAssignments(EntityType entityTypeOrNull, @@ -953,8 +972,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt Metaproject metaproject = getMetaproject(sessionToken, metaprojectId); Collection<MetaprojectAssignmentPE> assignments = - new MetaprojectAssignmentsHelper(getDAOFactory()).getMetaprojectAssignments( - metaproject.getId(), EntityKind.EXPERIMENT); + new MetaprojectAssignmentsHelper(getDAOFactory(), managedPropertyEvaluatorFactory) + .getMetaprojectAssignments(metaproject.getId(), EntityKind.EXPERIMENT); List<ExperimentPE> experimentsPE = new ArrayList<ExperimentPE>(); for (MetaprojectAssignmentPE assignment : assignments) @@ -1042,7 +1061,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt Map<Long, Set<Metaproject>> assignments = MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs); Collections.sort(experiments); - return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments); + return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments, + managedPropertyEvaluatorFactory); } private final List<Experiment> listExperiments(final String sessionToken, @@ -1079,7 +1099,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt Map<Long, Set<Metaproject>> assignments = MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs); Collections.sort(experiments); - return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments); + return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments, + managedPropertyEvaluatorFactory); } @Override @@ -1488,7 +1509,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt getDAOFactory().getMetaprojectDAO().listMetaprojectsForEntity( session.tryGetPerson(), dataset); return DataSetTranslator.translate(dataset, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -1536,7 +1557,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { HibernateUtils.initialize(hit.getChildRelationships()); list.add(DataSetTranslator.translate(hit, session.getBaseIndexURL(), withDetails, - translation.get(hit.getId()))); + translation.get(hit.getId()), managedPropertyEvaluatorFactory)); } return list; } @@ -1569,7 +1590,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { HibernateUtils.initialize(hit.getChildRelationships()); list.add(DataSetTranslator.translate(hit, session.getBaseIndexURL(), withDetails, - translation.get(hit.getId()))); + translation.get(hit.getId()), managedPropertyEvaluatorFactory)); } return list; } @@ -2252,7 +2273,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt session.tryGetPerson(), sample); return SampleTranslator.translate(getSampleTypeSlaveServerPlugin(sample.getSampleType()) .getSampleInfo(session, sample), session.getBaseIndexURL(), MetaprojectTranslator - .translate(metaprojectPEs)); + .translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -2298,7 +2319,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt session.tryGetPerson(), experiment); return ExperimentTranslator.translate(experiment, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojects), + MetaprojectTranslator.translate(metaprojects), managedPropertyEvaluatorFactory, ExperimentTranslator.LoadableFields.PROPERTIES, ExperimentTranslator.LoadableFields.ATTACHMENTS); } @@ -2321,7 +2342,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt session.tryGetPerson(), experiment); return ExperimentTranslator.translate(experiment, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojects), + MetaprojectTranslator.translate(metaprojects), managedPropertyEvaluatorFactory, ExperimentTranslator.LoadableFields.PROPERTIES, ExperimentTranslator.LoadableFields.ATTACHMENTS); } @@ -2396,7 +2417,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt session.tryGetPerson(), materialPE); return MaterialTranslator.translate(materialPE, - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -2412,7 +2433,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt getDAOFactory().getMetaprojectDAO().listMetaprojectsForEntity( session.tryGetPerson(), material); return MaterialTranslator.translate(material, true, - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -2729,7 +2750,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt if (etpt.isManaged()) { IManagedPropertyEvaluator evaluator = - ManagedPropertyEvaluatorFactory.createManagedPropertyEvaluator(etpt); + managedPropertyEvaluatorFactory.createManagedPropertyEvaluator(etpt); List<String> batchColumnNames = evaluator.getBatchColumnNames(); if (batchColumnNames.isEmpty()) { @@ -3232,7 +3253,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt JythonDynamicPropertyCalculator calculator = JythonDynamicPropertyCalculator.create(info.getScript()); IDynamicPropertyEvaluator evaluator = - new DynamicPropertyEvaluator(getDAOFactory(), null); + new DynamicPropertyEvaluator(getDAOFactory(), null, + dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); IEntityAdaptor adaptor = EntityAdaptorFactory.create(entity, evaluator, getDAOFactory() .getSessionFactory().getCurrentSession()); @@ -3254,28 +3276,28 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { final List<String> objectsWhichValidationWouldBeForced = new LinkedList<String>(); - JythonEntityValidationCalculator calculator = - JythonEntityValidationCalculator.create(info.getScript(), - new IValidationRequestDelegate<INonAbstractEntityAdapter>() - { - @Override - public void requestValidation( - INonAbstractEntityAdapter entityAdaptor) - { - IEntityInformationWithPropertiesHolder localEntity = - entityAdaptor.entityPE(); - objectsWhichValidationWouldBeForced.add(localEntity - .getEntityKind() - + " " - + localEntity.getIdentifier()); - } - }); + IEntityValidator entityValidator = + entityValidationFactory.createEntityValidator(info.getPluginType(), + info.getScriptName(), info.getScript()); + entityValidator.init(new IValidationRequestDelegate<INonAbstractEntityAdapter>() + { + @Override + public void requestValidation(INonAbstractEntityAdapter entityAdaptor) + { + IEntityInformationWithPropertiesHolder localEntity = + entityAdaptor.entityPE(); + objectsWhichValidationWouldBeForced.add(localEntity.getEntityKind() + " " + + localEntity.getIdentifier()); + } + }); + IDynamicPropertyEvaluator evaluator = - new DynamicPropertyEvaluator(getDAOFactory(), null); + new DynamicPropertyEvaluator(getDAOFactory(), null, + dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); IEntityAdaptor adaptor = EntityAdaptorFactory.create(entity, evaluator, getDAOFactory() .getSessionFactory().getCurrentSession()); - String result = calculator.eval(adaptor, info.isNew()); + String result = entityValidator.validate(adaptor, info.isNew()); if (result != null) { @@ -3467,7 +3489,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } - return ManagedPropertyEvaluatorFactory.createManagedPropertyEvaluator(managedPropertyPE + return managedPropertyEvaluatorFactory.createManagedPropertyEvaluator(managedPropertyPE .getEntityTypePropertyType()); } @@ -3952,7 +3974,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt Session session = getSession(sessionToken); - MetaprojectAssignmentsHelper helper = new MetaprojectAssignmentsHelper(getDAOFactory()); + MetaprojectAssignmentsHelper helper = + new MetaprojectAssignmentsHelper(getDAOFactory(), managedPropertyEvaluatorFactory); return helper.getMetaprojectAssignments(session, metaproject, session.getUserName(), fetchOptions); @@ -4130,4 +4153,22 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt return new AuthorizationServiceUtils(getDAOFactory(), session.tryGetPerson()); } + @Override + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) + public List<String> listPredeployedPlugins(String sessionToken, ScriptType scriptType) + { + checkSession(sessionToken); + + switch (scriptType) + { + case ENTITY_VALIDATION: + return entityValidationFactory.listPredeployedPlugins(); + case DYNAMIC_PROPERTY: + return dynamicPropertyCalculatorFactory.listPredeployedPlugins(); + case MANAGED_PROPERTY: + return managedPropertyEvaluatorFactory.listPredeployedPlugins(); + } + + return null; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index 32f00e6e4cbbabc005a6ac14f04e51ffe75812c2..0cef93173076884e59fe2ef54019fbd1f6d9b791 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -1685,4 +1685,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe metaprojectId, notNullUpdate.getName(), notNullUpdate.getDescription()); return null; } + + @Override + public List<String> listPredeployedPlugins(String sessionToken, ScriptType scriptType) + { + logAccess(sessionToken, "list_predeployed_plugins", "SCRIPT_TYPE(%s)", scriptType); + return null; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ComponentNames.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ComponentNames.java index 86e46556c4e39c57e43ab9253dd5470367099691..2f4c6c8b40d17c63766bbf4554545248399a1048 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ComponentNames.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ComponentNames.java @@ -44,4 +44,9 @@ public final class ComponentNames public static final String COMMON_BUSINESS_OBJECT_FACTORY = "common-business-object-factory"; public static final String REMOTE_HOST_VALIDATOR = "remote-host-validator"; + + public static final String MANAGED_PROPERTY_EVALUATOR_FACTORY = + "managed-property-evaluator-factory"; + + public static final String PROPERTIES_BATCH_MANAGER = "properties-batch-manager"; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java index ba99c6fa3ae6697a47c44e066e501bee6e5c86ad..6063902862ac3de9ade96b4f2a47093ca09bcc7a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java @@ -220,6 +220,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTypePropertyTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTypeTranslator; @@ -268,13 +269,16 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements private IServiceConversationServerManagerLocal conversationServer; + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public ETLService(IAuthenticationService authenticationService, ISessionManager<Session> sessionManager, IDAOFactory daoFactory, ICommonBusinessObjectFactory boFactory, IDataStoreServiceFactory dssFactory, TrustedCrossOriginDomainsProvider trustedOriginDomainProvider, IETLEntityOperationChecker entityOperationChecker, IDataStoreServiceRegistrator dataStoreServiceRegistrator, - IDataStoreDataSourceManager dataSourceManager) + IDataStoreDataSourceManager dataSourceManager, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this(authenticationService, sessionManager, daoFactory, null, boFactory, dssFactory, trustedOriginDomainProvider, entityOperationChecker, dataStoreServiceRegistrator, @@ -287,7 +291,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements { return null; } - }), 30)); + }), 30), managedPropertyEvaluatorFactory); } ETLService(IAuthenticationService authenticationService, @@ -298,7 +302,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements IETLEntityOperationChecker entityOperationChecker, IDataStoreServiceRegistrator dataStoreServiceRegistrator, IDataStoreDataSourceManager dataSourceManager, - ISessionManager<Session> sessionManagerForEntityOperation) + ISessionManager<Session> sessionManagerForEntityOperation, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(authenticationService, sessionManager, daoFactory, propertiesBatchManager, boFactory); this.daoFactory = daoFactory; @@ -308,6 +313,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements this.dataStoreServiceRegistrator = dataStoreServiceRegistrator; this.dataSourceManager = dataSourceManager; this.sessionManagerForEntityOperation = sessionManagerForEntityOperation; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } @Override @@ -539,7 +545,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements session.tryGetPerson(), experiment); return ExperimentTranslator.translate(experiment, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs), LoadableFields.PROPERTIES); + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory, + LoadableFields.PROPERTIES); } @Override @@ -576,7 +583,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements session.tryGetPerson(), sample); } return SampleTranslator.translate(sample, session.getBaseIndexURL(), true, true, - MetaprojectTranslator.translate(metaprojects)); + MetaprojectTranslator.translate(metaprojects), managedPropertyEvaluatorFactory); } @Override @@ -768,7 +775,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements Map<Long, Set<Metaproject>> assignments = MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs); Collections.sort(experiments); - return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments); + return ExperimentTranslator.translate(experiments, session.getBaseIndexURL(), assignments, + managedPropertyEvaluatorFactory); } @Override @@ -793,7 +801,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements Set<SamplePropertyPE> properties = top.getProperties(); HibernateUtils.initialize(properties); return EntityPropertyTranslator.translate(properties.toArray(new SamplePropertyPE[0]), - new HashMap<PropertyTypePE, PropertyType>()); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory); } @Override @@ -817,7 +825,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements Set<SamplePropertyPE> properties = sample.getProperties(); HibernateUtils.initialize(properties); return EntityPropertyTranslator.translate(properties.toArray(new SamplePropertyPE[0]), - new HashMap<PropertyTypePE, PropertyType>()); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory); } @Override @@ -1071,7 +1079,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements getDAOFactory().getMetaprojectDAO().listMetaprojectsForEntity( session.tryGetPerson(), dataPE); return DataSetTranslator.translate(dataPE, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojects)); + MetaprojectTranslator.translate(metaprojects), managedPropertyEvaluatorFactory); } @Override @@ -1142,7 +1150,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements Map<Long, Set<Metaproject>> assignments = MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs); - return SampleTranslator.translate(samples, "", assignments); + return SampleTranslator + .translate(samples, "", assignments, managedPropertyEvaluatorFactory); } @Override @@ -1341,7 +1350,9 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements // Register the data set registerDataSetInternal(sessionToken, externalData, samplePE); - Sample result = SampleTranslator.translate(samplePE, session.getBaseIndexURL(), null); + Sample result = + SampleTranslator.translate(samplePE, session.getBaseIndexURL(), null, + managedPropertyEvaluatorFactory); return result; } @@ -1366,7 +1377,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements Sample result = SampleTranslator.translate(samplePE, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), + managedPropertyEvaluatorFactory); return result; } @@ -1485,7 +1497,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements session.tryGetPerson(), materialPE); } return MaterialTranslator.translate(materialPE, - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), + managedPropertyEvaluatorFactory); } catch (UserFailureException ufe) { // material does not exist @@ -1698,7 +1711,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements { MaterialHelper materialHelper = new MaterialHelper(session, businessObjectFactory, getDAOFactory(), - getPropertiesBatchManager()); + getPropertiesBatchManager(), managedPropertyEvaluatorFactory); Map<String, List<NewMaterial>> materialRegs = operationDetails.getMaterialRegistrations(); if (authorize) { @@ -1720,7 +1733,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements { MaterialHelper materialHelper = new MaterialHelper(session, businessObjectFactory, getDAOFactory(), - getPropertiesBatchManager()); + getPropertiesBatchManager(), managedPropertyEvaluatorFactory); List<MaterialUpdateDTO> allMaterialUpdates = operationDetails.getMaterialUpdates(); @@ -2590,7 +2603,8 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements name); } - MetaprojectAssignmentsHelper helper = new MetaprojectAssignmentsHelper(daoFactory); + MetaprojectAssignmentsHelper helper = + new MetaprojectAssignmentsHelper(daoFactory, managedPropertyEvaluatorFactory); return helper.getMetaprojectAssignments(getSession(systemSessionToken), metaproject, userName, fetchOptions); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/HotDeploymentController.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/HotDeploymentController.java new file mode 100644 index 0000000000000000000000000000000000000000..234bc7dfb9a93d43b555bbfab951bee0516d2187 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/HotDeploymentController.java @@ -0,0 +1,48 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server; + +import java.io.File; + +import ch.ethz.cisd.hotdeploy.PluginContainer; +import ch.ethz.cisd.hotdeploy.PluginMapHolder; + +/** + * @author Pawel Glyzewski + */ +public class HotDeploymentController implements IHotDeploymentController +{ + private final PluginContainer pluginContainer; + + public HotDeploymentController() + { + PluginContainer.initHotDeployment(); + pluginContainer = PluginContainer.tryGetInstance(); + } + + @Override + public void addPluginDirectory(File pluginDirectory) + { + pluginContainer.addPluginDirectory(pluginDirectory); + } + + @Override + public <T> PluginMapHolder<T> getPluginMap(Class<T> pluginClass) + { + return new PluginMapHolder<T>(pluginContainer, pluginClass); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IHotDeploymentController.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IHotDeploymentController.java new file mode 100644 index 0000000000000000000000000000000000000000..237ea73426732f8db4bb2c10123be7998437e478 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IHotDeploymentController.java @@ -0,0 +1,31 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server; + +import java.io.File; + +import ch.ethz.cisd.hotdeploy.PluginMapHolder; + +/** + * @author Pawel Glyzewski + */ +public interface IHotDeploymentController +{ + public void addPluginDirectory(File pluginDirectory); + + public <T> PluginMapHolder<T> getPluginMap(Class<T> pluginClass); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MaterialHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MaterialHelper.java index 2427c2b75978d5b3d789da61342af3d00b191f0b..ee5366944c2bedec45c753ea78ff3fa47584e88b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MaterialHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MaterialHelper.java @@ -50,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.MaterialConfigurationProvider; @@ -74,22 +75,27 @@ public class MaterialHelper private final MaterialConfigurationProvider materialConfig; + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public MaterialHelper(Session session, IAbstractBussinessObjectFactory businessObjectFactory, - IDAOFactory daoFactory, IPropertiesBatchManager propertiesBatchManager) + IDAOFactory daoFactory, IPropertiesBatchManager propertiesBatchManager, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this(session, businessObjectFactory, daoFactory, propertiesBatchManager, - MaterialConfigurationProvider.getInstance()); + MaterialConfigurationProvider.getInstance(), managedPropertyEvaluatorFactory); } MaterialHelper(Session session, IAbstractBussinessObjectFactory businessObjectFactory, IDAOFactory daoFactory, IPropertiesBatchManager propertiesBatchManager, - MaterialConfigurationProvider materialConfig) + MaterialConfigurationProvider materialConfig, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.session = session; this.businessObjectFactory = businessObjectFactory; this.daoFactory = daoFactory; this.propertiesBatchManager = propertiesBatchManager; this.materialConfig = materialConfig; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } public List<Material> registerMaterials(String materialTypeCode, @@ -142,7 +148,7 @@ public class MaterialHelper BatchOperationExecutor.executeInBatches(strategy); return MaterialTranslator.translate(registeredMaterials, - new HashMap<Long, Set<Metaproject>>()); + new HashMap<Long, Set<Metaproject>>(), managedPropertyEvaluatorFactory); } public int updateMaterials(String materialTypeCode, final List<NewMaterial> newMaterials, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MetaprojectAssignmentsHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MetaprojectAssignmentsHelper.java index 653e96d7fb41aebc784ea1805810f8d7829bd066..d686cdea8138658806674682e7ef28faf4022647 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MetaprojectAssignmentsHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/MetaprojectAssignmentsHelper.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignmentsF import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; @@ -47,9 +48,13 @@ public class MetaprojectAssignmentsHelper { private final IDAOFactory daoFactory; - public MetaprojectAssignmentsHelper(IDAOFactory daoFactory) + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public MetaprojectAssignmentsHelper(IDAOFactory daoFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.daoFactory = daoFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } /** @@ -86,7 +91,7 @@ public class MetaprojectAssignmentsHelper { experiments.add(ExperimentTranslator.translate( metaprojectAssignmentPE.getExperiment(), baseIndexURL, null, - LoadableFields.PROPERTIES)); + managedPropertyEvaluatorFactory, LoadableFields.PROPERTIES)); } else { experiments.add(ExperimentTranslator.translateWithoutRevealingData( @@ -103,7 +108,7 @@ public class MetaprojectAssignmentsHelper if (authorizationUtils.canAccessSample(metaprojectAssignmentPE.getSample())) { samples.add(SampleTranslator.translate(metaprojectAssignmentPE.getSample(), - baseIndexURL, null)); + baseIndexURL, null, managedPropertyEvaluatorFactory)); } else { samples.add(SampleTranslator @@ -120,7 +125,7 @@ public class MetaprojectAssignmentsHelper if (authorizationUtils.canAccessDataSet(metaprojectAssignmentPE.getDataSet())) { dataSets.add(DataSetTranslator.translate(metaprojectAssignmentPE.getDataSet(), - baseIndexURL, null)); + baseIndexURL, null, managedPropertyEvaluatorFactory)); } else { dataSets.add(DataSetTranslator @@ -135,7 +140,7 @@ public class MetaprojectAssignmentsHelper metaproject.getId(), EntityKind.MATERIAL)) { materials.add(MaterialTranslator.translate(metaprojectAssignmentPE.getMaterial(), - null)); + null, managedPropertyEvaluatorFactory)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java index 29db281fdfadf5a5966e8ea2df4a82e5f375c7a6..f3380ddf4b2d7328d7c611e5101cfd3b1faf0fc2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java @@ -109,6 +109,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MetaprojectTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -128,6 +129,9 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Resource(name = ComponentNames.COMMON_BUSINESS_OBJECT_FACTORY) private ICommonBusinessObjectFactory boFactory; + @Resource(name = ComponentNames.MANAGED_PROPERTY_EVALUATOR_FACTORY) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + // Default constructor needed by Spring public GeneralInformationService() { @@ -819,7 +823,8 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio session.tryGetPerson(), dataPE); ExternalData ds = DataSetTranslator.translate(dataPE, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojects)); + MetaprojectTranslator.translate(metaprojects), + managedPropertyEvaluatorFactory); result.add(Translator.translate(ds, connections)); } return result; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java index da90b14d60fcbdfd11343a9fb9f8b79c76c84e31..a950799d580455108fb2cef637eb8566c156f754 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java @@ -50,7 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluator; -import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyFunctions; import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator; @@ -71,6 +71,13 @@ public class PropertiesBatchManager implements IPropertiesBatchManager private final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY, getClass()); + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public PropertiesBatchManager(IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) + { + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; + } + @Override public void manageProperties(SampleTypePE sampleType, List<NewSample> samples, PersonPE registrator) @@ -261,7 +268,7 @@ public class PropertiesBatchManager implements IPropertiesBatchManager String propertyTypeCode = entityTypePropertyType.getPropertyType().getCode(); EvaluationContext context = new EvaluationContext(); context.evaluator = - ManagedPropertyEvaluatorFactory + managedPropertyEvaluatorFactory .createManagedPropertyEvaluator(entityTypePropertyType); context.scriptPEorNull = entityTypePropertyType.getScript(); result.put(propertyTypeCode, context); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java index 22177203364bd4de78ce2f0da4dcc5a551d9200c..35242920086fe4ccc051ffe0eac4ca265af5d350 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java @@ -89,6 +89,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.AttachmentTranslator; /** @@ -104,20 +105,27 @@ abstract class AbstractBusinessObject implements IDAOFactory protected final IEntityPropertiesConverter entityPropertiesConverter; - AbstractBusinessObject(final IDAOFactory daoFactory, final Session session) + protected final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + AbstractBusinessObject(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - this(daoFactory, session, (IEntityPropertiesConverter) null); + this(daoFactory, session, (IEntityPropertiesConverter) null, + managedPropertyEvaluatorFactory); } AbstractBusinessObject(final IDAOFactory daoFactory, final Session session, - EntityKind entityKindOrNull) + EntityKind entityKindOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this(daoFactory, session, entityKindOrNull == null ? null : new EntityPropertiesConverter( - entityKindOrNull, daoFactory)); + entityKindOrNull, daoFactory, managedPropertyEvaluatorFactory), + managedPropertyEvaluatorFactory); } AbstractBusinessObject(final IDAOFactory daoFactory, final Session session, - IEntityPropertiesConverter converter) + IEntityPropertiesConverter converter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { assert daoFactory != null : "Given DAO factory can not be null."; assert session != null : "Given session can not be null."; @@ -125,6 +133,7 @@ abstract class AbstractBusinessObject implements IDAOFactory this.daoFactory = daoFactory; this.session = session; entityPropertiesConverter = converter; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObjectFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObjectFactory.java index 6ec9d6ace49b5c195441e078b0a29c74dd36b150..3b97550f3b6d5b130e604350f613eee05f1a1893 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObjectFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObjectFactory.java @@ -24,6 +24,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.IEntityOperationChecker; import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService; import ch.systemsx.cisd.openbis.generic.server.business.IServiceConversationClientManagerLocal; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * An <i>abstract</i> <i>Business Object</i> factory. @@ -44,6 +45,9 @@ public abstract class AbstractBusinessObjectFactory private IServiceConversationClientManagerLocal conversationClient; + @Resource(name = ComponentNames.MANAGED_PROPERTY_EVALUATOR_FACTORY) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + protected AbstractBusinessObjectFactory() { } @@ -51,13 +55,15 @@ public abstract class AbstractBusinessObjectFactory protected AbstractBusinessObjectFactory(final IDAOFactory daoFactory, IDataStoreServiceFactory dssFactory, IRelationshipService relationshipService, IEntityOperationChecker entityOperationChecker, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.daoFactory = daoFactory; this.dssFactory = dssFactory; this.relationshipService = relationshipService; this.entityOperationChecker = entityOperationChecker; this.conversationClient = conversationClient; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } protected final IDAOFactory getDaoFactory() @@ -85,4 +91,8 @@ public abstract class AbstractBusinessObjectFactory return conversationClient; } + protected IManagedPropertyEvaluatorFactory getManagedPropertyEvaluatorFactory() + { + return managedPropertyEvaluatorFactory; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java index 0186d8909d68a54642096081d72aa64c97b97b60..9f9170a1b671f7c3d047f8f0f90aba8f4703114b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java @@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -57,9 +58,10 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti public AbstractDataSetBusinessObject(IDAOFactory daoFactory, Session session, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, EntityKind.DATA_SET); + super(daoFactory, session, EntityKind.DATA_SET, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; this.conversationClient = conversationClient; } @@ -67,9 +69,10 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti public AbstractDataSetBusinessObject(IDAOFactory daoFactory, Session session, IEntityPropertiesConverter entityPropertiesConverter, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityPropertiesConverter); + super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; this.conversationClient = conversationClient; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java index 1563c2df65a1e4d41786df386bec6748378e1764..7b926f9a7123206b52da7091ecac741ad66f5549 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Generic operations on materials. @@ -31,15 +32,17 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; */ public class AbstractMaterialBusinessObject extends AbstractBusinessObject { - protected AbstractMaterialBusinessObject(final IDAOFactory daoFactory, final Session session) + protected AbstractMaterialBusinessObject(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, EntityKind.MATERIAL); + super(daoFactory, session, EntityKind.MATERIAL, managedPropertyEvaluatorFactory); } protected AbstractMaterialBusinessObject(final IDAOFactory daoFactory, final Session session, - final IEntityPropertiesConverter entityPropertiesConverter) + final IEntityPropertiesConverter entityPropertiesConverter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityPropertiesConverter); + super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory); } private static final String PROPERTY_TYPES = "materialType.materialTypePropertyTypesInternal"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java index b88636fe80e85e5b13d33653e905c2d5c56d2c2c..5458f9955514dcc5789e62a28db390eb6da09a6d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java @@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * An <i>abstract</i> {@link AbstractSampleIdentifierBusinessObject} extension for <i>Business @@ -81,18 +82,22 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi protected IEntityOperationChecker entityOperationChecker; AbstractSampleBusinessObject(final IDAOFactory daoFactory, final Session session, - IRelationshipService relationshipService, IEntityOperationChecker entityOperationChecker) + IRelationshipService relationshipService, + IEntityOperationChecker entityOperationChecker, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, EntityKind.SAMPLE); + super(daoFactory, session, EntityKind.SAMPLE, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; this.entityOperationChecker = entityOperationChecker; } AbstractSampleBusinessObject(final IDAOFactory daoFactory, final Session session, final IEntityPropertiesConverter entityPropertiesConverter, - IRelationshipService relationshipService, IEntityOperationChecker entityOperationChecker) + IRelationshipService relationshipService, + IEntityOperationChecker entityOperationChecker, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityPropertiesConverter); + super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; this.entityOperationChecker = entityOperationChecker; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java index 45648910e6267d798fcdc7fa2b4c06940587ffeb..9705934ffb01259faf69a49c880d81e3c758bf46 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -46,16 +47,17 @@ abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessOb private final SampleOwnerFinder sampleOwnerFinder; AbstractSampleIdentifierBusinessObject(final IDAOFactory daoFactory, final Session session, - EntityKind entityKind) + EntityKind entityKind, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityKind); + super(daoFactory, session, entityKind, managedPropertyEvaluatorFactory); sampleOwnerFinder = new SampleOwnerFinder(daoFactory, findPerson()); } public AbstractSampleIdentifierBusinessObject(IDAOFactory daoFactory, Session session, - IEntityPropertiesConverter converter) + IEntityPropertiesConverter converter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, converter); + super(daoFactory, session, converter, managedPropertyEvaluatorFactory); sampleOwnerFinder = new SampleOwnerFinder(daoFactory, findPerson()); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java index 645d10304f8c0a0651ebcb25ea9fa48934172db5..e59b75e951bb3492c8fa65c4b42a24dc4cf71aff 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java @@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType; import ch.systemsx.cisd.openbis.generic.shared.dto.EventType; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link IAttachmentBO}. @@ -43,9 +44,10 @@ public final class AttachmentBO extends AbstractBusinessObject implements IAttac private boolean dataChanged; - public AttachmentBO(final IDAOFactory daoFactory, final Session session) + public AttachmentBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java index 9a75cda25442509930eec8ef8ccf513c688016c2..a396e2b507e6dbabdae25d90ff7b546b3e0171bf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType; import ch.systemsx.cisd.openbis.generic.shared.dto.EventType; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * {@link IAuthorizationGroupBO} implementation. @@ -53,15 +54,18 @@ public class AuthorizationGroupBO extends AbstractBusinessObject implements IAut // For tests only @Private - AuthorizationGroupBO(IDAOFactory daoFactory, Session session, IAuthorizationGroupFactory factory) + AuthorizationGroupBO(IDAOFactory daoFactory, Session session, + IAuthorizationGroupFactory factory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.groupFactory = factory; } - public AuthorizationGroupBO(IDAOFactory daoFactory, Session session) + public AuthorizationGroupBO(IDAOFactory daoFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - this(daoFactory, session, new AuthorizationGroupFactory()); + this(daoFactory, session, new AuthorizationGroupFactory(), managedPropertyEvaluatorFactory); } interface IAuthorizationGroupFactory diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java index 06e633a22c877bd120bcbbfd05bf98b129f0bf62..7cf0a118d071b7c820448560d86d6d1b31ef698c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java @@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CorePlugin; import ch.systemsx.cisd.openbis.generic.shared.coreplugin.ICorePluginResourceLoader; import ch.systemsx.cisd.openbis.generic.shared.dto.CorePluginPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.CorePluginTranslator; /** @@ -52,9 +53,10 @@ public final class CorePluginTable extends AbstractBusinessObject implements ICo private final IMasterDataScriptRegistrationRunner masterDataScriptRunner; public CorePluginTable(IDAOFactory daoFactory, Session session, - IMasterDataScriptRegistrationRunner masterDataScriptRunner) + IMasterDataScriptRegistrationRunner masterDataScriptRunner, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.masterDataScriptRunner = masterDataScriptRunner; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java index a655d4db873184a23d88a654731e1acee3703bba..c54ac5e329fac8d81e80623de12e8740bad6350d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java @@ -73,6 +73,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.types.DataSetTypeCode; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -87,18 +88,21 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO public DataBO(IDAOFactory daoFactory, Session session, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, relationshipService, conversationClient); + super(daoFactory, session, relationshipService, conversationClient, + managedPropertyEvaluatorFactory); } public DataBO(IDAOFactory daoFactory, Session exampleSession, IEntityPropertiesConverter propertiesConverter, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(daoFactory, exampleSession, propertiesConverter, relationshipService, - conversationClient); + conversationClient, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java index 70195b80acb6b41c41fb06f856bdbffd53e349c5..3ab6f9248825a3fcc462d19487ec52a3d22a7205 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java @@ -71,6 +71,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -198,9 +199,11 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements public DataSetTable(IDAOFactory daoFactory, IDataStoreServiceFactory dssFactory, Session session, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, relationshipService, conversationClient); + super(daoFactory, session, relationshipService, conversationClient, + managedPropertyEvaluatorFactory); this.dssFactory = dssFactory; } @@ -449,7 +452,8 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements session.getSessionToken()); String sessionToken = dataStore.getSessionToken(); List<ExternalData> cleanDataSets = - DataSetTranslator.translate(list, "?", "?", new HashMap<Long, Set<Metaproject>>()); + DataSetTranslator.translate(list, "?", "?", new HashMap<Long, Set<Metaproject>>(), + managedPropertyEvaluatorFactory); service.uploadDataSetsToCIFEX(sessionToken, cleanDataSets, context); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletedDataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletedDataSetTable.java index d67d7f704a8f374e620e86d859893585532624a7..7837537e847b6a9a9a2c5bfe67176ccc5b516c96 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletedDataSetTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletedDataSetTable.java @@ -37,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletedDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * BO for handling {@link DataPE}. @@ -92,9 +93,11 @@ public final class DeletedDataSetTable extends AbstractDataSetBusinessObject imp public DeletedDataSetTable(final IDAOFactory daoFactory, IDataStoreServiceFactory dssFactory, final Session session, IRelationshipService relationshipService, - IServiceConversationClientManagerLocal conversationClient) + IServiceConversationClientManagerLocal conversationClient, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, relationshipService, conversationClient); + super(daoFactory, session, relationshipService, conversationClient, + managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java index 4ddea9adba7afe7993343f6e1ff87a634631aff6..7ac99d3004de61c976c03a3f3005f7f3066da27f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.IDeletablePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DeletionTranslator; /** @@ -43,9 +44,10 @@ public class DeletionTable extends AbstractBusinessObject implements IDeletionTa { private List<Deletion> deletions; - public DeletionTable(IDAOFactory daoFactory, Session session) + public DeletionTable(IDAOFactory daoFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java index 4f63068c47c2e4f7f72d26498570bd29233fa3f4..256b2f3259b35a164e89f83500f57312dcef6399 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java @@ -37,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Manipulations on {@link EntityTypePE} subclasses. @@ -66,9 +67,10 @@ public final class EntityTypeBO extends AbstractBusinessObject implements IEntit private EntityKind entityKind; - public EntityTypeBO(final IDAOFactory daoFactory, final Session session) + public EntityTypeBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } private ScriptPE getValidationScriptPE(EntityType entityType) @@ -80,8 +82,8 @@ public final class EntityTypeBO extends AbstractBusinessObject implements IEntit return null; } else { - ScriptPE script = getScriptDAO() - .tryFindByName(entityType.getValidationScript().getName()); + ScriptPE script = + getScriptDAO().tryFindByName(entityType.getValidationScript().getName()); if (script != null && entityType.isEntityKind(script.getEntityKind())) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java index 82a6d281f5ec3f2ae2a6e10f3046e5d1398808b5..eff254fe52c36c7d126701d6ccfb09d81b7d6928 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java @@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The unique {@link IEntityTypePropertyTypeBO} implementation. @@ -61,17 +62,21 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements @Private EntityTypePropertyTypeBO(IDAOFactory daoFactory, Session session, EntityKind entityKind, - IEntityPropertiesConverter converter) + IEntityPropertiesConverter converter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); propertiesConverter = converter; this.entityKind = entityKind; } - public EntityTypePropertyTypeBO(IDAOFactory daoFactory, Session session, EntityKind entityKind) + public EntityTypePropertyTypeBO(IDAOFactory daoFactory, Session session, EntityKind entityKind, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); - propertiesConverter = new EntityPropertiesConverter(entityKind, daoFactory); + super(daoFactory, session, managedPropertyEvaluatorFactory); + propertiesConverter = + new EntityPropertiesConverter(entityKind, daoFactory, + managedPropertyEvaluatorFactory); this.entityKind = entityKind; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java index cd5310285a716a3dab49c257544ebb411efd9f46..b13eb1afb6b6be64b0c2ac7b334683a43791551b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java @@ -62,6 +62,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -88,16 +89,18 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper private IRelationshipService relationshipService; public ExperimentBO(final IDAOFactory daoFactory, final Session session, - IRelationshipService relationshipService) + IRelationshipService relationshipService, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, EntityKind.EXPERIMENT); + super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; } ExperimentBO(final IDAOFactory daoFactory, final Session session, - final IEntityPropertiesConverter entityPropertiesConverter) + final IEntityPropertiesConverter entityPropertiesConverter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityPropertiesConverter); + super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory); } @SuppressWarnings("unused") diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java index 15d9937e7170ed9162dbc4bc27c843e8a629cbc5..1c6d06ea0d4faa534d2d753745516981545dff8b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java @@ -52,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link IExperimentTable}. @@ -69,15 +70,17 @@ public final class ExperimentTable extends AbstractBusinessObject implements IEx private IRelationshipService relationshipService; ExperimentTable(final IDAOFactory daoFactory, final Session session, - IEntityPropertiesConverter converter) + IEntityPropertiesConverter converter, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, converter); + super(daoFactory, session, converter, managedPropertyEvaluatorFactory); } public ExperimentTable(final IDAOFactory daoFactory, final Session session, - IRelationshipService relationshipService) + IRelationshipService relationshipService, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, EntityKind.EXPERIMENT); + super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java index 57e6a93ac04c663bdf79c7e81e171e6d4407ce75..8d77fe65f28ad9fc2459b37898c3024e9f265cb2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IExpressionUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewColumnOrFilter; import ch.systemsx.cisd.openbis.generic.shared.dto.GridCustomColumnPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Operations on grid custom columns. @@ -43,9 +44,10 @@ public class GridCustomColumnBO extends AbstractBusinessObject implements private GridCustomColumnPE column; - public GridCustomColumnBO(IDAOFactory daoFactory, Session session) + public GridCustomColumnBO(IDAOFactory daoFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java index a14dee35612264ed42632d1091f0453ab51b9b44..3258f7ec6d62bdc954e1916f095c00d2e15c8a85 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java @@ -26,6 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IExpressionUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewColumnOrFilter; import ch.systemsx.cisd.openbis.generic.shared.dto.GridCustomFilterPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Operations on grid custom filters. @@ -37,9 +38,10 @@ public class GridCustomFilterBO extends AbstractBusinessObject implements { private GridCustomFilterPE filter; - public GridCustomFilterBO(IDAOFactory daoFactory, Session session) + public GridCustomFilterBO(IDAOFactory daoFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java index 72ebf0509b31d19ddd416478d983feb31e8bbb68..06d5eb2e47109671caca1323c56630307a2c1144 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java @@ -41,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -54,9 +55,10 @@ public final class MaterialBO extends AbstractMaterialBusinessObject implements private boolean dataChanged; - public MaterialBO(final IDAOFactory daoFactory, final Session session) + public MaterialBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java index ca95b4098f8ee22bc04ae5177fe68940576fc7b4..ec84ea34ffddd6a2205b1b11574e6a58e2902b3b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java @@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link IMaterialTable}. @@ -54,18 +55,19 @@ public final class MaterialTable extends AbstractMaterialBusinessObject implemen private boolean dataChanged; - public MaterialTable(final IDAOFactory daoFactory, final Session session) + public MaterialTable(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Private // for tests only MaterialTable(final IDAOFactory daoFactory, final Session session, final IEntityPropertiesConverter entityPropertiesConverter, List<MaterialPE> materials, - boolean dataChanged) + boolean dataChanged, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, entityPropertiesConverter); + super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory); this.materials = materials; this.dataChanged = dataChanged; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java index 9cfbde1c9b1e9750dbcdd9b26bdff42d545f4faa..c168d3d944b04bec99957d55d07beb6ed2da3597 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java @@ -54,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * @author Pawel Glyzewski @@ -79,9 +80,10 @@ public class MetaprojectBO extends AbstractBusinessObject implements IMetaprojec private boolean dataChanged; public MetaprojectBO(final IDAOFactory daoFactory, IExperimentBO experimentBO, - ISampleBO sampleBO, IDataBO dataBO, IMaterialBO materialBO, final Session session) + ISampleBO sampleBO, IDataBO dataBO, IMaterialBO materialBO, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.experimentBO = experimentBO; this.sampleBO = sampleBO; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java index 87cf69a8cd22bc6ba8a83db78f39d513d9116fb1..c8b8f8bb701af92f8ff092608c2cb26d6f68a41a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java @@ -46,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -72,9 +73,10 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB private IRelationshipService relationshipService; public ProjectBO(final IDAOFactory daoFactory, final Session session, - IRelationshipService relationshipService) + IRelationshipService relationshipService, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.relationshipService = relationshipService; } @@ -128,8 +130,7 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB @Override public void define(ProjectIdentifier projectIdentifier, String description, - List<NewAttachment> attachmentsOrNull, String creatorId) - throws UserFailureException + List<NewAttachment> attachmentsOrNull, String creatorId) throws UserFailureException { assert projectIdentifier != null : "Unspecified project identifier."; this.project = createProject(projectIdentifier, description, attachmentsOrNull, creatorId); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java index 2637614715667ae8491b13bee418bba75a343f3c..ad588a256abc0162a6ca1ebebbb18e89379e870e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.XmlUtils; /** @@ -59,9 +60,10 @@ public final class PropertyTypeBO extends VocabularyBO implements IPropertyTypeB { private PropertyTypePE propertyTypePE; - public PropertyTypeBO(final IDAOFactory daoFactory, final Session session) + public PropertyTypeBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java index 702e93a897446fda995096b02648470aee92fd1d..012d778471684c6d6413a46b8c50c1c243f5a198 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java @@ -21,6 +21,7 @@ import java.util.List; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -32,9 +33,10 @@ public final class PropertyTypeTable extends AbstractBusinessObject implements I { private List<PropertyTypePE> propertyTypes; - public PropertyTypeTable(final IDAOFactory daoFactory, final Session session) + public PropertyTypeTable(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java index 084185940441892344d3b13676fa52bd2befef8e..8103b91c7ccd74ffbbe1486adb7b17c80d3362dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java @@ -29,13 +29,14 @@ import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Grantee; import ch.systemsx.cisd.openbis.generic.shared.dto.AuthorizationGroupPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; -import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.NewRoleAssignment; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link IRoleAssignmentTable}. We are using an interface @@ -52,9 +53,10 @@ public final class RoleAssignmentTable extends AbstractBusinessObject implements private TableMap<String, AuthorizationGroupPE> authorizationGroupsByCode; - public RoleAssignmentTable(final IDAOFactory daoFactory, final Session session) + public RoleAssignmentTable(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } private final PersonPE getPerson(final String userId) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java index 7a7e35e96834042dde1b6398033cf0bc6903c8e5..dd86c7683f29969e5c04de6d1ef20e85efe30ee6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -67,18 +68,21 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam public SampleBO(final IDAOFactory daoFactory, final Session session, final IRelationshipService relationshipService, - final IEntityOperationChecker entityOperationChecker) + final IEntityOperationChecker entityOperationChecker, + final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, relationshipService, entityOperationChecker); + super(daoFactory, session, relationshipService, entityOperationChecker, + managedPropertyEvaluatorFactory); } SampleBO(final IDAOFactory daoFactory, final Session session, final IEntityPropertiesConverter entityPropertiesConverter, IRelationshipService relationshipService, - final IEntityOperationChecker entityOperationChecker) + final IEntityOperationChecker entityOperationChecker, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(daoFactory, session, entityPropertiesConverter, relationshipService, - entityOperationChecker); + entityOperationChecker, managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java index 12e1e20afb42f238b5da9ad2edf9350d2b0030b6..01aaa2c7ad8beb9547d77a2ee5d031c0cea3a357 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java @@ -57,6 +57,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The unique {@link ISampleBO} implementation. @@ -74,9 +75,12 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I private boolean businessRulesChecked; public SampleTable(final IDAOFactory daoFactory, final Session session, - IRelationshipService relationshipService, IEntityOperationChecker entityOperationChecker) + IRelationshipService relationshipService, + IEntityOperationChecker entityOperationChecker, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session, relationshipService, entityOperationChecker); + super(daoFactory, session, relationshipService, entityOperationChecker, + managedPropertyEvaluatorFactory); } @Override @@ -455,8 +459,7 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I samplesByIdentifiers.get(sampleUpdates.getOldSampleIdentifierOrNull()); final List<AttachmentPE> attachments = new ArrayList<AttachmentPE>(); prepareBatchUpdate(sample, attachments, sampleUpdates, sampleOwnerCache, - experimentCache, - propertiesCache); + experimentCache, propertiesCache); attachmentListsOrNull.add(attachments); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java index 4ae6ed65b5ea9bccda2c1aa5beed0c3689c2acc4..aa3441f3d8d9c5b2d0e2ad0d38df38504a44d7e5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java @@ -27,11 +27,13 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calcu import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IScriptUpdates; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.managed_property.JythonManagedPropertyEvaluator; /** @@ -47,16 +49,18 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO private final IScriptFactory scriptFactory; - public ScriptBO(final IDAOFactory daoFactory, final Session session) + public ScriptBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - this(daoFactory, session, new ScriptFactory()); + this(daoFactory, session, new ScriptFactory(), managedPropertyEvaluatorFactory); } @Private // for testing - ScriptBO(final IDAOFactory daoFactory, final Session session, IScriptFactory scriptFactory) + ScriptBO(final IDAOFactory daoFactory, final Session session, IScriptFactory scriptFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.scriptFactory = scriptFactory; } @@ -106,7 +110,8 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO assert script != null : "Script not defined"; try { - checkScriptCompilation(script.getScriptType(), script.getScript()); + checkScriptCompilation(script.getScriptType(), script.getPluginType(), + script.getScript()); getScriptDAO().createOrUpdate(script); } catch (final DataAccessException e) { @@ -125,6 +130,7 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO script.setRegistrator(findPerson()); script.setScript(newScript.getScript()); script.setScriptType(newScript.getScriptType()); + script.setPluginType(newScript.getPluginType()); script.setEntityKind(newScript.getEntityKind()); } @@ -135,11 +141,13 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO script.setName(updates.getName()); script.setDescription(updates.getDescription()); boolean scriptChanged = false; - if (script.getScript().equals(updates.getScript()) == false) + if (script.getScript() != updates.getScript() + && script.getScript().equals(updates.getScript()) == false) { scriptChanged = true; script.setScript(updates.getScript()); - checkScriptCompilation(script.getScriptType(), updates.getScript()); + checkScriptCompilation(script.getScriptType(), script.getPluginType(), + updates.getScript()); } getScriptDAO().createOrUpdate(script); @@ -154,9 +162,14 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO } } - private void checkScriptCompilation(ScriptType scriptType, String scriptExpression) - throws EvaluatorException + private void checkScriptCompilation(ScriptType scriptType, PluginType pluginType, + String scriptExpression) throws EvaluatorException { + if (pluginType == PluginType.PREDEPLOYED) + { + return; + } + if (scriptType == ScriptType.MANAGED_PROPERTY) { new JythonManagedPropertyEvaluator(scriptExpression); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java index 0f25467840c249f43989d633d6dd87c2473b2d11..10f6189a51ac11ca1d431327475cbc25b9dfbcc4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link ISpaceBO}. We are using an interface here to keep @@ -48,9 +49,10 @@ public final class SpaceBO extends AbstractBusinessObject implements ISpaceBO private SpacePE space; - public SpaceBO(final IDAOFactory daoFactory, final Session session) + public SpaceBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java index f62f4b508464b894c63a8a5841ba42bdb9347015..c98c76082304cf018818fed04a1d572b11794443 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java @@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * @author Piotr Buczek @@ -54,9 +55,10 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO private DeletionPE deletion; - public TrashBO(IDAOFactory daoFactory, ICommonBusinessObjectFactory boFactory, Session session) + public TrashBO(IDAOFactory daoFactory, ICommonBusinessObjectFactory boFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); this.boFactory = boFactory; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java index f8c4ace72841d10b4f8d65c6319a2d20b9c2528c..a6b4ed35202c4fa5b29d9ea75c19d8afbf331a7c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java @@ -58,6 +58,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermWithStats; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -77,16 +78,18 @@ public class VocabularyBO extends AbstractBusinessObject implements IVocabularyB private VocabularyPE vocabularyPE; - public VocabularyBO(final IDAOFactory daoFactory, final Session session) + public VocabularyBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } // For tests only @Private - VocabularyBO(final IDAOFactory daoFactory, final Session session, VocabularyPE vocabulary) + VocabularyBO(final IDAOFactory daoFactory, final Session session, VocabularyPE vocabulary, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); vocabularyPE = vocabulary; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java index 71cf4e2fee6d2e6983facaf96ac1c82312ab2c5c..42e9632a3b6b4310f691884a8d2fc83946547c98 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java @@ -27,6 +27,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * The only productive implementation of {@link IVocabularyTermBO}. @@ -37,9 +38,10 @@ public final class VocabularyTermBO extends AbstractBusinessObject implements IV { private VocabularyTermPE vocabularyTermPE; - public VocabularyTermBO(final IDAOFactory daoFactory, final Session session) + public VocabularyTermBO(final IDAOFactory daoFactory, final Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - super(daoFactory, session); + super(daoFactory, session, managedPropertyEvaluatorFactory); } // 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 d1ba3b17f4aae17701e168ecf974d44f6df01c11..b3e13cbaf88ca3a5604dabcc5b19eae5f3aebdc9 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 @@ -58,7 +58,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluator; -import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator; /** @@ -111,15 +111,20 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert private final IPropertyPlaceholderCreator placeholderCreator; - public EntityPropertiesConverter(final EntityKind entityKind, final IDAOFactory daoFactory) + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public EntityPropertiesConverter(final EntityKind entityKind, final IDAOFactory daoFactory, + final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - this(entityKind, daoFactory, new PropertyValidator(), new PlaceholderPropertyCreator()); + this(entityKind, daoFactory, new PropertyValidator(), new PlaceholderPropertyCreator(), + managedPropertyEvaluatorFactory); } @Private EntityPropertiesConverter(final EntityKind entityKind, final IDAOFactory daoFactory, final IPropertyValueValidator propertyValueValidator, - IPropertyPlaceholderCreator placeholderCreator) + IPropertyPlaceholderCreator placeholderCreator, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { assert entityKind != null : "Unspecified entity kind."; assert daoFactory != null : "Unspecified DAO factory."; @@ -130,6 +135,7 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert this.propertyValueValidator = propertyValueValidator; this.placeholderCreator = placeholderCreator; this.complexPropertyValueHelper = new ComplexPropertyValueHelper(daoFactory, null); + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } private final Set<String> getDynamicProperties(final EntityTypePE entityTypePE) @@ -247,7 +253,8 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert new ArrayList<ExtendedEntityTypePropertyType>(); for (EntityTypePropertyTypePE entityTypePropertyTypePE : entityPropertyTypes) { - result.add(new ExtendedEntityTypePropertyType(entityTypePropertyTypePE)); + result.add(new ExtendedEntityTypePropertyType(entityTypePropertyTypePE, + managedPropertyEvaluatorFactory)); } return result; } @@ -561,13 +568,14 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert private IManagedPropertyEvaluator evaluator; - ExtendedEntityTypePropertyType(EntityTypePropertyTypePE entityTypePropertyTypePE) + ExtendedEntityTypePropertyType(EntityTypePropertyTypePE entityTypePropertyTypePE, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.entityTypePropertyTypePE = entityTypePropertyTypePE; if (entityTypePropertyTypePE.isManaged()) { evaluator = - ManagedPropertyEvaluatorFactory + managedPropertyEvaluatorFactory .createManagedPropertyEvaluator(entityTypePropertyTypePE); inputWidgetDescriptions = evaluator.getInputWidgetDescriptions(); } else diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java index 7817495c91411006fc843e39273634e361db57be..a8483c4b7f0f2c330271d2cb161a3b605a71a7bb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java @@ -44,16 +44,18 @@ import ch.systemsx.cisd.openbis.common.conversation.context.ServiceConversations import ch.systemsx.cisd.openbis.common.conversation.progress.IServiceConversationProgressListener; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.DynamicPropertyEvaluator; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyCalculatorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyEvaluator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityAdaptorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator.IValidationRequestDelegate; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.EntityValidatorFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.IEntityValidatorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.api.IEntityValidator; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * {@link Interceptor} which reacts to creation and update of entities, and calls the validation @@ -73,11 +75,22 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements private IDAOFactory daoFactory; + private final IEntityValidatorFactory entityValidationFactory; + + private final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory; + + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public EntityValidationInterceptor(IHibernateTransactionManagerCallback callback, - IDAOFactory daoFactory) + IDAOFactory daoFactory, IEntityValidatorFactory entityValidationFactory, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.callback = callback; this.daoFactory = daoFactory; + this.entityValidationFactory = entityValidationFactory; + this.dynamicPropertyCalculatorFactory = dynamicPropertyCalculatorFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; initializeLists(); totalEntitiesToValidateCount = 0; @@ -156,10 +169,11 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements private boolean isCached(Session session, EntityIdentifier identifier) { - return ((SessionImpl) session).getEntityUsingInterceptor(new EntityKey(identifier - .getId(), ((SessionFactoryImplementor) daoFactory.getSessionFactory()) - .getEntityPersister(identifier.getEntityClass().getName()), - EntityMode.POJO)) != null; + return ((SessionImpl) session) + .getEntityUsingInterceptor(new EntityKey(identifier.getId(), + ((SessionFactoryImplementor) daoFactory.getSessionFactory()) + .getEntityPersister(identifier.getEntityClass().getName()), + EntityMode.POJO)) != null; } private Collection<EntityIdentifier> cachedEntities(Session session) @@ -183,8 +197,10 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements for (EntityIdentifier identifier : cachedEntities(session)) { - validateEntity(tx, (IEntityInformationWithPropertiesHolder) session.get( - identifier.getEntityClass(), identifier.getId())); + validateEntity( + tx, + (IEntityInformationWithPropertiesHolder) session.get( + identifier.getEntityClass(), identifier.getId())); if (isRolledBack) { return; @@ -230,8 +246,7 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements @Override public int compare(EntityIdentifier arg0, EntityIdentifier arg1) { - return arg0.getKind().toString().compareTo( - arg1.getKind().toString()); + return arg0.getKind().toString().compareTo(arg1.getKind().toString()); } }); @@ -259,8 +274,7 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements } List<EntityIdentifier> list = new ArrayList<EntityIdentifier>(); EntityKind kind = ids.get(index).getKind(); - while (list.size() < batchSize - && index < ids.size() + while (list.size() < batchSize && index < ids.size() && ids.get(index).getKind().equals(kind)) { list.add(ids.get(index)); @@ -284,7 +298,7 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements boolean isNewEntity = newEntities.contains(new EntityIdentifier(entity)); IEntityValidator entityValidator = - EntityValidatorFactory.createEntityValidator(entity.getEntityType(), this); + entityValidationFactory.createEntityValidator(entity.getEntityType(), this); if (entityValidator != null) { try @@ -336,7 +350,9 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements private String calculate(IEntityValidator entityValidator, IEntityInformationWithPropertiesHolder entity, boolean isNewEntity) { - IDynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator(daoFactory, null); + IDynamicPropertyEvaluator evaluator = + new DynamicPropertyEvaluator(daoFactory, null, dynamicPropertyCalculatorFactory, + managedPropertyEvaluatorFactory); IEntityAdaptor adaptor = EntityAdaptorFactory.create(entity, evaluator, daoFactory.getSessionFactory() .getCurrentSession()); @@ -364,8 +380,7 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements if (false == validatedEntities.add(new EntityIdentifier(entity))) { throw new IllegalStateException( - "Programming error - trying to validate the same entity twice (" - + entity + ")"); + "Programming error - trying to validate the same entity twice (" + entity + ")"); } if (false == entitiesToValidate.remove(new EntityIdentifier(entity))) @@ -447,8 +462,7 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements if (o instanceof EntityIdentifier) { EntityIdentifier e = (EntityIdentifier) o; - return (e.code.equals(code)) - && e.kind.equals(kind); + return (e.code.equals(code)) && e.kind.equals(kind); } else { throw new IllegalArgumentException(o.toString()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java index a5cb10f5014d1cd1f5c4e72b239a5a0396431d94..5939d307817508fda429921bffb62172c4e3598e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/OpenBISHibernateTransactionManager.java @@ -33,7 +33,10 @@ import org.springframework.transaction.support.DefaultTransactionStatus; import ch.systemsx.cisd.openbis.generic.server.dataaccess.HibernateInterceptorsWrapper; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyCalculatorFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.IEntityValidatorFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * An implementation of {@link HibernateTransactionManager} that: @@ -55,9 +58,21 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana private DynamicPropertiesInterceptor dynamicPropertiesInterceptor; - public OpenBISHibernateTransactionManager(IDAOFactory daoFactory) + private IEntityValidatorFactory entityValidationFactory; + + private IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory; + + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public OpenBISHibernateTransactionManager(IDAOFactory daoFactory, + IEntityValidatorFactory entityValidationFactory, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.daoFactory = daoFactory; + this.entityValidationFactory = entityValidationFactory; + this.dynamicPropertyCalculatorFactory = dynamicPropertyCalculatorFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } public void setDynamicPropertiesInterceptor( @@ -103,7 +118,8 @@ public class OpenBISHibernateTransactionManager extends HibernateTransactionMana public Interceptor getEntityInterceptor() throws IllegalStateException, BeansException { EntityValidationInterceptor entityValidationInterceptor = - new EntityValidationInterceptor(this, daoFactory); + new EntityValidationInterceptor(this, daoFactory, entityValidationFactory, + dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); return new HibernateInterceptorsWrapper(dynamicPropertiesInterceptor, entityValidationInterceptor); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java index b415001a1df42a6fe4da3e27c248a7240e0b4860..c9ac7c4bcb6425033d2c4932ee71fcab87e39e92 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java @@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropert import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * A default {@link IBatchDynamicPropertyEvaluator}. @@ -72,11 +73,19 @@ final class DefaultBatchDynamicPropertyEvaluator implements IBatchDynamicPropert private final IDAOFactory daoFactory; - DefaultBatchDynamicPropertyEvaluator(final int batchSize, IDAOFactory daoFactory) + private final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory; + + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + DefaultBatchDynamicPropertyEvaluator(final int batchSize, IDAOFactory daoFactory, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { assert batchSize > -1 : "Batch size can not be negative."; this.batchSize = batchSize; this.daoFactory = daoFactory; + this.dynamicPropertyCalculatorFactory = dynamicPropertyCalculatorFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } private DynamicPropertyEvaluator createEvaluator(final Session hibernateSession) @@ -88,7 +97,7 @@ final class DefaultBatchDynamicPropertyEvaluator implements IBatchDynamicPropert { return hibernateSession; } - }); + }, dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluationRunnable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluationRunnable.java index 23e9c88354b44c18d300555bae3f878924a3b235..2d6b8d9ba2a8aab9cb1ebf633dbc95030506e950 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluationRunnable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluationRunnable.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDynamicPropertyEvalua import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * @author Piotr Buczek @@ -58,12 +59,16 @@ public final class DynamicPropertyEvaluationRunnable extends HibernateDaoSupport public DynamicPropertyEvaluationRunnable(final SessionFactory sessionFactory, final IDAOFactory daoFactory, final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler, - final IDynamicPropertyEvaluationSchedulerWithQueue evaluationQueue) + final IDynamicPropertyEvaluationSchedulerWithQueue evaluationQueue, + final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.fullTextIndexUpdateScheduler = fullTextIndexUpdateScheduler; this.evaluationQueue = evaluationQueue; setSessionFactory(sessionFactory); - evaluator = new DefaultBatchDynamicPropertyEvaluator(BATCH_SIZE, daoFactory); + evaluator = + new DefaultBatchDynamicPropertyEvaluator(BATCH_SIZE, daoFactory, + dynamicPropertyCalculatorFactory, managedPropertyEvaluatorFactory); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java index 29a73d2670fd0f28c332871e37ff5fb64510230f..2379c0daa6985c200dc5ae27b35a82232ea90cd5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java @@ -33,7 +33,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConver import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConverter.IHibernateSessionProvider; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.DynamicPropertyCalculatorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityAdaptorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.IDynamicPropertyCalculator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; @@ -45,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Default implementation of {@link IDynamicPropertyEvaluator}. For efficient evaluation of @@ -59,8 +59,9 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator public static final String ERROR_PREFIX = "ERROR: "; - private final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory = - new DynamicPropertyCalculatorFactory(); + private final IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory; + + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; /** path of evaluation - used to generate meaningful error message for cyclic dependencies */ private final List<EntityTypePropertyTypePE> evaluationPath = @@ -69,12 +70,16 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator private EntityPropertiesConverterDelegatorFacade entityPropertiesConverter; public DynamicPropertyEvaluator(IDAOFactory daoFactory, - IHibernateSessionProvider customSessionProviderOrNull) + IHibernateSessionProvider customSessionProviderOrNull, + IDynamicPropertyCalculatorFactory dynamicPropertyCalculatorFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { assert daoFactory != null; this.entityPropertiesConverter = new EntityPropertiesConverterDelegatorFacade(daoFactory, - customSessionProviderOrNull); + customSessionProviderOrNull, managedPropertyEvaluatorFactory); + this.dynamicPropertyCalculatorFactory = dynamicPropertyCalculatorFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } @Override @@ -195,7 +200,8 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator private final ComplexPropertyValueHelper complexPropertyValueHelper; public EntityPropertiesConverterDelegatorFacade(IDAOFactory daoFactory, - IHibernateSessionProvider customSessionProviderOrNull) + IHibernateSessionProvider customSessionProviderOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.complexPropertyValueHelper = new EntityPropertiesConverter.ComplexPropertyValueHelper(daoFactory, @@ -203,7 +209,7 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator for (EntityKind entityKind : EntityKind.values()) { convertersByEntityKind.put(entityKind, new EntityPropertiesConverter(entityKind, - daoFactory)); + daoFactory, managedPropertyEvaluatorFactory)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/IDynamicPropertyCalculatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/IDynamicPropertyCalculatorFactory.java index da8697f94d99d3e8b6fb369bcb11b47d3c90d259..4bf642debcacd78768487b8ae86651367a774655 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/IDynamicPropertyCalculatorFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/IDynamicPropertyCalculatorFactory.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property; +import java.util.List; + import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.IDynamicPropertyCalculator; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; @@ -25,4 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; public interface IDynamicPropertyCalculatorFactory { public IDynamicPropertyCalculator getCalculator(EntityTypePropertyTypePE etpt); + + public List<String> listPredeployedPlugins(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/AbstractEntityAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/AbstractEntityAdaptor.java index 3003430cc7fa55ba6e8aecef6ec82440b43b1322..6e09defbcba4f70c43dc1319d6e8d148f3f2206d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/AbstractEntityAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/AbstractEntityAdaptor.java @@ -97,36 +97,42 @@ public class AbstractEntityAdaptor implements IEntityAdaptor for (EntityPropertyPE property : propertiesHolder.getProperties()) { - EntityTypePropertyTypePE etpt = property.getEntityTypePropertyType(); - final PropertyTypePE propertyType = etpt.getPropertyType(); - final String propertyTypeCode = propertyType.getCode(); - if (etpt.isDynamic()) + addProperty(adaptEntityProperty(property, this, evaluator)); + } + } + + public static IEntityPropertyAdaptor adaptEntityProperty(EntityPropertyPE property, + IEntityAdaptor entityAdaptor, IDynamicPropertyEvaluator evaluator) + { + EntityTypePropertyTypePE etpt = property.getEntityTypePropertyType(); + final PropertyTypePE propertyType = etpt.getPropertyType(); + final String propertyTypeCode = propertyType.getCode(); + if (etpt.isDynamic()) + { + return new DynamicPropertyAdaptor(propertyTypeCode, entityAdaptor, property, evaluator); + } else + { + final String value; + if (property.getMaterialValue() != null) + { + final MaterialPE material = property.getMaterialValue(); + value = + MaterialIdentifier.print(material.getCode(), material.getEntityType() + .getCode()); + } else if (property.getVocabularyTerm() != null) + { + value = property.getVocabularyTerm().getCode(); + } else + { + value = property.getValue(); + } + if (propertyType.getTransformation() == null) { - addProperty(new DynamicPropertyAdaptor(propertyTypeCode, this, property, evaluator)); + return new BasicPropertyAdaptor(propertyTypeCode, value, property); } else { - final String value; - if (property.getMaterialValue() != null) - { - final MaterialPE material = property.getMaterialValue(); - value = - MaterialIdentifier.print(material.getCode(), material.getEntityType() - .getCode()); - } else if (property.getVocabularyTerm() != null) - { - value = property.getVocabularyTerm().getCode(); - } else - { - value = property.getValue(); - } - if (propertyType.getTransformation() == null) - { - addProperty(new BasicPropertyAdaptor(propertyTypeCode, value, property)); - } else - { - addProperty(new XmlPropertyAdaptor(propertyTypeCode, value, property, - propertyType.getTransformation())); - } + return new XmlPropertyAdaptor(propertyTypeCode, value, property, + propertyType.getTransformation()); } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/DynamicPropertyCalculatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/DynamicPropertyCalculatorFactory.java index 46460c7f90ca30a2dc3155485b772b4cb919d668..67ddea02c235f53eba49841a44298fc6ab7964f6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/DynamicPropertyCalculatorFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/DynamicPropertyCalculatorFactory.java @@ -16,18 +16,77 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import ch.ethz.cisd.hotdeploy.PluginMapHolder; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.shared.basic.string.StringUtils; +import ch.systemsx.cisd.openbis.generic.server.IHotDeploymentController; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDynamicPropertyCalculatorFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; /** + * The class is responsible for getting a dynamic property calculator. + * * @author Pawel Glyzewski */ public class DynamicPropertyCalculatorFactory implements IDynamicPropertyCalculatorFactory { + private PluginMapHolder<IDynamicPropertyCalculator> predeployedPlugins; + + public DynamicPropertyCalculatorFactory(IHotDeploymentController hotDeploymentController, + String pluginDirectoryPath) + { + if (false == StringUtils.isBlank(pluginDirectoryPath)) + { + hotDeploymentController.addPluginDirectory(new File(pluginDirectoryPath)); + this.predeployedPlugins = + hotDeploymentController.getPluginMap(IDynamicPropertyCalculator.class); + } else + { + this.predeployedPlugins = null; + } + } + @Override /** Returns a calculator for given script (creates a new one if nothing is found in cache). */ public IDynamicPropertyCalculator getCalculator(EntityTypePropertyTypePE etpt) { - return JythonDynamicPropertyCalculator.create(etpt.getScript().getScript()); + switch (etpt.getScript().getPluginType()) + { + case JYTHON: + return JythonDynamicPropertyCalculator.create(etpt.getScript().getScript()); + case PREDEPLOYED: + if (predeployedPlugins == null) + { + throw new UserFailureException( + "Predeployed dynamic property calculator plugins are not configured properly."); + } + IDynamicPropertyCalculator dynamicPropertyCalculator = + predeployedPlugins.tryGet(etpt.getScript().getName()); + if (dynamicPropertyCalculator == null) + { + throw new UserFailureException("Couldn't find plugin named '" + + etpt.getScript().getName() + "'."); + } + + return dynamicPropertyCalculator; + } + + return null; + } + + @Override + public List<String> listPredeployedPlugins() + { + if (predeployedPlugins == null) + { + return Collections.emptyList(); + } + + return new ArrayList<String>(predeployedPlugins.getPluginNames()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/EntityValidatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/EntityValidatorFactory.java index 93066cc3e8701754c75bed4354c106a5e3af3c4a..b7757df6ee293b0e93e198db7fdaa8ab5ac6b6a1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/EntityValidatorFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/EntityValidatorFactory.java @@ -16,29 +16,95 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import ch.ethz.cisd.hotdeploy.PluginMapHolder; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.shared.basic.string.StringUtils; +import ch.systemsx.cisd.openbis.generic.server.IHotDeploymentController; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator.IValidationRequestDelegate; import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.api.IEntityValidator; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; /** * @author Pawel Glyzewski */ -public class EntityValidatorFactory +public class EntityValidatorFactory implements IEntityValidatorFactory { - public static IEntityValidator createEntityValidator(EntityTypePE entityTypePE, + private final PluginMapHolder<IEntityValidator> predeployedPlugins; + + public EntityValidatorFactory(IHotDeploymentController hotDeploymentController, + String pluginDirectoryPath) + { + if (false == StringUtils.isBlank(pluginDirectoryPath)) + { + hotDeploymentController.addPluginDirectory(new File(pluginDirectoryPath)); + this.predeployedPlugins = hotDeploymentController.getPluginMap(IEntityValidator.class); + } else + { + this.predeployedPlugins = null; + } + } + + @Override + public IEntityValidator createEntityValidator(EntityTypePE entityTypePE, IValidationRequestDelegate<INonAbstractEntityAdapter> validationRequestedDelegate) { ScriptPE scriptPE = entityTypePE.getValidationScript(); if (scriptPE != null) { - IEntityValidator validator = new JythonEntityValidator(scriptPE); + IEntityValidator validator = + createEntityValidator(scriptPE.getPluginType(), scriptPE.getName(), + scriptPE.getScript()); validator.init(validationRequestedDelegate); return validator; } return null; } + + @Override + public IEntityValidator createEntityValidator(PluginType pluginType, String scriptName, + String script) + { + switch (pluginType) + { + case JYTHON: + return new JythonEntityValidator(script); + case PREDEPLOYED: + if (predeployedPlugins == null) + { + throw new UserFailureException( + "Predeployed entity validation plugins are not configured properly."); + } + IEntityValidator entityValidator = predeployedPlugins.tryGet(scriptName); + if (entityValidator == null) + { + throw new UserFailureException("Couldn't find plugin named '" + scriptName + + "'."); + } + + return entityValidator; + } + + return null; + } + + @Override + public List<String> listPredeployedPlugins() + { + if (predeployedPlugins == null) + { + return Collections.emptyList(); + } + + return new ArrayList<String>(predeployedPlugins.getPluginNames()); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/IEntityValidatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/IEntityValidatorFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f02cfc2ead50b565b85c52db88df7b13e0c9a853 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/IEntityValidatorFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation; + +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator.IValidationRequestDelegate; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.api.IEntityValidator; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; +import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; + +/** + * @author Pawel Glyzewski + */ +public interface IEntityValidatorFactory +{ + public IEntityValidator createEntityValidator(EntityTypePE entityTypePE, + IValidationRequestDelegate<INonAbstractEntityAdapter> validationRequestedDelegate); + + public IEntityValidator createEntityValidator(PluginType pluginType, String scriptName, + String script); + + public List<String> listPredeployedPlugins(); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/JythonEntityValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/JythonEntityValidator.java index 3dfd4b6f904ba3a12935ba28113688140e40ec6c..8dc44b078f70d45a3b3f219d8ab13dc9d531a91c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/JythonEntityValidator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/JythonEntityValidator.java @@ -19,16 +19,17 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonEntityValidationCalculator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.api.IEntityValidator; -import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; /** + * Jython implementation of entity validators. + * * @author Pawel Glyzewski */ public class JythonEntityValidator extends AbstractEntityValidator implements IEntityValidator { - private final ScriptPE script; + private final String script; - public JythonEntityValidator(ScriptPE script) + public JythonEntityValidator(String script) { this.script = script; } @@ -37,8 +38,7 @@ public class JythonEntityValidator extends AbstractEntityValidator implements IE public String validate(IEntityAdaptor entity, boolean isNew) { JythonEntityValidationCalculator calculator = - JythonEntityValidationCalculator.create(script.getScript(), - validationRequestedDelegate); + JythonEntityValidationCalculator.create(script, validationRequestedDelegate); return calculator.eval(entity, isNew); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/deployment_examples/.gitignore b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/entity_validation/deployment_examples/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java index 7e55bcb392332305265913a4f39cd1dd325e43c5..887a5062a8dbf743e6ef8faa74934a14adefec2c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java @@ -1511,4 +1511,9 @@ public interface ICommonServer extends IServer public Metaproject updateMetaproject(String sessionToken, IMetaprojectId metaprojectId, IMetaprojectUpdates updates); + /** + * Lists all the predeployed plugin names for given script type. + */ + @Transactional(readOnly = true) + public List<String> listPredeployedPlugins(String sessionToken, ScriptType scriptType); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DynamicPropertyEvaluationInfo.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DynamicPropertyEvaluationInfo.java index 2ab8ea28205ccfada0c631ebd0706ad3ee8c1bc0..c236779b5221ee461857bba7152ee9ef04b441c3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DynamicPropertyEvaluationInfo.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DynamicPropertyEvaluationInfo.java @@ -23,16 +23,21 @@ public class DynamicPropertyEvaluationInfo extends BasicEntityDescription { private static final long serialVersionUID = ServiceVersionHolder.VERSION; + private String sciptName; + private String script; + private PluginType pluginType; + public DynamicPropertyEvaluationInfo() { } public DynamicPropertyEvaluationInfo(EntityKind entityKind, String entityIdentifier, - String script) + PluginType pluginType, String scriptName, String script) { super(entityKind, entityIdentifier); + this.sciptName = scriptName; this.script = script; } @@ -46,4 +51,23 @@ public class DynamicPropertyEvaluationInfo extends BasicEntityDescription this.script = script; } + public PluginType getPluginType() + { + return pluginType; + } + + public void setPluginType(PluginType pluginType) + { + this.pluginType = pluginType; + } + + public String getSciptName() + { + return sciptName; + } + + public void setSciptName(String sciptName) + { + this.sciptName = sciptName; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityValidationEvaluationInfo.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityValidationEvaluationInfo.java index 1eaa0962b7ce650fa1e3356e580246ac3c260bd0..4a3d14c30a0e465a6e68a74524b754c95e74823e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityValidationEvaluationInfo.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityValidationEvaluationInfo.java @@ -23,8 +23,12 @@ public class EntityValidationEvaluationInfo extends BasicEntityDescription { private static final long serialVersionUID = ServiceVersionHolder.VERSION; + private String scriptName; + private String script; + private PluginType pluginType; + private boolean isNew; public EntityValidationEvaluationInfo() @@ -32,10 +36,12 @@ public class EntityValidationEvaluationInfo extends BasicEntityDescription } public EntityValidationEvaluationInfo(EntityKind entityKind, String entityIdentifier, - boolean isNew, String script) + boolean isNew, PluginType pluginType, String scriptName, String script) { super(entityKind, entityIdentifier); this.script = script; + this.scriptName = scriptName; + this.pluginType = pluginType; this.isNew = isNew; } @@ -59,4 +65,23 @@ public class EntityValidationEvaluationInfo extends BasicEntityDescription this.isNew = isNew; } + public PluginType getPluginType() + { + return pluginType; + } + + public void setPluginType(PluginType pluginType) + { + this.pluginType = pluginType; + } + + public String getScriptName() + { + return scriptName; + } + + public void setScriptName(String scriptName) + { + this.scriptName = scriptName; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PluginType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PluginType.java new file mode 100644 index 0000000000000000000000000000000000000000..20b0e0c61b16427eb94731b8ea29cc2407ea35f6 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PluginType.java @@ -0,0 +1,39 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.basic.dto; + +import java.io.Serializable; + +/** + * @author Pawel Glyzewski + */ +public enum PluginType implements Serializable +{ + JYTHON("Jython Script Plugin"), PREDEPLOYED("Predeployed Plugin"); + + private final String description; + + private PluginType(final String description) + { + this.description = description; + } + + public final String getDescription() + { + return description; + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Script.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Script.java index 25162845da8736fd0af06b290593ef72e2ea41a3..fc6474fd39d053efaf5e3d5ad80d3d9d6d41d0dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Script.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Script.java @@ -42,6 +42,8 @@ public class Script extends AbstractRegistrationHolder implements Comparable<Scr private EntityKind entityKind; + private PluginType pluginType; + public Script() { } @@ -115,6 +117,16 @@ public class Script extends AbstractRegistrationHolder implements Comparable<Scr this.scriptType = scriptType; } + public PluginType getPluginType() + { + return pluginType; + } + + public void setPluginType(PluginType pluginType) + { + this.pluginType = pluginType; + } + @Override public String toString() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ColumnNames.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ColumnNames.java index e26c2ff775b470bb5c7dbac61646235577c177fd..6afd5f58f8631cc978f6a3f084a20d0244bbc036 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ColumnNames.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ColumnNames.java @@ -310,6 +310,8 @@ public final class ColumnNames public static final String SCRIPT_TYPE = "script_type"; + public static final String PLUGIN_TYPE = "plugin_type"; + public static final String PRESENT_IN_ARCHIVE = "present_in_archive"; public static final String STORAGE_CONFIRMATION = "storage_confirmation"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ScriptPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ScriptPE.java index 951b17a22b572ef1821b2548551847daf746c409..f23146e4aa3ca5f8cba3c7cf23480f25a4d66f00 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ScriptPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ScriptPE.java @@ -45,6 +45,7 @@ import ch.systemsx.cisd.common.collection.UnmodifiableListDecorator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; @@ -65,6 +66,8 @@ public class ScriptPE extends HibernateAbstractRegistrationHolder implements IId private ScriptType scriptType; + private PluginType pluginType; + private String name; private String description; @@ -144,7 +147,6 @@ public class ScriptPE extends HibernateAbstractRegistrationHolder implements IId } @Column(name = ColumnNames.SCRIPT_COLUMN) - @NotNull(message = ValidationMessages.SCRIPT_NOT_NULL_MESSAGE) @Length(min = 1, message = ValidationMessages.EXPRESSION_LENGTH_MESSAGE) public String getScript() { @@ -297,6 +299,19 @@ public class ScriptPE extends HibernateAbstractRegistrationHolder implements IId this.scriptType = scriptType; } + @NotNull(message = ValidationMessages.PLUGIN_TYPE_NOT_NULL_MESSAGE) + @Column(name = ColumnNames.PLUGIN_TYPE) + @Enumerated(EnumType.STRING) + public PluginType getPluginType() + { + return pluginType; + } + + public void setPluginType(PluginType pluginType) + { + this.pluginType = pluginType; + } + @Transient public boolean isDynamic() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ValidationMessages.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ValidationMessages.java index 04d498fa5e9d732590112f8d5da443989fc52f5c..8d31edc9be63a4b3a289808eeaefdcb049d40c3c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ValidationMessages.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ValidationMessages.java @@ -235,6 +235,8 @@ public final class ValidationMessages public static final String SCRIPT_TYPE_NOT_NULL_MESSAGE = "Script Type" + CAN_NOT_BE_NULL; + public static final String PLUGIN_TYPE_NOT_NULL_MESSAGE = "Plugin Type" + CAN_NOT_BE_NULL; + public static final String REGISTRATION_ID_NOT_NULL_MESSAGE = "Regirtation id" + CAN_NOT_BE_NULL; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluator.java index e8cc5562c56cabc0a53757ad819c575f4688f334..e7a916e7b605594178b962a5e3e3d68379fc98fa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluator.java @@ -19,20 +19,19 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property; import java.util.List; import java.util.Map; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityPropertyAdaptor; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedInputWidgetDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedUiAction; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IPerson; -import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; /** * @author Jakub Straszewski */ public interface IManagedPropertyEvaluator { - public void configureUI(final IManagedProperty managedProperty, - final EntityPropertyPE entityPropertyPE); + final IEntityPropertyAdaptor entityProperty); public void updateFromUI(final IManagedProperty managedProperty, final IPerson person, final IManagedUiAction action); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluatorFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..768f285a9564f3d8d584953666015c4c71d00c15 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IManagedPropertyEvaluatorFactory.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.managed_property; + +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; +import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; + +/** + * @author Pawel Glyzewski + */ +public interface IManagedPropertyEvaluatorFactory +{ + public IManagedPropertyEvaluator createManagedPropertyEvaluator( + EntityTypePropertyTypePE entityTypePropertyTypePE); + + public IManagedPropertyEvaluator createManagedPropertyEvaluator( + EntityTypePropertyType<?> entityTypePropertyType); + + public List<String> listPredeployedPlugins(); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java index 95953dd7add1155c50edcbe689d7f4dbbac7d95d..4b1ce9e3c97405014b757a12f964e15c71eee0a1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java @@ -28,12 +28,12 @@ import ch.systemsx.cisd.common.jython.evaluator.Evaluator; import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityPropertyAdaptor; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedUiActionDescriptionFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedInputWidgetDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedUiAction; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IPerson; -import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; /** * Class for evaluating scripts that control managed properties. @@ -279,7 +279,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator @Override public void configureUI(final IManagedProperty managedProperty, - final EntityPropertyPE entityPropertyPE) + final IEntityPropertyAdaptor entityProperty) { if (operationLog.isDebugEnabled()) { @@ -293,7 +293,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator public Void evaluate(Evaluator evaluator) { evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty); - evaluator.set(PROPERTY_PE_VARIABLE_NAME, entityPropertyPE); + evaluator.set(PROPERTY_PE_VARIABLE_NAME, entityProperty); evaluator.evalFunction(CONFIGURE_UI_FUNCTION); return null; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorFactory.java index 71e58c3bca06b80f5b2199224a00e32d3a7b44ba..6e7e7ceedb3a23ef7417c2a24b3c545d7f2b963d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluatorFactory.java @@ -16,8 +16,19 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import ch.ethz.cisd.hotdeploy.PluginMapHolder; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.shared.basic.string.StringUtils; +import ch.systemsx.cisd.openbis.generic.server.IHotDeploymentController; import ch.systemsx.cisd.openbis.generic.server.JythonEvaluatorPool; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; @@ -29,18 +40,71 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; * @author Jakub Straszewski * @author Pawel Glyzewski */ -public class ManagedPropertyEvaluatorFactory +public class ManagedPropertyEvaluatorFactory implements IManagedPropertyEvaluatorFactory { + private PluginMapHolder<IManagedPropertyEvaluator> predeployedPlugins; + + public ManagedPropertyEvaluatorFactory(IHotDeploymentController hotDeploymentController, + String pluginDirectoryPath) + { + if (false == StringUtils.isBlank(pluginDirectoryPath)) + { + hotDeploymentController.addPluginDirectory(new File(pluginDirectoryPath)); + this.predeployedPlugins = + hotDeploymentController.getPluginMap(IManagedPropertyEvaluator.class); + } else + { + this.predeployedPlugins = null; + } + } - public static IManagedPropertyEvaluator createManagedPropertyEvaluator( + @Override + public IManagedPropertyEvaluator createManagedPropertyEvaluator( EntityTypePropertyTypePE entityTypePropertyTypePE) { final ScriptPE scriptPE = entityTypePropertyTypePE.getScript(); assert scriptPE != null && scriptPE.getScriptType() == ScriptType.MANAGED_PROPERTY; - String script = scriptPE.getScript(); + return getManagedPropertyEvaluator(scriptPE.getPluginType(), scriptPE.getName(), + scriptPE.getScript()); + } + + @Override + public IManagedPropertyEvaluator createManagedPropertyEvaluator( + EntityTypePropertyType<?> entityTypePropertyType) + { + Script script = entityTypePropertyType.getScript(); + + return getManagedPropertyEvaluator(script.getPluginType(), script.getName(), + script.getScript()); + } + + private IManagedPropertyEvaluator getManagedPropertyEvaluator(PluginType pluginType, + String scriptName, String scriptBody) + { + switch (pluginType) + { + case JYTHON: + return createJythonManagedPropertyEvaluator(scriptBody); + case PREDEPLOYED: + if (predeployedPlugins == null) + { + throw new UserFailureException( + "Predeployed managed property evaluator plugins are not configured properly."); + } + IManagedPropertyEvaluator managedPropertyEvaluator = + predeployedPlugins.tryGet(scriptName); + if (managedPropertyEvaluator == null) + { + throw new UserFailureException("Couldn't find plugin named '" + scriptName + + "'."); + } + + return managedPropertyEvaluator; - return createJythonManagedPropertyEvaluator(script); + } + + return null; } private static JythonManagedPropertyEvaluator createJythonManagedPropertyEvaluator(String script) @@ -55,9 +119,14 @@ public class ManagedPropertyEvaluatorFactory } } - public static IManagedPropertyEvaluator createManagedPropertyEvaluator( - EntityTypePropertyType<?> entityTypePropertyType) + @Override + public List<String> listPredeployedPlugins() { - return createJythonManagedPropertyEvaluator(entityTypePropertyType.getScript().getScript()); + if (predeployedPlugins == null) + { + return Collections.emptyList(); + } + + return new ArrayList<String>(predeployedPlugins.getPluginNames()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java index 92f08854128b070eaae5bdd755567ea734672302..dfaf6eb76595b1cb17134a5bb231a467ca2c2efc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java @@ -54,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -128,13 +129,15 @@ public class DataSetTranslator public static List<ExternalData> translate(List<? extends DataPE> list, String defaultDataStoreBaseURL, String baseIndexURL, - Map<Long, Set<Metaproject>> metaprojects) + Map<Long, Set<Metaproject>> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { ArrayList<ExternalData> result = new ArrayList<ExternalData>(list.size()); for (DataPE dataPE : list) { ExternalData data = translate(dataPE, baseIndexURL, true, metaprojects.get(dataPE.getId()), + managedPropertyEvaluatorFactory, ExperimentTranslator.LoadableFields.PROPERTIES); result.add(data); } @@ -189,18 +192,25 @@ public class DataSetTranslator } public static ExternalData translate(DataPE dataPE, String baseIndexURL, - Collection<Metaproject> metaprojects, final LoadableFields... withExperimentFields) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, + final LoadableFields... withExperimentFields) { - return translate(dataPE, baseIndexURL, true, metaprojects, withExperimentFields); + return translate(dataPE, baseIndexURL, true, metaprojects, managedPropertyEvaluatorFactory, + withExperimentFields); } public static ExternalData translate(DataPE dataPE, String baseIndexURL, boolean withDetails, - Collection<Metaproject> metaprojects, final LoadableFields... withExperimentFields) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, + final LoadableFields... withExperimentFields) { ExternalData externalData = null; if (dataPE.isContainer()) { - externalData = translateContainerDataSetProperties(dataPE, baseIndexURL, withDetails); + externalData = + translateContainerDataSetProperties(dataPE, baseIndexURL, withDetails, + managedPropertyEvaluatorFactory); } else if (dataPE.isLinkData()) { externalData = translateLinkDataSetProperties(dataPE); @@ -216,15 +226,16 @@ public class DataSetTranslator SamplePE sampleOrNull = dataPE.tryGetSample(); ExperimentPE experiment = dataPE.getExperiment(); Experiment translatedExperiment = - ExperimentTranslator - .translate(experiment, baseIndexURL, null, withExperimentFields); + ExperimentTranslator.translate(experiment, baseIndexURL, null, + managedPropertyEvaluatorFactory, withExperimentFields); externalData.setId(HibernateUtils.getId(dataPE)); externalData.setCode(dataPE.getCode()); externalData.setDataProducerCode(dataPE.getDataProducerCode()); externalData.setDataSetType(DataSetTypeTranslator.translate(dataPE.getDataSetType(), new HashMap<PropertyTypePE, PropertyType>())); externalData.setDerived(dataPE.isDerived()); - externalData.setContainer(tryToTranslateContainer(dataPE.getContainer(), baseIndexURL)); + externalData.setContainer(tryToTranslateContainer(dataPE.getContainer(), baseIndexURL, + managedPropertyEvaluatorFactory)); final Collection<ExternalData> parents = new HashSet<ExternalData>(); externalData.setParents(parents); for (DataPE parentPE : dataPE.getParents()) @@ -239,11 +250,11 @@ public class DataSetTranslator externalData.setModifier(PersonTranslator.translate(dataPE.getModifier())); externalData.setRegistrationDate(dataPE.getRegistrationDate()); externalData.setSample(sampleOrNull == null ? null : fillSample(new Sample(), sampleOrNull, - translatedExperiment, withDetails)); + translatedExperiment, withDetails, managedPropertyEvaluatorFactory)); externalData.setDataStore(DataStoreTranslator.translate(dataPE.getDataStore())); externalData.setPermlink(PermlinkUtilities.createPermlinkURL(baseIndexURL, EntityKind.DATA_SET, externalData.getIdentifier())); - setProperties(dataPE, externalData); + setProperties(dataPE, externalData, managedPropertyEvaluatorFactory); externalData.setExperiment(translatedExperiment); if (metaprojects != null) @@ -255,19 +266,21 @@ public class DataSetTranslator } private static ContainerDataSet tryToTranslateContainer(DataPE containerOrNull, - String baseIndexURL) + String baseIndexURL, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { return containerOrNull != null ? (ContainerDataSet) translate(containerOrNull, - baseIndexURL, false, null) : null; + baseIndexURL, false, null, managedPropertyEvaluatorFactory) : null; } private static ExternalData translateContainerDataSetProperties(DataPE dataPE, - String baseIndexURL, boolean withComponents) + String baseIndexURL, boolean withComponents, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { ContainerDataSet containerDataSet = new ContainerDataSet(); if (withComponents) { - setContainedDataSets(dataPE, containerDataSet, baseIndexURL); + setContainedDataSets(dataPE, containerDataSet, baseIndexURL, + managedPropertyEvaluatorFactory); } return containerDataSet; } @@ -300,12 +313,14 @@ public class DataSetTranslator return dataSet; } - private static void setProperties(DataPE dataPE, ExternalData externalData) + private static void setProperties(DataPE dataPE, ExternalData externalData, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (HibernateUtils.isInitialized(dataPE.getProperties())) { externalData.setDataSetProperties(EntityPropertyTranslator.translate( - dataPE.getProperties(), new HashMap<PropertyTypePE, PropertyType>())); + dataPE.getProperties(), new HashMap<PropertyTypePE, PropertyType>(), + managedPropertyEvaluatorFactory)); } else { externalData.setDataSetProperties(new ArrayList<IEntityProperty>()); @@ -313,7 +328,8 @@ public class DataSetTranslator } private static Sample fillSample(Sample sample, SamplePE samplePE, Experiment experiment, - boolean loadSampleProperties) + boolean loadSampleProperties, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { sample.setId(HibernateUtils.getId(samplePE)); sample.setPermId(samplePE.getPermId()); @@ -328,7 +344,7 @@ public class DataSetTranslator if (loadSampleProperties) { sample.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(), - new HashMap<PropertyTypePE, PropertyType>())); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory)); } return sample; } @@ -347,14 +363,15 @@ public class DataSetTranslator } private static void setContainedDataSets(DataPE dataPE, ContainerDataSet containerDataSet, - String baseIndexURL) + String baseIndexURL, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { List<ExternalData> containedDataSets = new ArrayList<ExternalData>(); if (HibernateUtils.isInitialized(dataPE.getContainedDataSets())) { for (DataPE childPE : dataPE.getContainedDataSets()) { - containedDataSets.add(translate(childPE, baseIndexURL, null)); + containedDataSets.add(translate(childPE, baseIndexURL, null, + managedPropertyEvaluatorFactory)); } } containerDataSet.setContainedDataSets(containedDataSets); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityHistoryTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityHistoryTranslator.java index 87c0ed0f08786a681fbcf55c9492fe966013cd2f..b2d5929bfdae03f5cb8c673bf379c7901369f3dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityHistoryTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityHistoryTranslator.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * @author Franz-Josef Elmer @@ -37,19 +38,21 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; public class EntityHistoryTranslator { public static List<EntityHistory> translate(List<AbstractEntityPropertyHistoryPE> history, - String baseIndexURL) + String baseIndexURL, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { List<EntityHistory> result = new ArrayList<EntityHistory>(); HashMap<PropertyTypePE, PropertyType> cache = new HashMap<PropertyTypePE, PropertyType>(); for (AbstractEntityPropertyHistoryPE entityPropertyHistory : history) { - result.add(translate(entityPropertyHistory, cache, baseIndexURL)); + result.add(translate(entityPropertyHistory, cache, baseIndexURL, + managedPropertyEvaluatorFactory)); } return result; } private static EntityHistory translate(AbstractEntityPropertyHistoryPE entityPropertyHistory, - Map<PropertyTypePE, PropertyType> cache, String baseIndexURL) + Map<PropertyTypePE, PropertyType> cache, String baseIndexURL, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { EntityHistory result = new EntityHistory(); result.setAuthor(PersonTranslator.translate(entityPropertyHistory.getAuthor())); @@ -81,12 +84,14 @@ public class EntityHistoryTranslator case EXPERIMENT: entityType = EntityKind.EXPERIMENT.getDescription(); result.setRelatedEntity(ExperimentTranslator.translate( - (ExperimentPE) entityHistory.getRelatedEntity(), baseIndexURL, null)); + (ExperimentPE) entityHistory.getRelatedEntity(), baseIndexURL, + null, managedPropertyEvaluatorFactory)); break; case SAMPLE: entityType = EntityKind.SAMPLE.getDescription(); result.setRelatedEntity(SampleTranslator.translate( - (SamplePE) entityHistory.getRelatedEntity(), baseIndexURL, null)); + (SamplePE) entityHistory.getRelatedEntity(), baseIndexURL, null, + managedPropertyEvaluatorFactory)); break; case MATERIAL: } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityPropertyTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityPropertyTranslator.java index 277f4383e3de7f263f346975be0497de27f3c3ab..b812658cf63a1ab92363e918d5311212b32dd83b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityPropertyTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/EntityPropertyTranslator.java @@ -26,6 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Translates {@link EntityPropertyPE} to {@link IEntityProperty}. @@ -40,13 +41,15 @@ public final class EntityPropertyTranslator } public final static IEntityProperty translate(final EntityPropertyPE propertyPE, - Map<PropertyTypePE, PropertyType> cacheOrNull) + Map<PropertyTypePE, PropertyType> cacheOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - return translate(propertyPE, cacheOrNull, false); + return translate(propertyPE, cacheOrNull, false, managedPropertyEvaluatorFactory); } public final static IEntityProperty translate(final EntityPropertyPE propertyPE, - Map<PropertyTypePE, PropertyType> cacheOrNull, boolean rawManagedProperties) + Map<PropertyTypePE, PropertyType> cacheOrNull, boolean rawManagedProperties, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final IEntityProperty basicProperty = PropertyTranslatorUtils.createEntityProperty(propertyPE); @@ -65,8 +68,9 @@ public final class EntityPropertyTranslator .getVocabularyTerm())); break; case MATERIAL: - basicProperty.setMaterial(MaterialTranslator.translate( - propertyPE.getMaterialValue(), false, null)); + basicProperty + .setMaterial(MaterialTranslator.translate(propertyPE.getMaterialValue(), + false, null, managedPropertyEvaluatorFactory)); break; default: basicProperty.setValue(propertyPE.tryGetUntypedValue()); @@ -75,7 +79,9 @@ public final class EntityPropertyTranslator final IEntityProperty result; if (propertyPE.getEntityTypePropertyType().isManaged() && rawManagedProperties == false) { - result = PropertyTranslatorUtils.createManagedEntityProperty(propertyPE, basicProperty); + result = + PropertyTranslatorUtils.createManagedEntityProperty(propertyPE, basicProperty, + managedPropertyEvaluatorFactory); PropertyTranslatorUtils.initializeEntityProperty(result, propertyType, ordinal); } else { @@ -87,7 +93,8 @@ public final class EntityPropertyTranslator public final static List<IEntityProperty> translateRaw( final Set<? extends EntityPropertyPE> list, - Map<PropertyTypePE, PropertyType> cacheOrNull) + Map<PropertyTypePE, PropertyType> cacheOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (list == null) { @@ -96,13 +103,14 @@ public final class EntityPropertyTranslator final List<IEntityProperty> result = new ArrayList<IEntityProperty>(); for (final EntityPropertyPE property : list) { - result.add(translate(property, cacheOrNull, true)); + result.add(translate(property, cacheOrNull, true, managedPropertyEvaluatorFactory)); } return result; } public final static List<IEntityProperty> translate(final Set<? extends EntityPropertyPE> list, - Map<PropertyTypePE, PropertyType> cacheOrNull) + Map<PropertyTypePE, PropertyType> cacheOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (list == null) { @@ -111,13 +119,14 @@ public final class EntityPropertyTranslator final List<IEntityProperty> result = new ArrayList<IEntityProperty>(); for (final EntityPropertyPE property : list) { - result.add(translate(property, cacheOrNull)); + result.add(translate(property, cacheOrNull, managedPropertyEvaluatorFactory)); } return result; } public final static IEntityProperty[] translate(final EntityPropertyPE[] list, - Map<PropertyTypePE, PropertyType> cacheOrNull) + Map<PropertyTypePE, PropertyType> cacheOrNull, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (list == null) { @@ -127,7 +136,7 @@ public final class EntityPropertyTranslator int idx = 0; for (final EntityPropertyPE property : list) { - result[idx++] = translate(property, cacheOrNull); + result[idx++] = translate(property, cacheOrNull, managedPropertyEvaluatorFactory); } return result; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java index 0cce6f159e11dd260695032a635e324cf8706670..be7705c9bd51fe3afbb7dbcafed11dba1db99b58 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -54,18 +55,21 @@ public final class ExperimentTranslator } private static void setProperties(final ExperimentPE experiment, final Experiment result, - final boolean rawManagedProperties) + final boolean rawManagedProperties, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (experiment.isPropertiesInitialized()) { if (rawManagedProperties) { result.setProperties(EntityPropertyTranslator.translateRaw( - experiment.getProperties(), new HashMap<PropertyTypePE, PropertyType>())); + experiment.getProperties(), new HashMap<PropertyTypePE, PropertyType>(), + managedPropertyEvaluatorFactory)); } else { result.setProperties(EntityPropertyTranslator.translate(experiment.getProperties(), - new HashMap<PropertyTypePE, PropertyType>())); + new HashMap<PropertyTypePE, PropertyType>(), + managedPropertyEvaluatorFactory)); } } else { @@ -99,13 +103,17 @@ public final class ExperimentTranslator } public final static Experiment translate(final ExperimentPE experiment, String baseIndexURL, - Collection<Metaproject> metaprojects, final LoadableFields... withFields) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, + final LoadableFields... withFields) { - return translate(experiment, baseIndexURL, false, metaprojects, withFields); + return translate(experiment, baseIndexURL, false, metaprojects, + managedPropertyEvaluatorFactory, withFields); } public final static Experiment translate(final ExperimentPE experiment, String baseIndexURL, final boolean rawManagedProperties, Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, final LoadableFields... withFields) { if (experiment == null) @@ -133,7 +141,8 @@ public final class ExperimentTranslator switch (field) { case PROPERTIES: - setProperties(experiment, result, rawManagedProperties); + setProperties(experiment, result, rawManagedProperties, + managedPropertyEvaluatorFactory); break; case ATTACHMENTS: result.setAttachments(AttachmentTranslator.translate( @@ -154,14 +163,16 @@ public final class ExperimentTranslator // NOTE: when translating list of experiments managed properties will contain raw value public final static List<Experiment> translate(final List<ExperimentPE> experiments, - String baseIndexURL, Map<Long, Set<Metaproject>> metaprojects) + String baseIndexURL, Map<Long, Set<Metaproject>> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final List<Experiment> result = new ArrayList<Experiment>(experiments.size()); for (final ExperimentPE experiment : experiments) { HibernateUtils.initialize(experiment.getProperties()); result.add(ExperimentTranslator.translate(experiment, baseIndexURL, true, - metaprojects.get(experiment.getId()), LoadableFields.PROPERTIES)); + metaprojects.get(experiment.getId()), managedPropertyEvaluatorFactory, + LoadableFields.PROPERTIES)); } return result; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/MaterialTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/MaterialTranslator.java index bcd66659d77c1f681cd479f94050b931d4995b7c..64e655fcdb046f7e46e862d8bbebf2287e5c583f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/MaterialTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/MaterialTranslator.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** @@ -54,24 +55,28 @@ public final class MaterialTranslator } public final static List<Material> translate(final List<MaterialPE> materials, - Map<Long, Set<Metaproject>> metaprojects) + Map<Long, Set<Metaproject>> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final List<Material> result = new ArrayList<Material>(); for (final MaterialPE material : materials) { - result.add(MaterialTranslator.translate(material, metaprojects.get(material.getId()))); + result.add(MaterialTranslator.translate(material, metaprojects.get(material.getId()), + managedPropertyEvaluatorFactory)); } return result; } public final static Material translate(final MaterialPE materialPE, - Collection<Metaproject> metaprojects) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - return translate(materialPE, true, metaprojects); + return translate(materialPE, true, metaprojects, managedPropertyEvaluatorFactory); } public final static Material translate(final MaterialPE materialPE, - final boolean withProperties, Collection<Metaproject> metaprojects) + final boolean withProperties, Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (materialPE == null) { @@ -89,7 +94,7 @@ public final class MaterialTranslator result.setRegistrationDate(materialPE.getRegistrationDate()); if (withProperties) { - setProperties(materialPE, result); + setProperties(materialPE, result, managedPropertyEvaluatorFactory); } if (metaprojects != null) @@ -100,12 +105,13 @@ public final class MaterialTranslator return result; } - private static void setProperties(final MaterialPE materialPE, final Material result) + private static void setProperties(final MaterialPE materialPE, final Material result, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (materialPE.isPropertiesInitialized()) { result.setProperties(EntityPropertyTranslator.translate(materialPE.getProperties(), - new HashMap<PropertyTypePE, PropertyType>())); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory)); } else { result.setProperties(new ArrayList<IEntityProperty>()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java index b25816ebb6b5cf47c325149ce5e0dd2cd47a6eeb..185507a261f8477f0002b4dd460ac7dc7d52beef 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.shared.translator; import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.AbstractEntityAdaptor; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; @@ -29,7 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermEntityPro import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluator; -import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; /** * Some utility methods for entity property translations. @@ -74,16 +75,21 @@ final class PropertyTranslatorUtils * Creates a managed {@link IEntityProperty} wrapping given <var>basicProperty</var>. */ static IEntityProperty createManagedEntityProperty(EntityPropertyPE property, - IEntityProperty basicProperty) + IEntityProperty basicProperty, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final ManagedEntityProperty result = new ManagedEntityProperty(basicProperty); try { // TODO move this outside of translator IManagedPropertyEvaluator evaluator = - ManagedPropertyEvaluatorFactory.createManagedPropertyEvaluator(property + managedPropertyEvaluatorFactory.createManagedPropertyEvaluator(property .getEntityTypePropertyType()); - evaluator.configureUI(result, property); + + // we can provide null parameters, as we are sure, that this is a managed property (so + // it can't be dynamic property) + evaluator.configureUI(result, + AbstractEntityAdaptor.adaptEntityProperty(property, null, null)); } catch (EvaluatorException ex) { result.setValue(BasicConstant.ERROR_PROPERTY_PREFIX + ex.getMessage()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java index 7f00ce871dd44ec11c0a53a19d1d9a4d4d7223e8..de10d6025859dd311730134d22920023cedcfe6f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleParentWithDerivedDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -52,12 +53,14 @@ public final class SampleTranslator } public static List<Sample> translate(final List<SamplePE> samples, String baseIndexURL, - Map<Long, Set<Metaproject>> metaprojects) + Map<Long, Set<Metaproject>> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final List<Sample> list = new ArrayList<Sample>(samples.size()); for (final SamplePE sample : samples) { - list.add(translate(sample, baseIndexURL, metaprojects.get(sample.getId()))); + list.add(translate(sample, baseIndexURL, metaprojects.get(sample.getId()), + managedPropertyEvaluatorFactory)); } return list; } @@ -87,14 +90,17 @@ public final class SampleTranslator } public final static Sample translate(final SamplePE samplePE, String baseIndexURL, - Collection<Metaproject> metaprojects) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - return translate(samplePE, baseIndexURL, true, false, metaprojects); + return translate(samplePE, baseIndexURL, true, false, metaprojects, + managedPropertyEvaluatorFactory); } public final static Sample translate(final SamplePE samplePE, String baseIndexURL, final boolean withDetails, boolean withContainedSamples, - Collection<Metaproject> metaprojects) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (samplePE == null) { @@ -106,13 +112,14 @@ public final class SampleTranslator final int generatedFromDep = getPositiveIntegerValue(samplePE.getSampleType().getGeneratedFromHierarchyDepth()); return translate(samplePE, baseIndexURL, containerDep, generatedFromDep, withDetails, - withContainedSamples, metaprojects); + withContainedSamples, metaprojects, managedPropertyEvaluatorFactory); } private final static Sample translate(final SamplePE samplePE, String baseIndexURL, final int containerDep, final int generatedFromDep, final boolean withDetails, - final boolean withContainedSamples, Collection<Metaproject> metaprojects) + final boolean withContainedSamples, Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final Sample result = new Sample(); setCodes(result, samplePE); @@ -137,9 +144,9 @@ public final class SampleTranslator result.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator())); result.setModifier(PersonTranslator.translate(samplePE.getModifier())); result.setRegistrationDate(samplePE.getRegistrationDate()); - setProperties(result, samplePE); + setProperties(result, samplePE, managedPropertyEvaluatorFactory); result.setExperiment(ExperimentTranslator.translate(samplePE.getExperiment(), - baseIndexURL, null, LoadableFields.PROPERTIES)); + baseIndexURL, null, managedPropertyEvaluatorFactory, LoadableFields.PROPERTIES)); List<Attachment> attachments; if (samplePE.attachmentsInitialized() == false) { @@ -156,7 +163,7 @@ public final class SampleTranslator if (HibernateUtils.isInitialized(samplePE.getContainer())) { result.setContainer(translate(samplePE.getContainer(), baseIndexURL, - containerDep - 1, 0, false, false, null)); + containerDep - 1, 0, false, false, null, managedPropertyEvaluatorFactory)); } } if (generatedFromDep > 0 && samplePE.getParentRelationships() != null) @@ -166,7 +173,7 @@ public final class SampleTranslator for (SamplePE parent : samplePE.getParents()) { result.addParent(translate(parent, baseIndexURL, 0, generatedFromDep - 1, - false, false, null)); + false, false, null, managedPropertyEvaluatorFactory)); } } } @@ -177,7 +184,8 @@ public final class SampleTranslator for (SamplePE containedPE : samplePE.getContained()) { Sample containedSample = - translate(containedPE, baseIndexURL, 0, 0, false, false, null); + translate(containedPE, baseIndexURL, 0, 0, false, false, null, + managedPropertyEvaluatorFactory); containedSamples.add(containedSample); } @@ -198,12 +206,13 @@ public final class SampleTranslator result.setCode(IdentifierHelper.extractCode(samplePE)); } - private static void setProperties(final Sample result, final SamplePE samplePE) + private static void setProperties(final Sample result, final SamplePE samplePE, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { if (samplePE.isPropertiesInitialized()) { result.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(), - new HashMap<PropertyTypePE, PropertyType>())); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory)); } else { result.setProperties(new ArrayList<IEntityProperty>()); @@ -212,17 +221,19 @@ public final class SampleTranslator public final static SampleParentWithDerived translate( final SampleParentWithDerivedDTO sampleGenerationDTO, String baseIndexURL, - Collection<Metaproject> metaprojects) + Collection<Metaproject> metaprojects, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { final SampleParentWithDerived sampleGeneration = new SampleParentWithDerived(); sampleGeneration.setParent(SampleTranslator.translate(sampleGenerationDTO.getParent(), - baseIndexURL, metaprojects)); + baseIndexURL, metaprojects, managedPropertyEvaluatorFactory)); final List<Sample> generated = new ArrayList<Sample>(); for (SamplePE samplePE : sampleGenerationDTO.getDerived()) { - generated.add(SampleTranslator.translate(samplePE, baseIndexURL, false, false, null)); + generated.add(SampleTranslator.translate(samplePE, baseIndexURL, false, false, null, + managedPropertyEvaluatorFactory)); } sampleGeneration.setDerived(generated.toArray(new Sample[generated.size()])); return sampleGeneration; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ScriptTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ScriptTranslator.java index 2e5dbe8b03be14c588d0e907e46a76855aff7bb7..34a8f2d14134128cdcc61efc18c5934928755607 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ScriptTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ScriptTranslator.java @@ -53,6 +53,7 @@ public final class ScriptTranslator final Script result = new Script(); result.setId(HibernateUtils.getId(script)); result.setScriptType(script.getScriptType()); + result.setPluginType(script.getPluginType()); result.setEntityKind(script.getEntityKind()); result.setName(script.getName()); result.setDescription(script.getDescription()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/server/DemoServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/server/DemoServer.java index 1d485837a8be74aecdb802ef5f30616f9c798ac0..4c50c32cd93e070c57d3e1910f5581d086bb8866 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/server/DemoServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/server/DemoServer.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.openbis.generic.server.AbstractServer; +import ch.systemsx.cisd.openbis.generic.server.ComponentNames; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed; import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.NewSamplePredicate; @@ -47,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleParentWithDerivedDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.MetaprojectTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; import ch.systemsx.cisd.openbis.plugin.demo.shared.IDemoServer; @@ -63,6 +65,9 @@ public final class DemoServer extends AbstractServer<IDemoServer> implements IDe @Resource(name = ResourceNames.DEMO_BUSINESS_OBJECT_FACTORY) private IDemoBusinessObjectFactory businessObjectFactory; + @Resource(name = ComponentNames.MANAGED_PROPERTY_EVALUATOR_FACTORY) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public DemoServer() { } @@ -128,7 +133,7 @@ public final class DemoServer extends AbstractServer<IDemoServer> implements IDe getDAOFactory().getMetaprojectDAO().listMetaprojectsForEntity( session.tryGetPerson(), sample); return SampleTranslator.translate(sampleInfo, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs)); + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java index 5983cb5bf2de2d1ecfe5eb961cc51a337e073da9..27e478fad3369f3c862f22d926932edba8fde96f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java @@ -38,6 +38,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.openbis.generic.server.AbstractASyncAction; import ch.systemsx.cisd.openbis.generic.server.AbstractServer; +import ch.systemsx.cisd.openbis.generic.server.ComponentNames; import ch.systemsx.cisd.openbis.generic.server.MaterialHelper; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability; @@ -118,6 +119,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierF import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.AttachmentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MetaprojectTranslator; @@ -144,6 +146,9 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen @Resource(name = ch.systemsx.cisd.openbis.plugin.generic.shared.ResourceNames.GENERIC_PLUGIN_SERVER) private IGenericServer genericServer; + @Resource(name = ComponentNames.MANAGED_PROPERTY_EVALUATOR_FACTORY) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public GenericServer() { } @@ -194,7 +199,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen session.tryGetPerson(), sample); return SampleTranslator.translate(getSampleTypeSlaveServerPlugin(sample.getSampleType()) .getSampleInfo(session, sample), session.getBaseIndexURL(), MetaprojectTranslator - .translate(metaprojectPEs)); + .translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -240,7 +245,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen "No experiment could be found with given identifier '%s'.", identifier); } return ExperimentTranslator.translate(experiment, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs), + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory, ExperimentTranslator.LoadableFields.PROPERTIES, ExperimentTranslator.LoadableFields.ATTACHMENTS); } @@ -257,7 +262,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen getDAOFactory().getMetaprojectDAO().listMetaprojectsForEntity( session.tryGetPerson(), experiment); return ExperimentTranslator.translate(experiment, session.getBaseIndexURL(), - MetaprojectTranslator.translate(metaprojectPEs), + MetaprojectTranslator.translate(metaprojectPEs), managedPropertyEvaluatorFactory, ExperimentTranslator.LoadableFields.PROPERTIES, ExperimentTranslator.LoadableFields.ATTACHMENTS); } @@ -985,7 +990,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen { final MaterialHelper materialHelper = new MaterialHelper(session, businessObjectFactory, getDAOFactory(), - getPropertiesBatchManager()); + getPropertiesBatchManager(), managedPropertyEvaluatorFactory); return materialHelper; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index 2aa419021592335efa44c87180ef1712ce414fad..06209ed3c404bab61593471968ad004363d062f0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -969,6 +969,12 @@ clear: "Clear", progress_uploading: "Uploading", progress_processing: "Processing", +// +// Pregeployed Plugins +// +predeployed_plugin_name: "Plugin name", +plugin_type: "Plugin Type", + // LAST LINE: KEEP IT AT THE END lastline: "" // we need a line without a comma }; diff --git a/openbis/source/java/genericApplicationContext.xml b/openbis/source/java/genericApplicationContext.xml index 9861c09abba5f698c44ef791a4ae598936a8cdb1..e475a587ab2f77a3fe372f2717c2c105aa1c26dd 100644 --- a/openbis/source/java/genericApplicationContext.xml +++ b/openbis/source/java/genericApplicationContext.xml @@ -19,9 +19,35 @@ <bean id="memory-monitor" class="ch.systemsx.cisd.common.monitoring.JMXMemoryMonitorSpringBean" /> + <bean id="hot-deployment-plugin-container" class="ch.systemsx.cisd.openbis.generic.server.HotDeploymentController" /> + + <bean id="entity-validation-factory" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.EntityValidatorFactory" > + <constructor-arg ref="hot-deployment-plugin-container" /> + <constructor-arg value="${entity-validation-plugins-directory}" /> + </bean> + + <bean id="dynamic-property-calculator-factory" + class="ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.DynamicPropertyCalculatorFactory"> + <constructor-arg ref="hot-deployment-plugin-container" /> + <constructor-arg value="${dynamic-property-plugins-directory}" /> + </bean> + + <bean id="managed-property-evaluator-factory" + class="ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory"> + <constructor-arg ref="hot-deployment-plugin-container" /> + <constructor-arg value="${managed-property-plugins-directory}" /> + </bean> + + <bean id="properties-batch-manager" class="ch.systemsx.cisd.openbis.generic.server.business.PropertiesBatchManager" > + <constructor-arg ref="managed-property-evaluator-factory" /> + </bean> + <bean id="transaction-manager" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.db.OpenBISHibernateTransactionManager"> <constructor-arg ref="dao-factory" /> + <constructor-arg ref="entity-validation-factory" /> + <constructor-arg ref="dynamic-property-calculator-factory" /> + <constructor-arg ref="managed-property-evaluator-factory" /> <property name="sessionFactory" ref="hibernate-session-factory" /> <property name="jdbcExceptionTranslator" ref="exception-translator" /> <property name="dynamicPropertiesInterceptor"> @@ -40,6 +66,8 @@ <constructor-arg ref="dao-factory" /> <constructor-arg ref="full-text-index-updater" /> <constructor-arg ref="dynamic-property-scheduler" /> + <constructor-arg ref="dynamic-property-calculator-factory" /> + <constructor-arg ref="managed-property-evaluator-factory" /> </bean> <bean id="relationship-service" @@ -108,6 +136,7 @@ <constructor-arg ref="relationship-service" /> <constructor-arg ref="entity-operation-checker" /> <constructor-arg ref="service-conversation-client-manager" /> + <constructor-arg ref="managed-property-evaluator-factory" /> </bean> <bean id="last-modification-state" @@ -135,6 +164,9 @@ <constructor-arg ref="common-business-object-factory" /> <constructor-arg ref="data-store-service-registrator" /> <constructor-arg ref="last-modification-state" /> + <constructor-arg ref="entity-validation-factory" /> + <constructor-arg ref="dynamic-property-calculator-factory" /> + <constructor-arg ref="managed-property-evaluator-factory" /> <property name="userForAnonymousLogin" value="${user-for-anonymous-login}"/> <property name="CISDHelpdeskEmail" value="cisd.helpdesk@bsse.ethz.ch" /> <property name="defaultPutDataStoreServerCode" value="${dss-rpc.put.dss-code}" /> @@ -206,6 +238,7 @@ <constructor-arg ref="etl-entity-operation-checker" /> <constructor-arg ref="data-store-service-registrator" /> <constructor-arg ref="dss-based-data-source-provider" /> + <constructor-arg ref="managed-property-evaluator-factory" /> <property name="conversationClient" ref="service-conversation-client-manager" /> <property name="conversationServer" ref="service-conversation-server-manager" /> </bean> diff --git a/openbis/source/sql/generic/130/schema-130.sql b/openbis/source/sql/generic/130/schema-130.sql index 1d36b24ebcfd42dddcdc88b681eead8d1dfee597..73adf14d5365908a4a0a24ad9cd81dd15b5f4fe5 100644 --- a/openbis/source/sql/generic/130/schema-130.sql +++ b/openbis/source/sql/generic/130/schema-130.sql @@ -52,7 +52,7 @@ CREATE TABLE QUERIES (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, NAME VARCHA CREATE TABLE relationship_types (id TECH_ID NOT NULL, code CODE NOT NULL, label COLUMN_LABEL, parent_label COLUMN_LABEL, child_label COLUMN_LABEL, description DESCRIPTION_2000, registration_timestamp TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, pers_id_registerer TECH_ID NOT NULL, is_managed_internally BOOLEAN_CHAR NOT NULL DEFAULT 'F', is_internal_namespace BOOLEAN_CHAR NOT NULL DEFAULT 'F', dbin_id TECH_ID NOT NULL); CREATE TABLE sample_relationships_all (id TECH_ID NOT NULL, sample_id_parent TECH_ID NOT NULL, relationship_id TECH_ID NOT NULL, sample_id_child TECH_ID NOT NULL, del_id TECH_ID, PERS_ID_AUTHOR TECH_ID, REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP); -CREATE TABLE scripts (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,NAME VARCHAR(200) NOT NULL, SCRIPT_TYPE SCRIPT_TYPE NOT NULL, DESCRIPTION DESCRIPTION_2000,SCRIPT TEXT_VALUE NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,ENTITY_KIND ENTITY_KIND); +CREATE TABLE scripts (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,NAME VARCHAR(200) NOT NULL, SCRIPT_TYPE SCRIPT_TYPE NOT NULL, DESCRIPTION DESCRIPTION_2000,SCRIPT TEXT_VALUE,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,ENTITY_KIND ENTITY_KIND, PLUGIN_TYPE PLUGIN_TYPE NOT NULL DEFAULT 'JYTHON'); CREATE TABLE CORE_PLUGINS (ID TECH_ID NOT NULL, NAME VARCHAR(200) NOT NULL, VERSION INTEGER NOT NULL, REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MASTER_REG_SCRIPT TEXT_VALUE); @@ -553,7 +553,7 @@ ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_SCRIPT_FK FOREIGN K ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID); ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID); ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID); -ALTER TABLE ONLY POST_REGISTRATION_DATASET_QUEUE ADD CONSTRAINT prdq_ds_fk FOREIGN KEY (ds_id) REFERENCES data_all(id) ON DELETE CASCADE; +ALTER TABLE ONLY POST_REGISTRATION_DATASET_QUEUE ADD CONSTRAINT prdq_ds_fk FOREIGN KEY (ds_id) REFERENCES data_all(id); ALTER TABLE EXPERIMENT_RELATIONSHIPS_HISTORY ADD CONSTRAINT EXRELH_MAIN_EXPE_FK FOREIGN KEY (MAIN_EXPE_ID) REFERENCES EXPERIMENTS_ALL(ID) ON DELETE CASCADE; ALTER TABLE EXPERIMENT_RELATIONSHIPS_HISTORY ADD CONSTRAINT EXRELH_SAMP_FK FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES_ALL(ID) ON DELETE SET NULL; @@ -645,6 +645,8 @@ ALTER TABLE METAPROJECT_ASSIGNMENTS_ALL ADD CONSTRAINT METAPROJECT_ASSIGNMENTS_A (EXPE_ID IS NULL AND SAMP_ID IS NULL AND DATA_ID IS NOT NULL AND MATE_ID IS NULL) OR (EXPE_ID IS NULL AND SAMP_ID IS NULL AND DATA_ID IS NULL AND MATE_ID IS NOT NULL)); +ALTER TABLE SCRIPTS ADD CONSTRAINT SCRIPT_NN_CK CHECK + (PLUGIN_TYPE = 'PREDEPLOYED' OR SCRIPT IS NOT NULL); -- Creating indices diff --git a/openbis/source/sql/postgresql/130/domains-130.sql b/openbis/source/sql/postgresql/130/domains-130.sql index c6fffb75a11f1db265641cae942166cc2b069ea9..c9abd89d7154f395e4e9242025fe572a0dff7cd0 100644 --- a/openbis/source/sql/postgresql/130/domains-130.sql +++ b/openbis/source/sql/postgresql/130/domains-130.sql @@ -28,3 +28,4 @@ CREATE DOMAIN ENTITY_KIND AS VARCHAR(40) CHECK (VALUE IN ('SAMPLE', 'EXPERIMENT' CREATE DOMAIN SCRIPT_TYPE AS VARCHAR(40) CHECK (VALUE IN ('DYNAMIC_PROPERTY', 'MANAGED_PROPERTY', 'ENTITY_VALIDATION')); CREATE DOMAIN IDENTIFIER AS VARCHAR(200); CREATE DOMAIN DATA_SET_KIND AS VARCHAR(40) CHECK (VALUE IN ('PHYSICAL', 'LINK', 'CONTAINER')); +CREATE DOMAIN PLUGIN_TYPE AS VARCHAR(40) CHECK (VALUE IN ('JYTHON', 'PREDEPLOYED')); \ No newline at end of file diff --git a/openbis/source/sql/postgresql/migration/migration-129-130.sql b/openbis/source/sql/postgresql/migration/migration-129-130.sql index 5031161c8e73a8eeb6c95cf3d25046659bbee17e..70657b73e5f1b254edafb6b718b92618d165961e 100644 --- a/openbis/source/sql/postgresql/migration/migration-129-130.sql +++ b/openbis/source/sql/postgresql/migration/migration-129-130.sql @@ -1,4 +1,12 @@ -- Migration from 129 to 130 +CREATE DOMAIN PLUGIN_TYPE AS VARCHAR(40) CHECK (VALUE IN ('JYTHON', 'PREDEPLOYED')); + +ALTER TABLE SCRIPTS ADD COLUMN PLUGIN_TYPE PLUGIN_TYPE NOT NULL DEFAULT 'JYTHON'; +ALTER TABLE SCRIPTS ALTER COLUMN SCRIPT DROP NOT NULL; +ALTER TABLE SCRIPTS ADD CONSTRAINT SCRIPT_NN_CK CHECK + (PLUGIN_TYPE = 'PREDEPLOYED' OR SCRIPT IS NOT NULL); + alter table post_registration_dataset_queue drop CONSTRAINT prdq_ds_fk; alter table post_registration_dataset_queue add CONSTRAINT prdq_ds_fk FOREIGN KEY (ds_id) REFERENCES data_all (id) ON DELETE CASCADE; + \ No newline at end of file diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java index c8db29fd16f19b7fde0de5e73e122c3ebd5615aa..cfd01667404cc59a4b901c60a2a28861430d2a6e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java @@ -35,6 +35,8 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.authentication.Principal; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObjectFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.DynamicPropertyCalculatorFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.entity_validation.EntityValidatorFactory; import ch.systemsx.cisd.openbis.generic.server.plugin.IDataSetTypeSlaveServerPlugin; import ch.systemsx.cisd.openbis.generic.server.plugin.ISampleTypeSlaveServerPlugin; import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase; @@ -96,6 +98,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.builders.ExperimentTypePEBuil import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; @@ -128,7 +131,10 @@ public final class CommonServerTest extends AbstractServerTestCase CommonServer server = new CommonServer(authenticationService, sessionManager, daoFactory, propertiesBatchManager, commonBusinessObjectFactory, - dataStoreServiceRegistrator, new LastModificationState()); + dataStoreServiceRegistrator, new LastModificationState(), + new EntityValidatorFactory(null, null), + new DynamicPropertyCalculatorFactory(null, null), + new ManagedPropertyEvaluatorFactory(null, null)); server.setSampleTypeSlaveServerPlugin(sampleTypeSlaveServerPlugin); server.setDataSetTypeSlaveServerPlugin(dataSetTypeSlaveServerPlugin); server.setBaseIndexURL(SESSION_TOKEN, BASE_INDEX_URL); @@ -575,7 +581,8 @@ public final class CommonServerTest extends AbstractServerTestCase dataStorePE.setCode("DST"); externalDataPE.setDataStore(dataStorePE); final ExternalData externalData = - DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null); + DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); prepareGetSession(); final boolean showOnlyDirectlyConnected = true; context.checking(new Expectations() @@ -614,7 +621,8 @@ public final class CommonServerTest extends AbstractServerTestCase dataStorePE.setCode("DST"); externalDataPE.setDataStore(dataStorePE); final ExternalData externalData = - DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null); + DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); prepareGetSession(); context.checking(new Expectations() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java index bf2592f74a9e120f9ce53d4ec8207283c50575aa..0ad2b51cec082156ad227aed4932442fad9bf8cc 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java @@ -124,6 +124,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.builders.DatabaseInstancePEBu import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; /** * @author Franz-Josef Elmer @@ -167,6 +169,8 @@ public class ETLServiceTest extends AbstractServerTestCase private ISessionManager<Session> sessionManagerForEntityOperations; + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + private PersonPE sessionPerson; private IDataStoreDataSourceManager dataSourceManager; @@ -189,6 +193,7 @@ public class ETLServiceTest extends AbstractServerTestCase context.mock(ISessionManager.class, "sessionManagerForEntityOperations"); sessionPerson = new PersonPE(); session.setPerson(sessionPerson); + managedPropertyEvaluatorFactory = new ManagedPropertyEvaluatorFactory(null, null); } @Test @@ -1520,7 +1525,7 @@ public class ETLServiceTest extends AbstractServerTestCase new ETLService(authenticationService, sessionManager, daoFactory, propertiesBatchManager, boFactory, dssfactory, null, entityOperationChecker, dataStoreServiceRegistrator, dataSourceManager, - sessionManagerForEntityOperations); + sessionManagerForEntityOperations, managedPropertyEvaluatorFactory); etlService.setConversationClient(conversationClient); etlService.setConversationServer(conversationServer); etlService.setDisplaySettingsProvider(new DisplaySettingsProvider()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExperimentValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExperimentValidatorTest.java index 34631e0c4609f7502cffd17cc20cc13961815120..e8b6f638fd0630b5f9b041e504e2828b0bfc8749 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExperimentValidatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExperimentValidatorTest.java @@ -21,6 +21,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.server.authorization.AuthorizationTestCase; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; /** @@ -38,7 +39,8 @@ public class ExperimentValidatorTest extends AuthorizationTestCase ExperimentValidator validator = new ExperimentValidator(); PersonPE person = createPersonWithRoleAssignments(); assertEquals(true, validator.isValid(person, ExperimentTranslator.translate( - createExperiment(createAnotherSpace()), BASE_URL, null))); + createExperiment(createAnotherSpace()), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } @Test @@ -46,8 +48,9 @@ public class ExperimentValidatorTest extends AuthorizationTestCase { ExperimentValidator validator = new ExperimentValidator(); PersonPE person = createPersonWithRoleAssignments(); - assertEquals(true, validator.isValid(person, - ExperimentTranslator.translate(createExperiment(createSpace()), BASE_URL, null))); + assertEquals(true, validator.isValid(person, ExperimentTranslator.translate( + createExperiment(createSpace()), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } @Test @@ -56,9 +59,8 @@ public class ExperimentValidatorTest extends AuthorizationTestCase ExperimentValidator validator = new ExperimentValidator(); PersonPE person = createPersonWithRoleAssignments(); SpacePE group = createSpace("blabla", createAnotherDatabaseInstance()); - assertEquals( - false, - validator.isValid(person, - ExperimentTranslator.translate(createExperiment(group), BASE_URL, null))); + assertEquals(false, validator.isValid(person, ExperimentTranslator.translate( + createExperiment(group), BASE_URL, null, new ManagedPropertyEvaluatorFactory(null, + null)))); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExternalDataValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExternalDataValidatorTest.java index bac7acf58c8ff42f9d7bafbed6daf293a11a354d..afa5f510e6e405884160925e1e2150ec3ee21677 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExternalDataValidatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/ExternalDataValidatorTest.java @@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.AuthorizationTestCa import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; /** @@ -33,7 +34,7 @@ public class ExternalDataValidatorTest extends AuthorizationTestCase { DataSet data = new DataSet(); data.setExperiment(ExperimentTranslator.translate(createExperiment(group), - "http://someURL", null)); + "http://someURL", null, new ManagedPropertyEvaluatorFactory(null, null))); return data; } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidatorTest.java index bebd79c83cba36e13164aae790dd99fcfa520a96..9ba3e2bb244dff3c08df4220fc16c8a65333b9d1 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidatorTest.java @@ -21,6 +21,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.server.authorization.AuthorizationTestCase; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; /** @@ -37,8 +38,9 @@ public class SampleValidatorTest extends AuthorizationTestCase { SampleValidator validator = new SampleValidator(); PersonPE person = createPersonWithRoleAssignments(); - assertEquals(true, validator.isValid(person, - SampleTranslator.translate(createSample(createAnotherSpace()), BASE_URL, null))); + assertEquals(true, validator.isValid(person, SampleTranslator.translate( + createSample(createAnotherSpace()), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } @Test @@ -46,8 +48,9 @@ public class SampleValidatorTest extends AuthorizationTestCase { SampleValidator validator = new SampleValidator(); PersonPE person = createPersonWithRoleAssignments(); - assertEquals(true, validator.isValid(person, - SampleTranslator.translate(createSample(createDatabaseInstance()), BASE_URL, null))); + assertEquals(true, validator.isValid(person, SampleTranslator.translate( + createSample(createDatabaseInstance()), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } @Test @@ -56,7 +59,8 @@ public class SampleValidatorTest extends AuthorizationTestCase SampleValidator validator = new SampleValidator(); PersonPE person = createPersonWithRoleAssignments(); assertEquals(false, validator.isValid(person, SampleTranslator.translate( - createSample(createDatabaseInstance("blabla")), BASE_URL, null))); + createSample(createDatabaseInstance("blabla")), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } @Test @@ -64,10 +68,9 @@ public class SampleValidatorTest extends AuthorizationTestCase { SampleValidator validator = new SampleValidator(); PersonPE person = createPersonWithRoleAssignments(); - assertEquals( - true, - validator.isValid(person, - SampleTranslator.translate(createSample(createSpace()), BASE_URL, null))); + assertEquals(true, validator.isValid(person, SampleTranslator.translate( + createSample(createSpace()), BASE_URL, null, new ManagedPropertyEvaluatorFactory( + null, null)))); } @Test @@ -76,9 +79,8 @@ public class SampleValidatorTest extends AuthorizationTestCase SampleValidator validator = new SampleValidator(); PersonPE person = createPersonWithRoleAssignments(); SpacePE group = createSpace("blabla", createAnotherDatabaseInstance()); - assertEquals( - false, - validator.isValid(person, - SampleTranslator.translate(createSample(group), BASE_URL, null))); + assertEquals(false, validator.isValid(person, SampleTranslator.translate( + createSample(group), BASE_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)))); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManagerTest.java index 8a5b48e0fbed36c947a87c82946c5ee46b158cdb..4ab286abe6846371e15e0397a9ee13b98ca8d76e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManagerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManagerTest.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.PropertyBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.builders.ExperimentTypePEBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.builders.SampleTypePEBuilder; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; /** * @author felmer @@ -77,8 +78,8 @@ public class PropertiesBatchManagerTest extends AssertJUnit PropertyBuilder p5 = new PropertyBuilder(MANAGED_SUBCOLUMNS + ":2").value("12"); addProperties(e2, p3, p4, p5); - new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), - Arrays.asList(e1, e2), null); + new PropertiesBatchManager(new ManagedPropertyEvaluatorFactory(null, null)) + .manageProperties(builder.getExperimentTypePE(), Arrays.asList(e1, e2), null); assertProperties("UN-MANAGED:hello, MANAGED-NO-SUBCOLUMNS:hi", e1); assertProperties("MANAGED-NO-SUBCOLUMNS-BUT-UPDATE:hi alpha, MANAGED_SUBCOLUMNS:ab12", e2); @@ -99,8 +100,8 @@ public class PropertiesBatchManagerTest extends AssertJUnit PropertyBuilder p2 = new PropertyBuilder(MANAGED_ACCESS_OTHER_COLUMNS).value("ptr"); addProperties(e1, p1, p2); - new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), - Arrays.asList(e1), null); + new PropertiesBatchManager(new ManagedPropertyEvaluatorFactory(null, null)) + .manageProperties(builder.getExperimentTypePE(), Arrays.asList(e1), null); assertProperties("UN-MANAGED:hello, MANAGED_ACCESS_OTHER_COLUMNS:hello ptr", e1); } @@ -122,8 +123,8 @@ public class PropertiesBatchManagerTest extends AssertJUnit try { - new PropertiesBatchManager().manageProperties(builder.getSampleType(), - Arrays.asList(s1, s2), null); + new PropertiesBatchManager(new ManagedPropertyEvaluatorFactory(null, null)) + .manageProperties(builder.getSampleType(), Arrays.asList(s1, s2), null); } catch (UserFailureException ufe) { assertEquals( @@ -151,8 +152,8 @@ public class PropertiesBatchManagerTest extends AssertJUnit try { - new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), - Arrays.asList(e1), null); + new PropertiesBatchManager(new ManagedPropertyEvaluatorFactory(null, null)) + .manageProperties(builder.getExperimentTypePE(), Arrays.asList(e1), null); fail("UserFailureException expected"); } catch (UserFailureException ex) { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java index 89a218b7192ec0016831452f3643002636880046..bc7487d3c48bacd15cb7351340f81342a2520e0b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java @@ -61,6 +61,8 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyTermDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.IPermIdDAO; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; /** * An <i>abstract</i> test for <i>Business Object</i>. @@ -142,6 +144,8 @@ public abstract class AbstractBOTest extends AssertJUnit protected IExternalDataManagementSystemDAO dataManagementSystemDAO; + protected IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + @BeforeMethod public void beforeMethod() { @@ -181,6 +185,7 @@ public abstract class AbstractBOTest extends AssertJUnit sampleLister = context.mock(ISampleLister.class); datasetLister = context.mock(IDatasetLister.class); dataManagementSystemDAO = context.mock(IExternalDataManagementSystemDAO.class); + managedPropertyEvaluatorFactory = new ManagedPropertyEvaluatorFactory(null, null); context.checking(new Expectations() { { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java index 8edf0c1898b1a0eb799c6036dce7516eeb929ac4..0ec0066fd0a2efe45c453807c4f73186f9843bf2 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java @@ -50,7 +50,8 @@ public final class AuthorizationGroupBOTest extends AbstractBOTest private final AuthorizationGroupBO createBO() { - return new AuthorizationGroupBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, groupFactory); + return new AuthorizationGroupBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, groupFactory, + managedPropertyEvaluatorFactory); } @Test(expectedExceptions = AssertionError.class) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java index a14ab3e023aadf6067420b99646c13f823604f58..96e9545d21a4429a8f48e428b6f8472c4225435e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java @@ -59,7 +59,9 @@ public class CorePluginTableTest extends AbstractBOTest logRecorder = new BufferedAppender(); scriptRunner = context.mock(IMasterDataScriptRegistrationRunner.class); pluginResourceLoader = context.mock(ICorePluginResourceLoader.class); - pluginTable = new CorePluginTable(daoFactory, EXAMPLE_SESSION, scriptRunner); + pluginTable = + new CorePluginTable(daoFactory, EXAMPLE_SESSION, scriptRunner, + managedPropertyEvaluatorFactory); createdPluginsMatcher = new RecordingMatcher<List<CorePluginPE>>(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java index 895fcadd8991903310e18c1c14999cddcddf2838..f09307bc8b2e8cb64c5ad3f586874fae56505a42 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java @@ -1160,7 +1160,7 @@ public class DataBOTest extends AbstractBOTest private final IDataBO createDataBO() { return new DataBO(daoFactory, EXAMPLE_SESSION, propertiesConverter, relationshipService, - conversationClient); + conversationClient, managedPropertyEvaluatorFactory); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java index b812296de4701a788ea6371b53ac0a6001014eaf..76a0f8f47749af95d7d21e3fe4ae647be1601171 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java @@ -99,7 +99,7 @@ public final class DataSetTableTest extends AbstractBOTest private final DataSetTable createDataSetTable() { return new DataSetTable(daoFactory, dssFactory, ManagerTestTool.EXAMPLE_SESSION, - relationshipService, conversationClient); + relationshipService, conversationClient, managedPropertyEvaluatorFactory); } @BeforeMethod diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java index 67b65b432adc3a9e762d1d814edb155354617c81..369d894fc4198cf72e44308c7d58584d223e43e8 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java @@ -39,7 +39,8 @@ public class EntityTypeBOTest extends AbstractBOTest public void testDeleteReferencedFromTrashCan() { final String sampleTypeCode = "SAMPLE_TYPE"; - final IEntityTypeBO entityTypeBO = new EntityTypeBO(daoFactory, EXAMPLE_SESSION); + final IEntityTypeBO entityTypeBO = + new EntityTypeBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory); final EntityKind entityKind = EntityKind.SAMPLE; final SampleTypePE sampleType = new SampleTypePEBuilder().id(1).code(sampleTypeCode).getSampleType(); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java index 92594fedc50a8c7eafaa4e5bf9063860ae9c4aef..2148f7f536bb7bcfb010fbde33c2b5e100b8520c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java @@ -232,7 +232,7 @@ public final class EntityTypePropertyTypeBOTest extends AbstractBOTest private final EntityTypePropertyTypeBO createEntityTypePropertyTypeBO(EntityKind entityKind) { return new EntityTypePropertyTypeBO(daoFactory, EXAMPLE_SESSION, entityKind, - propertiesConverter); + propertiesConverter, managedPropertyEvaluatorFactory); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java index 9e2c37758445a58fd5570b307f029e0085ec989f..10921387bfccbb4f2a4534160838f39be3dde02a 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java @@ -93,7 +93,8 @@ public final class ExperimentBOTest extends AbstractBOTest private final ExperimentBO createExperimentBO() { - return new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService); + return new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService, + managedPropertyEvaluatorFactory); } @BeforeMethod @@ -451,7 +452,8 @@ public final class ExperimentBOTest extends AbstractBOTest prepareLoadExperimentByIdentifier(identifier, exp); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.loadByExperimentIdentifier(identifier); ExperimentPE experiment = bo.getExperiment(); @@ -487,7 +489,8 @@ public final class ExperimentBOTest extends AbstractBOTest Arrays.asList(materialProp, stringProp, termProp)); prepareEntity(existingProperties, null); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -513,7 +516,8 @@ public final class ExperimentBOTest extends AbstractBOTest Arrays.asList(stringProp2, materialProp2, termProp2)); prepareEntity(existingProperties, null); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -540,7 +544,8 @@ public final class ExperimentBOTest extends AbstractBOTest ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), newConvertedProperties); prepareEntity(existingProperties, newConvertedProperties); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -567,7 +572,8 @@ public final class ExperimentBOTest extends AbstractBOTest ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), newConvertedProperties); prepareEntity(existingProperties, newConvertedProperties); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -595,7 +601,8 @@ public final class ExperimentBOTest extends AbstractBOTest ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), newConvertedProperties); prepareEntity(existingProperties, newConvertedProperties); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -619,7 +626,8 @@ public final class ExperimentBOTest extends AbstractBOTest ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), newConvertedProperties); prepareEntity(existingProperties, newConvertedProperties); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); @@ -643,7 +651,8 @@ public final class ExperimentBOTest extends AbstractBOTest ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), newConvertedProperties); prepareEntity(existingProperties, newConvertedProperties); ExperimentBO bo = - new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, + managedPropertyEvaluatorFactory); bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder, entityAsModifiableBean); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java index e70c64439926d146e57bc31861d7beae397cadb7..a9ed39487b2d700f7e7fe1a5db5938a18146286d 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java @@ -43,7 +43,8 @@ public final class ExperimentTableTest extends AbstractBOTest { private final ExperimentTable createExperimentTable() { - return new ExperimentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter); + return new ExperimentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION, + propertiesConverter, managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java index 78e4af45abb120f79ae5cf5f2066fb552b65ba0e..1d94cdb55438fea095345f170e2e336d5d625ab0 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java @@ -95,7 +95,7 @@ public class GridCustomFilterBOTest extends AbstractBOTest private final IGridCustomFilterOrColumnBO createFilterBO() { - return new GridCustomFilterBO(daoFactory, EXAMPLE_SESSION); + return new GridCustomFilterBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java index fa8a58a7047a9f6db10515a23dc163c5265a3a31..a223705b949393e075e2ab3c5c83c881ceb94c86 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java @@ -47,7 +47,7 @@ public final class MaterialTableTest extends AbstractBOTest private final MaterialTable createMaterialTable(List<MaterialPE> materials, boolean dataChanged) { return new MaterialTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter, - materials, dataChanged); + materials, dataChanged, managedPropertyEvaluatorFactory); } private final MaterialTable createMaterialTable() @@ -66,7 +66,7 @@ public final class MaterialTableTest extends AbstractBOTest { one(daoFactory).getHomeDatabaseInstance(); will(returnValue(CommonTestUtils.createHomeDatabaseInstance())); - + one(daoFactory).setBatchUpdateMode(true); one(daoFactory).setBatchUpdateMode(false); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java index 83764692a58d637804d637881a74106419e0782b..3022a21ea363b52bd630500f8c619338d8ce3eb4 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java @@ -53,7 +53,8 @@ public final class ProjectBOTest extends AbstractBOTest private final ProjectBO createProjectBO() { - return new ProjectBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService); + return new ProjectBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService, + managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java index 782cd6e0056230a86d3055ae9cf4a2870aa4aaea..bbe29b592959572b8dae77f0553d625dc3b41945 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java @@ -53,7 +53,8 @@ public final class PropertyTypeBOTest extends AbstractBOTest private final PropertyTypeBO createPropertyTypeBO() { - return new PropertyTypeBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION); + return new PropertyTypeBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, + managedPropertyEvaluatorFactory); } static final PropertyType createPropertyType(final DataTypeCode dataTypeCode) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java index f8f345919ce917ba8550ba1c3226ad26d0a3dc34..6771955d6f0f8da4c97db9af372f48a1beebbf27 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java @@ -40,7 +40,8 @@ public final class RoleAssignmentTableTest extends AbstractBOTest private final RoleAssignmentTable createRoleAssignmentTable() { - return new RoleAssignmentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION); + return new RoleAssignmentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION, + managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java index 206781a7f7051350096ebc0b1fe4f610b0e88b6a..1006b2e030a0fd69adbfb24402411cc7b5e20dca 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java @@ -1045,7 +1045,7 @@ public final class SampleBOTest extends AbstractBOTest private final SampleBO createSampleBO() { return new SampleBO(daoFactory, EXAMPLE_SESSION, propertiesConverter, relationshipService, - entityOperationChecker); + entityOperationChecker, managedPropertyEvaluatorFactory); } private SampleType createSampleType(final String sampleTypeCode) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java index ed847d85b51410312626453878cf431a2e6df8c1..3afc642f10af2b145643113099727ac6341c3f0d 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java @@ -86,7 +86,8 @@ public final class SampleTableTest extends AbstractBOTest private final SampleTable createSampleTableBO() { - return new SampleTable(daoFactory, EXAMPLE_SESSION, null, entityOperationChecker); + return new SampleTable(daoFactory, EXAMPLE_SESSION, null, entityOperationChecker, + managedPropertyEvaluatorFactory); } private final static SampleIdentifier getSharedSampleIdentifier(final String code) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java index 94ae1ba83933776be01725df262aceca155ce8ed..ea45b12a2e9fb94e640693b76a5f9282e1ba4616 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java @@ -50,18 +50,18 @@ public final class ScriptBOTest extends AbstractBOTest { return new Object[][] { - { - ScriptType.DYNAMIC_PROPERTY, - "Error evaluating '1+': SyntaxError: " - + "(\"no viable alternative at input ')'\", " - + "('expression: 1+', 1, 14, '__result__=(1+)\\n'))" }, - { - ScriptType.MANAGED_PROPERTY, - "SyntaxError: (\"no viable alternative at input '\\\\n\\\\n'\", " - + "('<string>', 1, 2, '1+\\n'))" } - - }; -} + { + ScriptType.DYNAMIC_PROPERTY, + "Error evaluating '1+': SyntaxError: " + + "(\"no viable alternative at input ')'\", " + + "('expression: 1+', 1, 14, '__result__=(1+)\\n'))" }, + { + ScriptType.MANAGED_PROPERTY, + "SyntaxError: (\"no viable alternative at input '\\\\n\\\\n'\", " + + "('<string>', 1, 2, '1+\\n'))" } + + }; + } private static final String SCRIPT = "1+1"; @@ -71,7 +71,8 @@ public final class ScriptBOTest extends AbstractBOTest private final ScriptBO createScriptBO() { - return new ScriptBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, scriptFactory); + return new ScriptBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, scriptFactory, + managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java index 3e6775ed177bc379cad77134c40e7c2d7260a339..a40a1c9d2be65fbde533c4fab4780b4530ba7e03 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java @@ -32,7 +32,8 @@ public final class SpaceBOTest extends AbstractBOTest { private final SpaceBO createSpaceBO() { - return new SpaceBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION); + return new SpaceBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, + managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java index d2b6fdb120b8f99352a687d5bd95b7b10515364e..d06d5a78ff3b51cf40386b95185ba306c92bae60 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java @@ -64,7 +64,9 @@ public final class TrashBOTest extends AbstractBOTest super.beforeMethod(); boFactory = context.mock(ICommonBusinessObjectFactory.class); dataSetTable = context.mock(IDataSetTable.class); - trashBO = new TrashBO(daoFactory, boFactory, ManagerTestTool.EXAMPLE_SESSION); + trashBO = + new TrashBO(daoFactory, boFactory, ManagerTestTool.EXAMPLE_SESSION, + managedPropertyEvaluatorFactory); context.checking(new Expectations() { { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java index 94fb3b26f402b933346ce174aa5774300614247f..b2097e376a8ba1bdd293e8c0c5a60b7330da2669 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java @@ -79,12 +79,13 @@ public final class VocabularyBOTest extends AbstractBOTest private final VocabularyBO createVocabularyBO() { - return new VocabularyBO(daoFactory, EXAMPLE_SESSION); + return new VocabularyBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory); } private final VocabularyBO createVocabularyBO(VocabularyPE vocabulary) { - return new VocabularyBO(daoFactory, EXAMPLE_SESSION, vocabulary); + return new VocabularyBO(daoFactory, EXAMPLE_SESSION, vocabulary, + managedPropertyEvaluatorFactory); } static final NewVocabulary createVocabulary() @@ -331,8 +332,8 @@ public final class VocabularyBOTest extends AbstractBOTest vocabularyBO.addNewTerms(newTerms, 0L); } catch (UserFailureException e) { - assertEquals("Not allowed to add terms to an internally managed vocabulary.", e - .getMessage()); + assertEquals("Not allowed to add terms to an internally managed vocabulary.", + e.getMessage()); } context.assertIsSatisfied(); } @@ -354,12 +355,12 @@ public final class VocabularyBOTest extends AbstractBOTest vocabularyBO.load("voc-code"); try { - vocabularyBO.delete(Collections.<VocabularyTerm> emptyList(), Collections - .<VocabularyTermReplacement> emptyList()); + vocabularyBO.delete(Collections.<VocabularyTerm> emptyList(), + Collections.<VocabularyTermReplacement> emptyList()); } catch (UserFailureException e) { - assertEquals("Not allowed to delete terms from an internally managed vocabulary.", e - .getMessage()); + assertEquals("Not allowed to delete terms from an internally managed vocabulary.", + e.getMessage()); } context.assertIsSatisfied(); } @@ -382,8 +383,8 @@ public final class VocabularyBOTest extends AbstractBOTest vocabularyBO.load("voc-code"); try { - vocabularyBO.delete(Arrays.asList(term1), Collections - .<VocabularyTermReplacement> emptyList()); + vocabularyBO.delete(Arrays.asList(term1), + Collections.<VocabularyTermReplacement> emptyList()); } catch (IllegalArgumentException e) { assertEquals("Deletion of all 1 terms are not allowed.", e.getMessage()); @@ -415,8 +416,8 @@ public final class VocabularyBOTest extends AbstractBOTest vocabularyBO.load("voc-code"); try { - vocabularyBO.delete(Arrays.asList(term1), Arrays.asList(createTermWithReplacement( - term2, term1))); + vocabularyBO.delete(Arrays.asList(term1), + Arrays.asList(createTermWithReplacement(term2, term1))); fail("IllegalArgumentException expected."); } catch (IllegalArgumentException e) { @@ -447,8 +448,8 @@ public final class VocabularyBOTest extends AbstractBOTest vocabularyBO.load("voc-code"); try { - vocabularyBO.delete(Collections.<VocabularyTerm> emptyList(), Arrays - .asList(createTermWithReplacement(term1, term3))); + vocabularyBO.delete(Collections.<VocabularyTerm> emptyList(), + Arrays.asList(createTermWithReplacement(term1, term3))); fail("IllegalArgumentException expected."); } catch (IllegalArgumentException e) { @@ -476,8 +477,8 @@ public final class VocabularyBOTest extends AbstractBOTest VocabularyBO vocabularyBO = createVocabularyBO(); vocabularyBO.load("voc-code"); - vocabularyBO.delete(Arrays.asList(term1), Collections - .<VocabularyTermReplacement> emptyList()); + vocabularyBO.delete(Arrays.asList(term1), + Collections.<VocabularyTermReplacement> emptyList()); assertEquals(1, vocabulary.getTerms().size()); context.assertIsSatisfied(); @@ -517,8 +518,8 @@ public final class VocabularyBOTest extends AbstractBOTest VocabularyBO vocabularyBO = createVocabularyBO(); vocabularyBO.load("voc-code"); - vocabularyBO.delete(Arrays.asList(term1), Arrays.asList(createTermWithReplacement(term2, - term3))); + vocabularyBO.delete(Arrays.asList(term1), + Arrays.asList(createTermWithReplacement(term2, term3))); assertEquals(term3.getCode(), entityPropertyPE.getVocabularyTerm().getCode()); assertEquals(1, vocabulary.getTerms().size()); @@ -580,8 +581,9 @@ public final class VocabularyBOTest extends AbstractBOTest vocabulary.setTerms(Arrays.asList(createTermPE(RED, 1))); VocabularyBO bo = createVocabularyBO(vocabulary); VocabularyTermBatchUpdateDetails details = new VocabularyTermBatchUpdateDetails(true, true); - bo.updateTerms(convertToUpdatedTerms(Arrays.asList(createTerm(RED, 1), - createTerm(WHITE, 2), createTerm(YELLOW, 3)), details)); + bo.updateTerms(convertToUpdatedTerms( + Arrays.asList(createTerm(RED, 1), createTerm(WHITE, 2), createTerm(YELLOW, 3)), + details)); List<VocabularyTermPE> sorted = sortByOrdinal(bo.getVocabulary().getTerms()); assertEquals(RED, sorted.get(0).getCode()); @@ -598,8 +600,9 @@ public final class VocabularyBOTest extends AbstractBOTest createTermPE(YELLOW, 3))); VocabularyBO bo = createVocabularyBO(vocabulary); VocabularyTermBatchUpdateDetails details = new VocabularyTermBatchUpdateDetails(true, true); - bo.updateTerms(convertToUpdatedTerms(Arrays.asList(createTerm(WHITE, 1), createTerm(YELLOW, - 2), createTerm(RED, 3)), details)); + bo.updateTerms(convertToUpdatedTerms( + Arrays.asList(createTerm(WHITE, 1), createTerm(YELLOW, 2), createTerm(RED, 3)), + details)); List<VocabularyTermPE> sorted = sortByOrdinal(bo.getVocabulary().getTerms()); assertEquals(WHITE, sorted.get(0).getCode()); @@ -613,13 +616,15 @@ public final class VocabularyBOTest extends AbstractBOTest // change label but leave description untouched VocabularyPE vocabulary = new VocabularyPE(); vocabulary.setManagedInternally(false); - vocabulary.setTerms(Arrays.asList(createTermPEWithLabelAndDescription(RED, LABEL_A, DESC_A, - 1), createTermPEWithLabelAndDescription(WHITE, LABEL_B, DESC_B, 2))); + vocabulary.setTerms(Arrays.asList( + createTermPEWithLabelAndDescription(RED, LABEL_A, DESC_A, 1), + createTermPEWithLabelAndDescription(WHITE, LABEL_B, DESC_B, 2))); VocabularyBO bo = createVocabularyBO(vocabulary); VocabularyTermBatchUpdateDetails details = new VocabularyTermBatchUpdateDetails(true, false); - bo.updateTerms(convertToUpdatedTerms(Arrays.asList(createTermWithLabel(RED, LABEL_C, 1), - createTermWithLabel(WHITE, LABEL_D, 2)), details)); + bo.updateTerms(convertToUpdatedTerms( + Arrays.asList(createTermWithLabel(RED, LABEL_C, 1), + createTermWithLabel(WHITE, LABEL_D, 2)), details)); List<VocabularyTermPE> sorted = sortByOrdinal(bo.getVocabulary().getTerms()); assertEquals(RED, sorted.get(0).getCode()); @@ -637,14 +642,15 @@ public final class VocabularyBOTest extends AbstractBOTest // change description but leave label untouched VocabularyPE vocabulary = new VocabularyPE(); vocabulary.setManagedInternally(false); - vocabulary.setTerms(Arrays.asList(createTermPEWithLabelAndDescription(RED, LABEL_A, DESC_A, - 1), createTermPEWithLabelAndDescription(WHITE, LABEL_B, DESC_B, 2))); + vocabulary.setTerms(Arrays.asList( + createTermPEWithLabelAndDescription(RED, LABEL_A, DESC_A, 1), + createTermPEWithLabelAndDescription(WHITE, LABEL_B, DESC_B, 2))); VocabularyBO bo = createVocabularyBO(vocabulary); VocabularyTermBatchUpdateDetails details = new VocabularyTermBatchUpdateDetails(false, true); - bo.updateTerms(convertToUpdatedTerms(Arrays.asList( - createTermWithDescription(RED, DESC_C, 1), createTermWithDescription(WHITE, DESC_D, - 2)), details)); + bo.updateTerms(convertToUpdatedTerms( + Arrays.asList(createTermWithDescription(RED, DESC_C, 1), + createTermWithDescription(WHITE, DESC_D, 2)), details)); List<VocabularyTermPE> sorted = sortByOrdinal(bo.getVocabulary().getTerms()); assertEquals(RED, sorted.get(0).getCode()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java index ad91293d8f3b2b065126102631aa3da56da616c0..219a13c9e368c7d0297f97fed27ea2f3b99660d1 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java @@ -56,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetShareId; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; /** @@ -144,7 +145,8 @@ public class DatasetListerTest extends AbstractDAOTest new HashSet<String>(Arrays.asList("200902091250077-1026", "200902091225616-1027")); List<SamplePE> samplePEs = daoFactory.getSampleDAO().listByPermID(samplePermIDs); List<Sample> samples = - SampleTranslator.translate(samplePEs, "", new HashMap<Long, Set<Metaproject>>()); + SampleTranslator.translate(samplePEs, "", new HashMap<Long, Set<Metaproject>>(), + new ManagedPropertyEvaluatorFactory(null, null)); Map<Sample, List<ExternalData>> dataSets = lister.listAllDataSetsFor(samples); 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 23acf350c492f07d1ca6c27ef27ba10ae63e516c..c7a347983aff829f3643690b100e7589ab91cd73 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 @@ -87,7 +87,7 @@ public final class EntityPropertiesConverterTest extends AbstractBOTest final EntityKind entityKind) { return new EntityPropertiesConverter(entityKind, daoFactory, propertyValueValidator, - placeholderCreator); + placeholderCreator, managedPropertyEvaluatorFactory); } private void prepareForConvertion(final Expectations exp) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java index bcf6fd4f47807e2a9ac1df273fd7ad182a17a486..a882eb21858f2ec281298cb7574c7aae4885a15c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java @@ -46,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.dto.AuthorizationGroupPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Code; @@ -248,6 +249,7 @@ public abstract class AbstractDAOWithoutContextTest extends result.setDatabaseInstance(daoFactory.getHomeDatabaseInstance()); result.setRegistrator(getSystemPerson()); result.setEntityKind(kind); + result.setPluginType(PluginType.JYTHON); return result; } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorDbTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorDbTest.java index 0b0a7cbe3ad98680c4f8eda2688cdf480cdb077e..0ee495af365e7586b2750d0411871430f18cd24b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorDbTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorDbTest.java @@ -20,7 +20,8 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.AbstractDAOTest; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.DynamicPropertyEvaluator; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.DynamicPropertyCalculatorFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; /** * @author Piotr Buczek @@ -34,7 +35,9 @@ public class DynamicPropertyEvaluatorDbTest extends AbstractDAOTest @BeforeMethod public void beforeClass() throws Exception { - evaluator = new DynamicPropertyEvaluator(daoFactory, null); + evaluator = + new DynamicPropertyEvaluator(daoFactory, null, + new DynamicPropertyCalculatorFactory(null, null), + new ManagedPropertyEvaluatorFactory(null, null)); } - } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorTest.java index be713d1acde656e8a415ececf53e5b5b65c82540..f87e856d6ff9e9d3281cec186482208d46a125b2 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluatorTest.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.AbstractBOTest; import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConverter.IHibernateSessionProvider; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.AbstractEntityAdaptor; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.BasicPropertyAdaptor; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.DynamicPropertyCalculatorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityPropertyAdaptor; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; @@ -76,7 +77,10 @@ public class DynamicPropertyEvaluatorTest extends AbstractBOTest return session; } }; - evaluator = new DynamicPropertyEvaluator(daoFactory, sessionProvider); + evaluator = + new DynamicPropertyEvaluator(daoFactory, sessionProvider, + new DynamicPropertyCalculatorFactory(null, null), + managedPropertyEvaluatorFactory); } @Test diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluatorTest.java index b66b0c3085db338534f9ffd4512a27545d5fe599..9bc6e4b70e0b8bada6d38ec74b6cfb88a143aa84 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluatorTest.java @@ -24,6 +24,7 @@ import org.testng.AssertJUnit; import org.testng.annotations.Test; import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.BasicPropertyAdaptor; import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedComboBoxInputWidgetDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedHtmlWidgetDescription; @@ -91,7 +92,8 @@ public class JythonManagedPropertyEvaluatorTest extends AssertJUnit CommonTestUtils.getResourceAsString(SCRIPT_FOLDER, CONFIGURE_UI_OUTPUT_TEST_PY); JythonManagedPropertyEvaluator evaluator = new JythonManagedPropertyEvaluator(script); - evaluator.configureUI(managedProperty, new SamplePropertyPE()); + evaluator.configureUI(managedProperty, new BasicPropertyAdaptor("CODE", "value", + new SamplePropertyPE())); assertEquals(true, managedProperty.isOwnTab()); IManagedOutputWidgetDescription outputWidgetDescripion = managedProperty.getUiDescription().getOutputWidgetDescription(); @@ -149,7 +151,8 @@ public class JythonManagedPropertyEvaluatorTest extends AssertJUnit .getResourceAsString(SCRIPT_FOLDER, CONFIGURE_UI_OUTPUT_HTML_TEST_PY); JythonManagedPropertyEvaluator evaluator = new JythonManagedPropertyEvaluator(script); - evaluator.configureUI(managedProperty, new SamplePropertyPE()); + evaluator.configureUI(managedProperty, new BasicPropertyAdaptor("CODE", "value", + new SamplePropertyPE())); assertEquals(true, managedProperty.isOwnTab()); IManagedOutputWidgetDescription outputWidgetDescripion = managedProperty.getUiDescription().getOutputWidgetDescription(); @@ -179,7 +182,8 @@ public class JythonManagedPropertyEvaluatorTest extends AssertJUnit CommonTestUtils.getResourceAsString(SCRIPT_FOLDER, CONFIGURE_UI_INPUT_TEST_PY); JythonManagedPropertyEvaluator evaluator = new JythonManagedPropertyEvaluator(script); - evaluator.configureUI(managedProperty, new SamplePropertyPE()); + evaluator.configureUI(managedProperty, new BasicPropertyAdaptor("CODE", "value", + new SamplePropertyPE())); assertEquals(false, managedProperty.isOwnTab()); List<IManagedUiAction> actions = managedProperty.getUiDescription().getActions(); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java index 313c128bc33ea66ef7bc99fb270228426588233b..1557c0c11253a0a4f97b08a8d732181fcb20c86a 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java @@ -21,6 +21,7 @@ import java.util.List; import org.testng.AssertJUnit; import org.testng.annotations.Test; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.BasicPropertyAdaptor; import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedEntityProperty; @@ -50,7 +51,8 @@ public class StructuredPropertyConverterPythonTest extends AssertJUnit CommonTestUtils.getResourceAsString(SCRIPT_FOLDER, "structured-property-test.py"); JythonManagedPropertyEvaluator evaluator = new JythonManagedPropertyEvaluator(script); - evaluator.configureUI(managedProperty, new SamplePropertyPE()); + evaluator.configureUI(managedProperty, new BasicPropertyAdaptor("CODE", "value", + new SamplePropertyPE())); // the script will create several elements and serialize them in the property value List<IElement> elements = diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java index eeb161f5d90b05cccc972a939c75522bf53ea630..e3e7d7a1ad31f04fcd20979c0988f4388304c6b4 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; /** * @author Franz-Josef Elmer @@ -64,7 +65,9 @@ public class DataSetTranslatorTest extends AssertJUnit { ExternalDataPE externalDataPE = new ExternalDataPE(); externalDataPE.setDataStore(createStore()); - ExternalData data = DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null); + ExternalData data = + DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); DataSet translated = data.tryGetAsDataSet(); @@ -129,7 +132,9 @@ public class DataSetTranslatorTest extends AssertJUnit deletionPE.setRegistrator(personPE); externalDataPE.setDeletion(deletionPE); externalDataPE.setSampleAcquiredFrom(samplePE); - ExternalData data = DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null); + ExternalData data = + DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); DataSet translated = data.tryGetAsDataSet(); @@ -186,7 +191,8 @@ public class DataSetTranslatorTest extends AssertJUnit externalDataPE.addParentRelationship(createParentRelationship(externalDataPE, "parent-2")); ExternalData externalData = - DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null); + DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); assertEquals("my-experiment", externalData.getExperiment().getCode()); assertEquals(2, externalData.getParents().size()); @@ -228,7 +234,9 @@ public class DataSetTranslatorTest extends AssertJUnit linkDataPE.addParentRelationship(createParentRelationship(linkDataPE, "parent-1")); linkDataPE.addParentRelationship(createParentRelationship(linkDataPE, "parent-2")); - ExternalData externalData = DataSetTranslator.translate(linkDataPE, BASE_INDEX_URL, null); + ExternalData externalData = + DataSetTranslator.translate(linkDataPE, BASE_INDEX_URL, null, + new ManagedPropertyEvaluatorFactory(null, null)); assertEquals("my-experiment", externalData.getExperiment().getCode()); assertEquals(2, externalData.getParents().size()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/BatchMaterialRegistrationAndUpdateTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/BatchMaterialRegistrationAndUpdateTest.java index 5260a073087636fd2ceb3f00a371a452d20923c9..ebe26ec25ff0c10683e47ad4aa0cd512a5cc6c7b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/BatchMaterialRegistrationAndUpdateTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/BatchMaterialRegistrationAndUpdateTest.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETPTAssignment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; @@ -76,6 +77,7 @@ public class BatchMaterialRegistrationAndUpdateTest extends SystemTestCase deleteTestMaterials(); Script script = new Script(); script.setScriptType(ScriptType.MANAGED_PROPERTY); + script.setPluginType(PluginType.JYTHON); script.setName("batch script"); script.setScript("def batchColumnNames():\n return ['A', 'B']\n" + "def updateFromBatchInput(bindings):\n" diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/server/CommonServerTest.java index 62d080b2f1d34bd1419148718f24d1494f0eef2e..0eb5a87c07525c8f3a04fd6b276ff2a9e711863b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/server/CommonServerTest.java @@ -29,6 +29,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityValidationEvaluationInfo; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PluginType; import ch.systemsx.cisd.openbis.systemtest.SystemTestCase; /** @@ -176,7 +177,8 @@ public class CommonServerTest extends SystemTestCase + getResourceAsString(scriptName); EntityValidationEvaluationInfo info = - new EntityValidationEvaluationInfo(entityKind, entityIdentifier, false, script); + new EntityValidationEvaluationInfo(entityKind, entityIdentifier, false, + PluginType.JYTHON, "common_adaptor_test.py", script); String result = commonServer.evaluate(sessionToken, info); Assert.assertEquals("Validation OK", result); diff --git a/openbis/sourceTest/sql/postgresql/130/020=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/130/020=database_version_logs.tsv index 5362a9587e89b73a44b178eef1978fe5f4ea607e..e5fc954a97c4ccc10f1699ce15f13d0d97a9a027 100644 --- a/openbis/sourceTest/sql/postgresql/130/020=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/130/020=database_version_logs.tsv @@ -103,4 +103,4 @@ 127 source/sql/postgresql/migration/migration-126-127.sql SUCCESS 2012-11-26 11:01:56.585 \\x2d2d204d6967726174696f6e2066726f6d2031323620746f203132370a0a75706461746520646174615f616c6c207365742076657273696f6e203d20302077686572652076657273696f6e206973206e756c6c3b0a \N 128 source/sql/postgresql/migration/migration-127-128.sql SUCCESS 2012-12-12 08:55:54.095 \\x2d2d204d6967726174696f6e2066726f6d2031323720746f203132380a0a414c544552205441424c4520444154415f53544f5245532041444420434f4c554d4e20444154415f534f555243455f444546494e4954494f4e5320544558545f56414c55453b0a \N 129 source/sql/postgresql/migration/migration-128-129.sql SUCCESS 2013-01-08 12:28:49.271 \\x2d2d204d6967726174696f6e2066726f6d2031323820746f203132390a0a43524541544520494e44455820455852454c485f53414d505f49445f464b5f49204f4e204558504552494d454e545f52454c4154494f4e53484950535f484953544f5259202853414d505f4944293b0a43524541544520494e44455820455852454c485f444154415f49445f464b5f49204f4e204558504552494d454e545f52454c4154494f4e53484950535f484953544f52592028444154415f4944293b0a43524541544520494e4445582053414d5052454c485f53414d505f49445f464b5f49204f4e2053414d504c455f52454c4154494f4e53484950535f484953544f5259202853414d505f4944293b0a43524541544520494e4445582053414d5052454c485f444154415f49445f464b5f49204f4e2053414d504c455f52454c4154494f4e53484950535f484953544f52592028444154415f4944293b0a43524541544520494e444558204441544152454c485f444154415f464b5f49204f4e20444154415f5345545f52454c4154494f4e53484950535f484953544f52592028444154415f4944293b0a0a435245415445204f52205245504c4143452052554c452073616d706c655f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f2073616d706c655f70726f70657274696573200a2020202057484552452028284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c290a09202020414e44202853454c4543542044454c5f49442046524f4d2053414d504c45535f414c4c205748455245204944203d204f4c442e53414d505f494429204953204e554c4c0a2020202020444f20414c534f0a20202020202020494e5345525420494e544f2073616d706c655f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202053414d505f49442c0a202020202020202020535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c282753414d504c455f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e53414d505f49442c200a2020202020202020204f4c442e535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a435245415445204f52205245504c4143452052554c4520646174615f7365745f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f20646174615f7365745f70726f70657274696573200a2020202057484552452028284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c290a09202020414e44202853454c4543542044454c5f49442046524f4d20444154415f414c4c205748455245204944203d204f4c442e44535f494429204953204e554c4c0a20202020444f20414c534f0a20202020202020494e5345525420494e544f20646174615f7365745f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202044535f49442c0a20202020202020202044535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c2827444154415f5345545f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e44535f49442c200a2020202020202020204f4c442e44535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a \N -130 source/sql/postgresql/migration/migration-129-130.sql SUCCESS 2013-02-08 13:54:30.03 \\x2d2d204d6967726174696f6e2066726f6d2031323920746f203133300a0a616c746572207461626c6520706f73745f726567697374726174696f6e5f646174617365745f71756575652064726f7020434f4e53545241494e5420707264715f64735f666b3b0a616c746572207461626c6520706f73745f726567697374726174696f6e5f646174617365745f71756575652061646420434f4e53545241494e5420707264715f64735f666b20464f524549474e204b4559202864735f696429205245464552454e43455320646174615f616c6c2028696429204f4e2044454c45544520434153434144453b0a \N +130 source/sql/postgresql/migration/migration-129-130.sql SUCCESS 2013-02-12 16:57:29.437 \\x2d2d204d6967726174696f6e2066726f6d2031323920746f203133300a0a43524541544520444f4d41494e20504c5547494e5f5459504520415320564152434841522834302920434845434b202856414c554520494e2028274a5954484f4e272c20275052454445504c4f5945442729293b0a0a414c544552205441424c4520534352495054532041444420434f4c554d4e20504c5547494e5f5459504520504c5547494e5f54595045204e4f54204e554c4c2044454641554c5420274a5954484f4e273b0a414c544552205441424c45205343524950545320414c54455220434f4c554d4e205343524950542044524f50204e4f54204e554c4c3b0a414c544552205441424c4520534352495054532041444420434f4e53545241494e54205343524950545f4e4e5f434b20434845434b0a202028504c5547494e5f54595045203d20275052454445504c4f59454427204f5220534352495054204953204e4f54204e554c4c293b0a20200a616c746572207461626c6520706f73745f726567697374726174696f6e5f646174617365745f71756575652064726f7020434f4e53545241494e5420707264715f64735f666b3b0a616c746572207461626c6520706f73745f726567697374726174696f6e5f646174617365745f71756575652061646420434f4e53545241494e5420707264715f64735f666b20464f524549474e204b4559202864735f696429205245464552454e43455320646174615f616c6c2028696429204f4e2044454c45544520434153434144453b0a20200a \N diff --git a/openbis/sourceTest/sql/postgresql/130/059=scripts.tsv b/openbis/sourceTest/sql/postgresql/130/059=scripts.tsv index f39b7de2db43d2eea09aa9df8d7384ea2b086ef0..96742056a53aee1a3f225c900d2ee70454c45226 100644 --- a/openbis/sourceTest/sql/postgresql/130/059=scripts.tsv +++ b/openbis/sourceTest/sql/postgresql/130/059=scripts.tsv @@ -1,11 +1,11 @@ -1 1 properties number of properties str(entity.properties().size()) + ' properties' 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY -2 1 code \N entity.code() 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY -3 1 date \N str(currentDate().getTime()) 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY -4 1 managed list \N fake script 2010-10-27 15:16:48.994831+02 2 \N MANAGED_PROPERTY -5 1 validateOK \N def validate(entity, isNew):\n pass\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -6 1 validateFAIL \N def validate(entity, isNew):\n return "This check always fail"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -7 1 validateUpdateFAIL \N def validate(entity, isNew):\n if (not isNew):\n return "Cannot update this entity"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -8 1 validateChildren \N def validate(entity, isNew):\n for child in entity.children():\n requestValidation(child) 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -9 1 code_date \N "%s %s" % (entity.code(), str(currentDate().getTime())) 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY -10 1 waitOK \N import time;\ndef validate(entity, isNew):\n time.sleep(1);\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -11 1 test \N import time;\ndef validate(entity, isNew):\n pass\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION +1 1 properties number of properties str(entity.properties().size()) + ' properties' 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY JYTHON +2 1 code \N entity.code() 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY JYTHON +3 1 date \N str(currentDate().getTime()) 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY JYTHON +4 1 managed list \N fake script 2010-10-27 15:16:48.994831+02 2 \N MANAGED_PROPERTY JYTHON +5 1 validateOK \N def validate(entity, isNew):\n pass\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON +6 1 validateFAIL \N def validate(entity, isNew):\n return "This check always fail"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON +7 1 validateUpdateFAIL \N def validate(entity, isNew):\n if (not isNew):\n return "Cannot update this entity"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON +8 1 validateChildren \N def validate(entity, isNew):\n for child in entity.children():\n requestValidation(child) 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON +9 1 code_date \N "%s %s" % (entity.code(), str(currentDate().getTime())) 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY JYTHON +10 1 waitOK \N import time;\ndef validate(entity, isNew):\n time.sleep(1);\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON +11 1 test \N import time;\ndef validate(entity, isNew):\n pass\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION JYTHON diff --git a/openbis/sourceTest/sql/postgresql/130/schema-130.sql b/openbis/sourceTest/sql/postgresql/130/schema-130.sql index ad2c09c97e4e62aacecdb170fbe2f2555eaab470..ddc4256c83a64332d4c3381dde2f222c353a09f8 100644 --- a/openbis/sourceTest/sql/postgresql/130/schema-130.sql +++ b/openbis/sourceTest/sql/postgresql/130/schema-130.sql @@ -1,7 +1,8 @@ SET statement_timeout = 0; -SET standard_conforming_strings = on; +SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; +SET escape_string_warning = off; SET search_path = public, pg_catalog; CREATE DOMAIN archiving_status AS character varying(100) CONSTRAINT archiving_status_check CHECK (((VALUE)::text = ANY (ARRAY[('LOCKED'::character varying)::text, ('AVAILABLE'::character varying)::text, ('ARCHIVED'::character varying)::text, ('ARCHIVE_PENDING'::character varying)::text, ('UNARCHIVE_PENDING'::character varying)::text, ('BACKUP_PENDING'::character varying)::text]))); @@ -31,6 +32,8 @@ CREATE DOMAIN identifier AS character varying(200); CREATE DOMAIN object_name AS character varying(50); CREATE DOMAIN ordinal_int AS bigint CONSTRAINT ordinal_int_check CHECK ((VALUE > 0)); +CREATE DOMAIN plugin_type AS character varying(40) + CONSTRAINT plugin_type_check CHECK (((VALUE)::text = ANY ((ARRAY['JYTHON'::character varying, 'PREDEPLOYED'::character varying])::text[]))); CREATE DOMAIN query_type AS character varying(40) CONSTRAINT query_type_check CHECK (((VALUE)::text = ANY (ARRAY[('GENERIC'::character varying)::text, ('EXPERIMENT'::character varying)::text, ('SAMPLE'::character varying)::text, ('DATA_SET'::character varying)::text, ('MATERIAL'::character varying)::text]))); CREATE DOMAIN real_value AS real; @@ -1426,11 +1429,13 @@ CREATE TABLE scripts ( dbin_id tech_id NOT NULL, name character varying(200) NOT NULL, description description_2000, - script text_value NOT NULL, + script text_value, registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL, pers_id_registerer tech_id NOT NULL, entity_kind entity_kind, - script_type script_type NOT NULL + script_type script_type NOT NULL, + plugin_type plugin_type DEFAULT 'JYTHON'::character varying NOT NULL, + CONSTRAINT script_nn_ck CHECK ((((plugin_type)::text = 'PREDEPLOYED'::text) OR (script IS NOT NULL))) ); CREATE SEQUENCE space_id_seq START WITH 1 diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternal.java index 9ed2eb43d33a5439c049ebc832b0efa4e0209877..5c2a82ec67848cd2cbe9315de1178748bb09329c 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternal.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternal.java @@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.MetaprojectTranslator; @@ -94,26 +95,32 @@ public class ProteomicsDataServiceInternal extends AbstractServer<IProteomicsDat private IBusinessObjectFactory boFactory; + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public ProteomicsDataServiceInternal() { } public ProteomicsDataServiceInternal(ISessionManager<Session> sessionManager, IDAOFactory daoFactory, ICommonBusinessObjectFactory businessObjectFactory, - IBusinessObjectFactory boFactory) + IBusinessObjectFactory boFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { - this(sessionManager, daoFactory, null, businessObjectFactory, boFactory); + this(sessionManager, daoFactory, null, businessObjectFactory, boFactory, + managedPropertyEvaluatorFactory); } ProteomicsDataServiceInternal(ISessionManager<Session> sessionManager, IDAOFactory daoFactory, IPropertiesBatchManager propertiesBatchManager, - ICommonBusinessObjectFactory businessObjectFactory, IBusinessObjectFactory boFactory) + ICommonBusinessObjectFactory businessObjectFactory, IBusinessObjectFactory boFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(sessionManager, daoFactory, propertiesBatchManager); sessionManagerFromConstructor = sessionManager; this.commonBoFactory = businessObjectFactory; this.boFactory = boFactory; - experimentLoader = new ExperimentLoader(getDAOFactory()); + experimentLoader = new ExperimentLoader(getDAOFactory(), managedPropertyEvaluatorFactory); + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } public void replaceAutoWiredSesseionManagerByConstructorSessionManager() @@ -194,7 +201,8 @@ public class ProteomicsDataServiceInternal extends AbstractServer<IProteomicsDat session.tryGetPerson(), experiments, EntityKind.EXPERIMENT); Map<Long, Set<Metaproject>> assignments = MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs); - return ExperimentTranslator.translate(experiments, "", assignments); + return ExperimentTranslator.translate(experiments, "", assignments, + managedPropertyEvaluatorFactory); } @Override @@ -212,7 +220,8 @@ public class ProteomicsDataServiceInternal extends AbstractServer<IProteomicsDat getDAOFactory().getMetaprojectDAO().listMetaprojectAssignmentsForEntities( session.tryGetPerson(), dataSetPEs, EntityKind.DATA_SET); return DataSetTranslator.translate(dataSetPEs, "", "", - MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs)); + MetaprojectTranslator.translateMetaprojectAssignments(assignmentPEs), + managedPropertyEvaluatorFactory); } @Override @@ -236,7 +245,9 @@ public class ProteomicsDataServiceInternal extends AbstractServer<IProteomicsDat + " [" + experiment.getIdentifier() + "] is not of type " + experimentType + " but of type " + actualExperimentTypeCode + "."); } - Experiment translatedExperiment = ExperimentTranslator.translate(experiment, "", null); + Experiment translatedExperiment = + ExperimentTranslator.translate(experiment, "", null, + managedPropertyEvaluatorFactory); if (EXPERIMENT_VALIDATOR.isValid(person, translatedExperiment)) { List<DataPE> dataSets = dataSetDAO.listDataSets(experiment); diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/BusinessObjectFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/BusinessObjectFactory.java index 7c1186d1d0ef8b64c7ec66bc009b318a54c3831f..c7b486a1e57b270573efe64f073dabff33d829d6 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/BusinessObjectFactory.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/BusinessObjectFactory.java @@ -24,14 +24,15 @@ import ch.systemsx.cisd.openbis.plugin.AbstractPluginBusinessObjectFactory; import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IPhosphoNetXDAOFactory; /** - * - * * @author Franz-Josef Elmer */ -public class BusinessObjectFactory extends AbstractPluginBusinessObjectFactory implements IBusinessObjectFactory +public class BusinessObjectFactory extends AbstractPluginBusinessObjectFactory implements + IBusinessObjectFactory { private final IDAOFactory daoFactory; + private final IPhosphoNetXDAOFactory specificDAOFactory; + private final ICommonBusinessObjectFactory businessObjectFactory; public BusinessObjectFactory(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory, @@ -65,7 +66,7 @@ public class BusinessObjectFactory extends AbstractPluginBusinessObjectFactory { return new ProteinSummaryTable(daoFactory, specificDAOFactory, session); } - + @Override public IProteinSequenceTable createProteinSequenceTable(Session session) { @@ -87,13 +88,15 @@ public class BusinessObjectFactory extends AbstractPluginBusinessObjectFactory @Override public IProteinRelatedSampleTable createProteinRelatedSampleTable(Session session) { - return new ProteinRelatedSampleTable(daoFactory, specificDAOFactory); + return new ProteinRelatedSampleTable(daoFactory, specificDAOFactory, + getManagedPropertyEvaluatorFactory()); } @Override public ISampleTable createSampleTable(Session session) { - return new SampleTable(daoFactory, specificDAOFactory, session); + return new SampleTable(daoFactory, specificDAOFactory, session, + getManagedPropertyEvaluatorFactory()); } @Override @@ -113,7 +116,5 @@ public class BusinessObjectFactory extends AbstractPluginBusinessObjectFactory { return new SampleLoader(session, daoFactory, businessObjectFactory); } - - } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoader.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoader.java index cba31196ff747840e057faf6ffb5b6ea602e9ee6..0960b180b97dd57867a109c0595bafa9ed79d2a6 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoader.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoader.java @@ -26,6 +26,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields; @@ -36,10 +37,13 @@ public class ExperimentLoader { private final IDAOFactory daoFactory; - public ExperimentLoader(IDAOFactory daoFactory) + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public ExperimentLoader(IDAOFactory daoFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.daoFactory = daoFactory; - + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } public void enrichWithExperiments(Collection<Sample> samples) @@ -65,7 +69,8 @@ public class ExperimentLoader for (ExperimentPE experiment : experiments) { Experiment e = - ExperimentTranslator.translate(experiment, "", null, LoadableFields.PROPERTIES); + ExperimentTranslator.translate(experiment, "", null, + managedPropertyEvaluatorFactory, LoadableFields.PROPERTIES); List<Sample> list = samplesByID.get(experiment.getId()); for (Sample sample : list) { diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java index bc725c53e852fca9cf66914d5de737f71a5a2e42..5d8eb95f72e0d9da3b817292c9be62e5ae3e9c19 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator; import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IPhosphoNetXDAOFactory; @@ -43,23 +44,27 @@ import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.SamplePeptideModifi /** * Implementation of {@link IProteinRelatedSampleTable}. - * + * * @author Franz-Josef Elmer */ class ProteinRelatedSampleTable implements IProteinRelatedSampleTable { private final IDAOFactory daoFactory; - + private final IPhosphoNetXDAOFactory specificDAOFactory; - + + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + private List<ProteinRelatedSample> result; - ProteinRelatedSampleTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory) + ProteinRelatedSampleTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.daoFactory = daoFactory; this.specificDAOFactory = specificDAOFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } - + @Override public List<ProteinRelatedSample> getSamples() { @@ -164,7 +169,7 @@ class ProteinRelatedSampleTable implements IProteinRelatedSampleTable s.setModificationPosition((long) position); return s; } - + private ProteinRelatedSample createFrom(SamplePE sample, Map<PropertyTypePE, PropertyType> cache) { ProteinRelatedSample s = new ProteinRelatedSample(); @@ -173,7 +178,8 @@ class ProteinRelatedSampleTable implements IProteinRelatedSampleTable s.setId(sample.getId()); s.setIdentifier(sample.getIdentifier()); s.setPermId(sample.getPermId()); - s.setProperties(EntityPropertyTranslator.translate(sample.getProperties(), cache)); + s.setProperties(EntityPropertyTranslator.translate(sample.getProperties(), cache, + managedPropertyEvaluatorFactory)); return s; } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java index 00d88611ebd2cb30f1e4506feedb730b55522af6..2632282d42cb4fbd2705257cded214042e033783 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java @@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -47,10 +48,14 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable private SampleIDProvider sampleIDProvider; - SampleTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory, Session session) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + SampleTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory, Session session, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { super(daoFactory, specificDAOFactory, session); sampleIDProvider = new SampleIDProvider(daoFactory.getSampleDAO()); + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } @Override @@ -80,7 +85,7 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable String samplePermID = sampleAbundance.getSamplePermID(); long sampleID = sampleIDProvider.getSampleIDOrParentSampleID(samplePermID); SamplePE samplePE = sampleDAO.getByTechId(new TechId(sampleID)); - fillSampleData(sample, samplePE); + fillSampleData(sample, samplePE, managedPropertyEvaluatorFactory); samples.add(sample); } } finally @@ -90,7 +95,8 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable } private final static void fillSampleData(final SampleWithPropertiesAndAbundance result, - final SamplePE samplePE) + final SamplePE samplePE, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { result.setId(HibernateUtils.getId(samplePE)); result.setPermId(samplePE.getPermId()); @@ -99,6 +105,6 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable result.setSampleType(SampleTypeTranslator.translate(samplePE.getSampleType(), new HashMap<PropertyTypePE, PropertyType>())); result.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(), - new HashMap<PropertyTypePE, PropertyType>())); + new HashMap<PropertyTypePE, PropertyType>(), managedPropertyEvaluatorFactory)); } } diff --git a/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml b/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml index 9051fee4dd0cc826dd4abe93c00053717f1831ac..36b0a130a1992237ef52b1789934d23488abacf4 100644 --- a/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml +++ b/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml @@ -47,6 +47,7 @@ <constructor-arg ref="dao-factory"/> <constructor-arg ref="common-business-object-factory" /> <constructor-arg ref="proteomics-bo-factory" /> + <constructor-arg ref="managed-property-evaluator-factory" /> </bean> <bean id="proteomics-data-service-web" diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternalTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternalTest.java index d048b530dba5c1908e4792e53dcbbd5a78c34d6c..30ebdab47e8cb6b204e0d4d5557845bbab401860 100644 --- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternalTest.java +++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/ProteomicsDataServiceInternalTest.java @@ -60,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.plugin.proteomics.server.business.IBusinessObjectFactory; import ch.systemsx.cisd.openbis.plugin.proteomics.server.business.ISampleLoader; import ch.systemsx.cisd.openbis.plugin.proteomics.shared.IProteomicsDataServiceInternal; @@ -98,7 +99,8 @@ public class ProteomicsDataServiceInternalTest extends AbstractServerTestCase sampleLoader = context.mock(ISampleLoader.class); service = new ProteomicsDataServiceInternal(sessionManager, daoFactory, - propertiesBatchManager, commonBoFactory, boFactory); + propertiesBatchManager, commonBoFactory, boFactory, + new ManagedPropertyEvaluatorFactory(null, null)); experimentType = new ExperimentTypePE(); experimentType.setCode(EXPERIMENT_TYPE); experimentType.setDatabaseInstance(CommonTestUtils.createHomeDatabaseInstance()); @@ -283,7 +285,7 @@ public class ProteomicsDataServiceInternalTest extends AbstractServerTestCase one(experimentDAO).listExperimentsWithProperties(experimentType, null, null); will(returnValue(Arrays.asList(experiments))); - + one(metaprojectDAO).listMetaprojectAssignmentsForEntities( session.tryGetPerson(), Arrays.asList(experiments), EntityKind.EXPERIMENT); diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoaderTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoaderTest.java index 12cc28d0cfcff00c9a91a48ccf912a9975fb6fe3..7f54a9c28dab76a5e36bc3fdb797ffe7551fcbec 100644 --- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoaderTest.java +++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ExperimentLoaderTest.java @@ -27,6 +27,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; /** @@ -38,7 +39,8 @@ public class ExperimentLoaderTest extends AbstractLoaderTestCase @Test public void test() { - ExperimentLoader loader = new ExperimentLoader(daoFactory); + ExperimentLoader loader = + new ExperimentLoader(daoFactory, new ManagedPropertyEvaluatorFactory(null, null)); List<Sample> samples = loadSamples(980L, 981L, 986L); loader.enrichWithExperiments(samples); @@ -66,7 +68,8 @@ public class ExperimentLoaderTest extends AbstractLoaderTestCase List<Sample> list = new ArrayList<Sample>(); for (Long id : ids) { - list.add(SampleTranslator.translate(sampleDAO.tryGetByTechId(new TechId(id)), "", null)); + list.add(SampleTranslator.translate(sampleDAO.tryGetByTechId(new TechId(id)), "", null, + new ManagedPropertyEvaluatorFactory(null, null))); } return list; diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java index 68e9ddcc5dd58e380c492b315363b3ba5a3ec769..e2fdeecda1672c5cdc22378b32a1b628d09128b6 100644 --- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java +++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java @@ -37,20 +37,22 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.builders.EntityTypePropertyTy import ch.systemsx.cisd.openbis.generic.shared.dto.builders.SamplePEBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.builders.SampleTypePEBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.builders.SpacePEBuilder; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.plugin.proteomics.shared.basic.dto.ProteinRelatedSample; import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.SampleAbundance; import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.SamplePeptideModification; /** - * - * * @author Franz-Josef Elmer */ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase { private ProteinRelatedSampleTable table; + private SamplePE sample1; + private SamplePE sample2; + private SamplePE sample3; @Override @@ -58,7 +60,9 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase public void setUp() { super.setUp(); - table = new ProteinRelatedSampleTable(daoFactory, specificDAOFactory); + table = + new ProteinRelatedSampleTable(daoFactory, specificDAOFactory, + new ManagedPropertyEvaluatorFactory(null, null)); SpacePE space = new SpacePEBuilder() @@ -93,12 +97,12 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase { one(specificDAOFactory).getProteinQueryDAO(experimentID); will(returnValue(proteinDAO)); - + one(experimentDAO).getByTechId(experimentID); ExperimentPE experiment = new ExperimentPE(); experiment.setPermId("exp-1"); will(returnValue(experiment)); - + one(proteinDAO).listSampleAbundanceByProtein(experiment.getPermId(), proteinReferenceID.getId()); MockDataSet<SampleAbundance> sampleAbundances = @@ -118,28 +122,34 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase one(sampleDAO).tryToFindByPermID("s-1"); will(returnValue(sample1)); - + one(sampleDAO).tryToFindByPermID("s-2"); will(returnValue(sample2)); - + one(sampleDAO).tryToFindByPermID("s-3"); will(returnValue(sample3)); } }); - + table.load(experimentID, proteinReferenceID, "abcdefabcab"); - + List<ProteinRelatedSample> samples = table.getSamples(); - assertEquals("1:s-1:S1:MY-DB:/s/S1:SAMPLE:my-type:[A: hello]:0.25::null:null:null", render(samples.get(0))); - assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:1:21.5:0.25", render(samples.get(1))); - assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:7:21.5:0.25", render(samples.get(2))); - assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:10:21.5:0.25", render(samples.get(3))); - assertEquals("3:s-3:S3:MY-DB:/s/S3:SAMPLE:my-type:[]:null:d:4:12.375:0.5", render(samples.get(4))); - assertEquals("3:s-3:S3:MY-DB:/s/S3:SAMPLE:my-type:[]:null:f:6:-1.5:0.75", render(samples.get(5))); + assertEquals("1:s-1:S1:MY-DB:/s/S1:SAMPLE:my-type:[A: hello]:0.25::null:null:null", + render(samples.get(0))); + assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:1:21.5:0.25", + render(samples.get(1))); + assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:7:21.5:0.25", + render(samples.get(2))); + assertEquals("2:s-2:S2:MY-DB:/s/S2:SAMPLE:my-type:[]:0.75:a:10:21.5:0.25", + render(samples.get(3))); + assertEquals("3:s-3:S3:MY-DB:/s/S3:SAMPLE:my-type:[]:null:d:4:12.375:0.5", + render(samples.get(4))); + assertEquals("3:s-3:S3:MY-DB:/s/S3:SAMPLE:my-type:[]:null:f:6:-1.5:0.75", + render(samples.get(5))); assertEquals(6, samples.size()); context.assertIsSatisfied(); } - + private String render(ProteinRelatedSample sample) { char modifiedAminoAcid = sample.getModifiedAminoAcid(); @@ -151,7 +161,7 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase + sample.getModificationPosition() + ":" + sample.getModificationMass() + ":" + sample.getModificationFraction(); } - + private SampleAbundance sampleAbundance(String permID, double abundance) { SampleAbundance sampleAbundance = new SampleAbundance(); @@ -159,7 +169,7 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase sampleAbundance.setAbundance(abundance); return sampleAbundance; } - + private SamplePeptideModification modification(String permID, String sequence, int position, double mass, double fraction) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java index 8a8182cf74b0626d647ca09dcc48c44b1e9c8685..367c25e3790ade20f63e3b0a4ce9c9e0d0343b91 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.authentication.ISessionManager; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.openbis.generic.server.AbstractServer; +import ch.systemsx.cisd.openbis.generic.server.ComponentNames; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.ReturnValueFilter; @@ -69,6 +70,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.MetaprojectTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTranslator; @@ -165,6 +167,9 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl @Resource(name = ch.systemsx.cisd.openbis.plugin.generic.shared.ResourceNames.GENERIC_PLUGIN_SERVER) private IGenericServer genericServer; + @Resource(name = ComponentNames.MANAGED_PROPERTY_EVALUATOR_FACTORY) + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + private AnalysisSettings analysisSettings; public ScreeningServer() @@ -227,7 +232,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl session.tryGetPerson(), sample); return SampleTranslator.translate(getSampleTypeSlaveServerPlugin(sample.getSampleType()) .getSampleInfo(session, sample), session.getBaseIndexURL(), MetaprojectTranslator - .translate(metaprojectPEs)); + .translate(metaprojectPEs), managedPropertyEvaluatorFactory); } @Override @@ -237,7 +242,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl TechId plateId) { Session session = getSession(sessionToken); - return PlateContentLoader.loadImagesAndMetadata(session, businessObjectFactory, plateId); + return PlateContentLoader.loadImagesAndMetadata(session, businessObjectFactory, + managedPropertyEvaluatorFactory, plateId); } @Override @@ -247,8 +253,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl DatasetReference dataset, CodeAndLabel featureName) { Session session = getSession(sessionToken); - return PlateContentLoader.loadFeatureVectorDataset(session, businessObjectFactory, dataset, - featureName); + return PlateContentLoader.loadFeatureVectorDataset(session, businessObjectFactory, + managedPropertyEvaluatorFactory, dataset, featureName); } @Override @@ -259,7 +265,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl { Session session = getSession(sessionToken); return PlateContentLoader.loadImagesAndMetadataForDataset(session, businessObjectFactory, - datasetId); + managedPropertyEvaluatorFactory, datasetId); } @Override @@ -314,8 +320,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl String datasetCode, String datastoreCode, WellLocation wellLocationOrNull) { Session session = getSession(sessionToken); - return LogicalImageLoader.loadLogicalImageInfo(session, businessObjectFactory, datasetCode, - datastoreCode, wellLocationOrNull); + return LogicalImageLoader.loadLogicalImageInfo(session, businessObjectFactory, + managedPropertyEvaluatorFactory, datasetCode, datastoreCode, wellLocationOrNull); } @Override @@ -326,7 +332,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl { Session session = getSession(sessionToken); return LogicalImageLoader.getImageDatasetReference(session, businessObjectFactory, - datasetCode, datastoreCode); + managedPropertyEvaluatorFactory, datasetCode, datastoreCode); } @Override @@ -349,7 +355,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl { Session session = getSession(sessionToken); return PlateContentLoader.getImageDatasetInfosForSample(session, businessObjectFactory, - sampleId, wellLocationOrNull); + managedPropertyEvaluatorFactory, sampleId, wellLocationOrNull); } @Override @@ -658,7 +664,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl private ScreeningApiImpl createScreeningApiImpl(String sessionToken) { final Session session = getSession(sessionToken); - return new ScreeningApiImpl(session, businessObjectFactory, getDAOFactory()); + return new ScreeningApiImpl(session, businessObjectFactory, getDAOFactory(), + managedPropertyEvaluatorFactory); } @Override diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/LogicalImageLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/LogicalImageLoader.java index 20e520e655f045f66fba6c308d9a149d8b5c48f2..274c8662475f4a21119aa460908151b875d4d032 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/LogicalImageLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/LogicalImageLoader.java @@ -24,6 +24,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.IDataBO; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; @@ -48,12 +49,14 @@ public class LogicalImageLoader * in HCS case). */ public static LogicalImageInfo loadLogicalImageInfo(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, String datasetCode, + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, String datasetCode, String datastoreCode, WellLocation wellLocationOrNull) { LogicalImageInfo logicalImageInfo = - new LogicalImageLoader(session, businessObjectFactory).tryLoadLogicalImageInfo( - datasetCode, datastoreCode, wellLocationOrNull); + new LogicalImageLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).tryLoadLogicalImageInfo(datasetCode, + datastoreCode, wellLocationOrNull); if (logicalImageInfo == null) { throw new IllegalStateException(String.format("Dataset '%s' is not an image dataset.", @@ -63,21 +66,28 @@ public class LogicalImageLoader } public static ImageDatasetEnrichedReference getImageDatasetReference(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, String datasetCode, + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, String datasetCode, String datastoreCode) { - return new LogicalImageLoader(session, businessObjectFactory).getImageDatasetReference( - datasetCode, datastoreCode); + return new LogicalImageLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).getImageDatasetReference(datasetCode, + datastoreCode); } private final Session session; private final IScreeningBusinessObjectFactory businessObjectFactory; - public LogicalImageLoader(Session session, IScreeningBusinessObjectFactory businessObjectFactory) + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + + public LogicalImageLoader(Session session, + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.session = session; this.businessObjectFactory = businessObjectFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } private ImageDatasetEnrichedReference getImageDatasetReference(String datasetCode, @@ -223,6 +233,7 @@ public class LogicalImageLoader private ExternalData translate(DataPE dataSet) { - return DataSetTranslator.translate(dataSet, session.getBaseIndexURL(), null); + return DataSetTranslator.translate(dataSet, session.getBaseIndexURL(), null, + managedPropertyEvaluatorFactory); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java index ece64f30a462917f8711390f0dd7bcd3d9a31c5d..d5a21b69909b377c24bb6d4d6e007c4b72789cfa 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; @@ -87,30 +88,34 @@ public class PlateContentLoader * image analysis datasets. */ public static PlateContent loadImagesAndMetadata(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, TechId plateId) + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, TechId plateId) { - return new PlateContentLoader(session, businessObjectFactory).getPlateContent(plateId); + return new PlateContentLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).getPlateContent(plateId); } /** * Loads feature vector of specified dataset with one feature specified by name. */ public static FeatureVectorDataset loadFeatureVectorDataset(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, DatasetReference dataset, - CodeAndLabel featureName) + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, + DatasetReference dataset, CodeAndLabel featureName) { - return new PlateContentLoader(session, businessObjectFactory).fetchFeatureVector(dataset, - featureName); + return new PlateContentLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).fetchFeatureVector(dataset, featureName); } /** * Loads data about the plate for a specified dataset, which is supposed to contain images. */ public static PlateImages loadImagesAndMetadataForDataset(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, TechId datasetId) + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, TechId datasetId) { - return new PlateContentLoader(session, businessObjectFactory) - .getPlateContentForDataset(datasetId); + return new PlateContentLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).getPlateContentForDataset(datasetId); } /** @@ -119,18 +124,21 @@ public class PlateContentLoader * sample (restricted to one well in HCS case). */ public static ImageSampleContent getImageDatasetInfosForSample(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, TechId sampleId, + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, TechId sampleId, WellLocation wellLocationOrNull) { - return new PlateContentLoader(session, businessObjectFactory) - .getImageDatasetInfosForSample(sampleId, wellLocationOrNull); + return new PlateContentLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).getImageDatasetInfosForSample(sampleId, + wellLocationOrNull); } public static List<PlateMetadata> loadPlateMetadata(Session session, - IScreeningBusinessObjectFactory businessObjectFactory, List<TechId> plateIds) + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, List<TechId> plateIds) { - return new PlateContentLoader(session, businessObjectFactory).getPlateMetadatas(plateIds); - + return new PlateContentLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory).getPlateMetadatas(plateIds); } private final Session session; @@ -139,12 +147,18 @@ public class PlateContentLoader private final LogicalImageLoader imageLoader; + private final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + private PlateContentLoader(Session session, - IScreeningBusinessObjectFactory businessObjectFactory) + IScreeningBusinessObjectFactory businessObjectFactory, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.session = session; this.businessObjectFactory = businessObjectFactory; - this.imageLoader = new LogicalImageLoader(session, businessObjectFactory); + this.imageLoader = + new LogicalImageLoader(session, businessObjectFactory, + managedPropertyEvaluatorFactory); + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } private PlateImages getPlateContentForDataset(TechId datasetId) @@ -174,7 +188,8 @@ public class PlateContentLoader private Geometry getPlateGeometry(SamplePE plate) { List<IEntityProperty> properties = - EntityPropertyTranslator.translate(plate.getProperties(), null); + EntityPropertyTranslator.translate(plate.getProperties(), null, + managedPropertyEvaluatorFactory); return PlateDimensionParser.getPlateGeometry(properties); } @@ -359,7 +374,7 @@ public class PlateContentLoader for (T dataset : datasets) { datasetReferences.add(ScreeningUtils.createDatasetReference(dataset, - session.getBaseIndexURL())); + session.getBaseIndexURL(), managedPropertyEvaluatorFactory)); } return datasetReferences; } @@ -380,7 +395,8 @@ public class PlateContentLoader private Sample translate(SamplePE sample) { - return SampleTranslator.translate(sample, session.getBaseIndexURL(), null); + return SampleTranslator.translate(sample, session.getBaseIndexURL(), null, + managedPropertyEvaluatorFactory); } private List<WellMetadata> loadWells(TechId plateId) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImpl.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImpl.java index d12829923b5a3d83957eb62a378a5d3c9f58c0f0..9444097583387e827dfd65e8c3dd2e93de61a9c3 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImpl.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImpl.java @@ -60,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceId import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; @@ -108,12 +109,15 @@ public class ScreeningApiImpl private final IDAOFactory daoFactory; + private IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory; + public ScreeningApiImpl(Session session, IScreeningBusinessObjectFactory businessObjectFactory, - IDAOFactory daoFactory) + IDAOFactory daoFactory, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { this.session = session; this.businessObjectFactory = businessObjectFactory; this.daoFactory = daoFactory; + this.managedPropertyEvaluatorFactory = managedPropertyEvaluatorFactory; } public List<FeatureVectorDatasetReference> listFeatureVectorDatasets( @@ -440,7 +444,9 @@ public class ScreeningApiImpl SampleIdentifier sampleIdentifier = createSampleIdentifier(plateIdentifier); ISampleBO sampleBO = businessObjectFactory.createSampleBO(session); sampleBO.loadBySampleIdentifier(sampleIdentifier); - sample = SampleTranslator.translate(sampleBO.getSample(), "", null); + sample = + SampleTranslator.translate(sampleBO.getSample(), "", null, + managedPropertyEvaluatorFactory); } return sample; } @@ -472,7 +478,8 @@ public class ScreeningApiImpl private Sample translate(SamplePE sample) { - return SampleTranslator.translate(sample, session.getBaseIndexURL(), null); + return SampleTranslator.translate(sample, session.getBaseIndexURL(), null, + managedPropertyEvaluatorFactory); } private static SampleIdentifier createSampleIdentifier(PlateIdentifier plate) @@ -884,7 +891,8 @@ public class ScreeningApiImpl } List<ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateMetadata> plateMetadatas = - PlateContentLoader.loadPlateMetadata(session, businessObjectFactory, techIds); + PlateContentLoader.loadPlateMetadata(session, businessObjectFactory, + managedPropertyEvaluatorFactory, techIds); List<PlateMetadata> result = new ArrayList<PlateMetadata>(); Map<Long, Material> materialsCache = new HashMap<Long, Material>(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java index 9f809a96e2001ebc8ce107c4f268fec1f4a75e51..92b7b5c2f1faebd2d9a9beeff2697abdede8a60e 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java @@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.generic.shared.translator.DataStoreTranslator; import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator; import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; @@ -61,13 +62,15 @@ public class ScreeningUtils } } - public static DatasetReference createDatasetReference(DataPE dataset, String baseIndexURL) + public static DatasetReference createDatasetReference(DataPE dataset, String baseIndexURL, + IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { DataStore dataStore = DataStoreTranslator.translate(dataset.getDataStore()); String dataTypeCode = dataset.getDataSetType().getCode(); String fileTypeCode = null; Experiment experiment = - ExperimentTranslator.translate(dataset.getExperiment(), baseIndexURL, null); + ExperimentTranslator.translate(dataset.getExperiment(), baseIndexURL, null, + managedPropertyEvaluatorFactory); String analysisProcedureOrNull = EntityHelper.tryFindPropertyValue(dataset, ScreeningConstants.ANALYSIS_PROCEDURE); return createDatasetReference(dataset.getId(), dataset.getCode(), analysisProcedureOrNull, diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java index 30ef51705d04e0aad8e12d737aac22ac9bd33bc0..16a43efa2f4aa052ad6efe2e14acadad1202f916 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java @@ -50,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluatorFactory; import ch.systemsx.cisd.openbis.plugin.screening.server.IScreeningBusinessObjectFactory; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.FeatureVectorDatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.Geometry; @@ -77,7 +78,9 @@ public class ScreeningApiImplTest extends AbstractServerTestCase public void beforeMethod() { screeningBOFactory = context.mock(IScreeningBusinessObjectFactory.class); - screeningApi = new ScreeningApiImpl(session, screeningBOFactory, daoFactory); + screeningApi = + new ScreeningApiImpl(session, screeningBOFactory, daoFactory, + new ManagedPropertyEvaluatorFactory(null, null)); } @Test