From d48a27d478776ff4f38afbf2a192faccc56f8c4a Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 11 Dec 2012 06:56:11 +0000 Subject: [PATCH] SP-428, BIS-287: parent-children of samples and data sets locked. More tests. SVN: 27904 --- .../server/dataaccess/db/AbstractDAO.java | 3 +- .../generic/server/dataaccess/db/DataDAO.java | 2 ++ .../server/dataaccess/db/SampleDAO.java | 2 +- .../openbis/systemtest/SystemTestCase.java | 13 ++++++++ .../api/v1/GeneralInformationServiceTest.java | 12 ------- .../RegistrationTest.java | 31 +++++++++++++++++++ 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java index c43ab9b8b9a..ada85279dd8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java @@ -368,7 +368,8 @@ public abstract class AbstractDAO extends HibernateDaoSupport protected void lockEntity(IIdHolder entityOrNull) { - if (entityOrNull != null && entityOrNull.getId() != null) + if (entityOrNull != null && entityOrNull.getId() != null + && getSession().contains(entityOrNull)) { getHibernateTemplate().lock(entityOrNull, LockMode.PESSIMISTIC_WRITE); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java index 97653da7852..ea5efbf2909 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java @@ -655,6 +655,8 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple lockEntity(data.getExperiment()); lockEntity(data.tryGetSample()); lockEntity(data.getContainer()); + lockEntities(data.getParents()); + lockEntities(data.getChildren()); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java index 9579800e6c6..b897b9a6b6a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java @@ -88,7 +88,7 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> } lockEntity(sample.getExperiment()); lockEntity(sample.getContainer()); - // lockEntities(sample.getParents()); + lockEntities(sample.getParents()); hibernateTemplate.saveOrUpdate(sample); if (doLog && operationLog.isInfoEnabled()) { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java index c19d3f3b1a1..85b9c847607 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java @@ -46,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.server.ICommonServerForInternalUse; import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer; import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService; import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Grantee; @@ -374,6 +375,18 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo AssertJUnit.fail("No property " + key + " found in " + propertyCodes); } + protected void assertEntities(String expectedEntities, + List<? extends IIdentifierHolder> entities) + { + List<String> identifiers = new ArrayList<String>(); + for (IIdentifierHolder entity : entities) + { + identifiers.add(entity.getIdentifier()); + } + Collections.sort(identifiers); + assertEquals(expectedEntities, identifiers.toString()); + } + protected List<PropertyHistory> getMaterialPropertiesHistory(long materialID) { List<PropertyHistory> list = diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java index aed30e07734..f5bebf62c72 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java @@ -64,7 +64,6 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchCl import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectIdentifierId; -import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; @@ -1293,17 +1292,6 @@ public class GeneralInformationServiceTest extends SystemTestCase sessionToken = generalInformationService.tryToAuthenticateForAllServices("observer", "a"); } - private void assertEntities(String expectedEntities, List<? extends IIdentifierHolder> entities) - { - List<String> identifiers = new ArrayList<String>(); - for (IIdentifierHolder entity : entities) - { - identifiers.add(entity.getIdentifier()); - } - // Collections.sort(identifiers); - assertEquals(expectedEntities, identifiers.toString()); - } - private interface IToStringDelegate<T> { String toString(T t); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java index d4485af9a26..ad568625a84 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/perform_entity_operations/RegistrationTest.java @@ -62,6 +62,37 @@ import ch.systemsx.cisd.openbis.systemtest.SystemTestCase; */ public class RegistrationTest extends SystemTestCase { + @Test + public void testCreateChildrenForAnExistingSampleWithBatchSize1() + { + Sample parentSample = + genericServer.getSampleInfo(systemSessionToken, new TechId(1)).getParent(); + AtomicEntityOperationDetailsBuilder builder = new AtomicEntityOperationDetailsBuilder(); + SampleType sampleType = new SampleType(); + sampleType.setCode("CELL_PLATE"); + parentSample.setSampleType(sampleType); + NewSample childSample1 = new NewSample(); + childSample1.setIdentifier("/TEST-SPACE/PARENT_OF_TWO_CHILD_1"); + childSample1.setSampleType(sampleType); + childSample1.setParents(parentSample.getIdentifier()); + builder.sample(childSample1); + NewSample childSample2 = new NewSample(); + childSample2.setIdentifier("/TEST-SPACE/PARENT_OF_TWO_CHILD_2"); + childSample2.setSampleType(sampleType); + childSample2.setParents(parentSample.getIdentifier()); + builder.sample(childSample2); + builder.batchSize(1); + + etlService.performEntityOperations(systemSessionToken, builder.getDetails()); + + List<Sample> children = + commonServer.listSamples(systemSessionToken, + ListSampleCriteria.createForParent(new TechId(parentSample))); + + assertEntities("[/TEST-SPACE/PARENT_OF_TWO_CHILD_1, /TEST-SPACE/PARENT_OF_TWO_CHILD_2]", + children); + } + @Test public void testCreateSampleWithTwoAttachments() { -- GitLab