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 3ac72d2c4bb6f9dbc081c40f3f61a67056a585a6..f917a7efe9f346ac1d1acb5282b14823ae96fc1e 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 @@ -462,8 +462,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp throw UserFailureException.fromTemplate("Sample type with code '%s' does not exist.", sampleTypeCode); } - getPropertiesBatchManager().manageProperties(sampleTypePE, newSamplesWithType, - registratorOrNull); + getPropertiesBatchManager().manageProperties(sampleTypePE, newSamples, registratorOrNull); getSampleTypeSlaveServerPlugin(sampleTypePE).registerSamples(session, newSamples, registratorOrNull); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IPropertiesBatchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IPropertiesBatchManager.java index 4773ce1c1174a6c11257d0c2a23cf294914ca87b..5421fb5849e514a75448d7b0f30c40f00de68cd8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IPropertiesBatchManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IPropertiesBatchManager.java @@ -18,9 +18,9 @@ package ch.systemsx.cisd.openbis.generic.server.business; import java.util.List; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperimentsWithType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; @@ -33,11 +33,11 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; */ public interface IPropertiesBatchManager { - public void manageProperties(SampleTypePE sampleType, NewSamplesWithTypes newSamplesWithTypes, + public void manageProperties(SampleTypePE sampleType, List<NewSample> newSamples, PersonPE registrator); public void manageProperties(ExperimentTypePE experimentType, - NewExperimentsWithType experiments, PersonPE registrator); + List<? extends NewBasicExperiment> experiments, PersonPE registrator); public void manageProperties(MaterialTypePE materialType, List<NewMaterial> newMaterials, PersonPE registrator); 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 30004e9f67f87c986135e4296d80f30a11fb3438..1cefc1673836d08b4e3ddc92be418b8e8e52a7f5 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 @@ -36,9 +36,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertiesBean; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedProperty; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperimentsWithType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ValidationException; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; @@ -52,7 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyE /** * Handles Managed Properties of batch uploads/updates. - * + * * @author Franz-Josef Elmer */ public class PropertiesBatchManager implements IPropertiesBatchManager @@ -67,27 +67,24 @@ public class PropertiesBatchManager implements IPropertiesBatchManager private final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY, getClass()); - - - public void manageProperties(SampleTypePE sampleType, NewSamplesWithTypes newSamplesWithTypes, + public void manageProperties(SampleTypePE sampleType, List<NewSample> samples, PersonPE registrator) { Set<? extends EntityTypePropertyTypePE> sampleTypePropertyTypes = sampleType.getSampleTypePropertyTypes(); - - managePropertiesBeans(newSamplesWithTypes.getNewSamples(), sampleTypePropertyTypes, - registrator); + + managePropertiesBeans(samples, sampleTypePropertyTypes, registrator); } - + public void manageProperties(ExperimentTypePE experimentType, - NewExperimentsWithType experiments, PersonPE registrator) + List<? extends NewBasicExperiment> experiments, PersonPE registrator) { Set<? extends EntityTypePropertyTypePE> entityTypePropertyTypes = experimentType.getExperimentTypePropertyTypes(); - managePropertiesBeans(experiments.getNewExperiments(), entityTypePropertyTypes, registrator); + managePropertiesBeans(experiments, entityTypePropertyTypes, registrator); } - + public void manageProperties(MaterialTypePE materialType, List<NewMaterial> newMaterials, PersonPE registrator) { @@ -99,9 +96,9 @@ public class PropertiesBatchManager implements IPropertiesBatchManager private void managePropertiesBeans(List<? extends IPropertiesBean> propertiesBeans, Set<? extends EntityTypePropertyTypePE> entityTypePropertyTypes, PersonPE registrator) { - Map<String, EvaluationContext> contexts = - createEvaluationContexts(entityTypePropertyTypes); - PropertiesBatchEvaluationErrors errors = new PropertiesBatchEvaluationErrors(registrator, propertiesBeans.size()); + Map<String, EvaluationContext> contexts = createEvaluationContexts(entityTypePropertyTypes); + PropertiesBatchEvaluationErrors errors = + new PropertiesBatchEvaluationErrors(registrator, propertiesBeans.size()); int rowNumber = 0; for (IPropertiesBean propertiesBean : propertiesBeans) @@ -160,8 +157,8 @@ public class PropertiesBatchManager implements IPropertiesBatchManager EntityProperty entityProperty = createNewEntityProperty(code); if (evalContext == null) { - ManagedPropertyEvaluator.assertBatchColumnNames(code, - Collections.<String> emptyList(), bindings); + ManagedPropertyEvaluator.assertBatchColumnNames(code, Collections.<String> emptyList(), + bindings); entityProperty.setValue(bindings.get("")); } else { @@ -229,4 +226,4 @@ public class PropertiesBatchManager implements IPropertiesBatchManager } return result; } -} +} 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 e57769834d9bf2c2fa825f526d5f252de1e93b24..7ec512d000fa79cd9753237a07be399a796ddb29 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 @@ -425,7 +425,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen throw UserFailureException.fromTemplate("Sample type with code '%s' does not exist.", sampleTypeCode); } - getPropertiesBatchManager().manageProperties(sampleTypePE, updatedSamplesWithType, + getPropertiesBatchManager().manageProperties(sampleTypePE, updatedSamples, session.tryGetPerson()); getSampleTypeSlaveServerPlugin(sampleTypePE).updateSamples(session, convertSamples(updatedSamples)); @@ -839,7 +839,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen throw UserFailureException.fromTemplate( "Experiment type with code '%s' does not exist.", experimentTypePE); } - getPropertiesBatchManager().manageProperties(experimentTypePE, experiments, + getPropertiesBatchManager().manageProperties(experimentTypePE, newExperiments, session.tryGetPerson()); BatchOperationExecutor.executeInBatches(new ExperimentBatchRegistration( businessObjectFactory.createExperimentTable(session), newExperiments, @@ -874,6 +874,8 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen throw UserFailureException.fromTemplate( "Experiment type with code '%s' does not exist.", experimentTypePE); } + getPropertiesBatchManager().manageProperties(experimentTypePE, newExperiments, + session.tryGetPerson()); BatchOperationExecutor.executeInBatches(new ExperimentBatchUpdate(businessObjectFactory .createExperimentTable(session), convertExperiments(newExperiments), experimentTypePE)); 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 6ed9c440ca813aa238323fb016f8bc7291e317ba..164464cf60f5fc2d9313924407fe7feee4e60de2 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 @@ -25,9 +25,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertiesBean; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperimentsWithType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes; 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; @@ -39,8 +37,12 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.builders.SampleTypePEBuilder; public class PropertiesBatchManagerTest extends AssertJUnit { private static final String MANAGED_SUBCOLUMNS = "MANAGED_SUBCOLUMNS"; - private static final String MANAGED_NO_SUBCOLUMNS_BUT_UPDATE = "MANAGED-NO-SUBCOLUMNS-BUT-UPDATE"; + + private static final String MANAGED_NO_SUBCOLUMNS_BUT_UPDATE = + "MANAGED-NO-SUBCOLUMNS-BUT-UPDATE"; + private static final String MANAGED_NO_SUBCOLUMNS_NO_UPDATE = "MANAGED-NO-SUBCOLUMNS"; + private static final String UN_MANAGED = "UN-MANAGED"; @Test @@ -49,9 +51,10 @@ public class PropertiesBatchManagerTest extends AssertJUnit ExperimentTypePEBuilder builder = new ExperimentTypePEBuilder(); builder.assign(UN_MANAGED); builder.assign(MANAGED_NO_SUBCOLUMNS_NO_UPDATE).script(ScriptType.MANAGED_PROPERTY, ""); - builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script(ScriptType.MANAGED_PROPERTY, - "def updateFromBatchInput(columnValues):\n" + - " property.setValue(columnValues.get('') + ' alpha')"); + builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script( + ScriptType.MANAGED_PROPERTY, + "def updateFromBatchInput(columnValues):\n" + + " property.setValue(columnValues.get('') + ' alpha')"); builder.assign(MANAGED_SUBCOLUMNS).script( ScriptType.MANAGED_PROPERTY, "def batchColumnNames():\n return ['1', '2']\n" @@ -66,33 +69,33 @@ public class PropertiesBatchManagerTest extends AssertJUnit PropertyBuilder p4 = new PropertyBuilder(MANAGED_SUBCOLUMNS + ":1").value("ab"); PropertyBuilder p5 = new PropertyBuilder(MANAGED_SUBCOLUMNS + ":2").value("12"); addProperties(e2, p3, p4, p5); - NewExperimentsWithType experiments = new NewExperimentsWithType("T", Arrays.asList(e1, e2)); - - new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), experiments, - null); - + + new PropertiesBatchManager().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); } - + @Test public void testScriptErrorWhenExecutingUpdateFromBatchInput() { SampleTypePEBuilder builder = new SampleTypePEBuilder(); - builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script(ScriptType.MANAGED_PROPERTY, - "def updateFromBatchInput(columnValues):\n" + - " property.setValue(str(int(columnValues.get('')) + 42))"); + builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script( + ScriptType.MANAGED_PROPERTY, + "def updateFromBatchInput(columnValues):\n" + + " property.setValue(str(int(columnValues.get('')) + 42))"); NewSample s1 = new NewSample(); PropertyBuilder p1 = new PropertyBuilder(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).value("1"); addProperties(s1, p1); NewSample s2 = new NewSample(); PropertyBuilder p2 = new PropertyBuilder(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).value("two"); addProperties(s2, p2); - NewSamplesWithTypes samples = new NewSamplesWithTypes(null, Arrays.asList(s1, s2)); - + try { - new PropertiesBatchManager().manageProperties(builder.getSampleType(), samples, null); + new PropertiesBatchManager().manageProperties(builder.getSampleType(), + Arrays.asList(s1, s2), null); } catch (UserFailureException ufe) { assertEquals( @@ -103,34 +106,34 @@ public class PropertiesBatchManagerTest extends AssertJUnit + "A detailed error report has been sent to your system administrator.", ufe.getMessage()); } - + assertProperties("MANAGED-NO-SUBCOLUMNS-BUT-UPDATE:43", s1); } - + @Test public void testScriptThrowingValidationException() { ExperimentTypePEBuilder builder = new ExperimentTypePEBuilder(); - builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script(ScriptType.MANAGED_PROPERTY, - "def updateFromBatchInput(columnValues):\n" + - " raise ValidationException('Oops!')"); + builder.assign(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).script( + ScriptType.MANAGED_PROPERTY, + "def updateFromBatchInput(columnValues):\n" + + " raise ValidationException('Oops!')"); NewBasicExperiment e1 = new NewBasicExperiment(); PropertyBuilder p1 = new PropertyBuilder(MANAGED_NO_SUBCOLUMNS_BUT_UPDATE).value("hello"); addProperties(e1, p1); - NewExperimentsWithType experiments = new NewExperimentsWithType("T", Arrays.asList(e1)); - + try { new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), - experiments, null); + Arrays.asList(e1), null); fail("UserFailureException expected"); } catch (UserFailureException ex) { assertEquals("Error in row 1: Oops!", ex.getMessage()); } - + } - + @Test public void testSubColumnsButNoScript() { @@ -139,19 +142,18 @@ public class PropertiesBatchManagerTest extends AssertJUnit NewBasicExperiment e1 = new NewBasicExperiment(); PropertyBuilder p1 = new PropertyBuilder(UN_MANAGED + ":1").value("hello"); addProperties(e1, p1); - NewExperimentsWithType experiments = new NewExperimentsWithType("T", Arrays.asList(e1)); - + try { new PropertiesBatchManager().manageProperties(builder.getExperimentTypePE(), - experiments, null); + Arrays.asList(e1), null); fail("UserFailureException expected"); } catch (UserFailureException ex) { assertEquals("No subcolumns expected for property 'UN-MANAGED': [1]", ex.getMessage()); } } - + private void assertProperties(String expectedProperties, IPropertiesBean propertiesBean) { StringBuilder builder = new StringBuilder(); @@ -167,7 +169,7 @@ public class PropertiesBatchManagerTest extends AssertJUnit } assertEquals(expectedProperties, builder.toString()); } - + private void addProperties(IPropertiesBean propertiesBean, PropertyBuilder... builders) { IEntityProperty[] properties = new IEntityProperty[builders.length]; diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java index b08783e5049ae670735ef8c1141202a510325e49..891e6d18819a4f3e8c6b65f1f016f039f793d347 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java @@ -280,8 +280,7 @@ public final class GenericServerTest extends AbstractServerTestCase one(sampleTypeSlaveServerPlugin).registerSamples(SESSION, newSamples, null); - one(propertiesBatchManager).manageProperties(sampleTypePE, newSamplesWithType, - null); + one(propertiesBatchManager).manageProperties(sampleTypePE, newSamples, null); } }); createServer().registerOrUpdateSamples(SESSION_TOKEN, samplesWithTypes); @@ -310,8 +309,7 @@ public final class GenericServerTest extends AbstractServerTestCase one(sampleTypeSlaveServerPlugin).registerSamples(SESSION, newSamples, null); - one(propertiesBatchManager).manageProperties(sampleTypePE, newSamplesWithType, - null); + one(propertiesBatchManager).manageProperties(sampleTypePE, newSamples, null); } }); createServer().registerSamples(SESSION_TOKEN, samplesWithTypes); @@ -840,8 +838,7 @@ public final class GenericServerTest extends AbstractServerTestCase context.checking(new Expectations() { { - one(propertiesBatchManager).manageProperties(experimentTypePE, experiments, - null); + one(propertiesBatchManager).manageProperties(experimentTypePE, entities, null); one(daoFactory).getEntityTypeDAO(EntityKind.EXPERIMENT); will(returnValue(entityTypeDAO)); one(entityTypeDAO).tryToFindEntityTypeByCode(EXPERIMENT_TYPE);