From a6a7581e498e481a558cb62a5205c1c8736d209e Mon Sep 17 00:00:00 2001 From: izabel <izabel> Date: Wed, 18 Mar 2009 12:58:38 +0000 Subject: [PATCH] [LMS-780] check modification date SVN: 10283 --- .../web/client/ICommonClientService.java | 16 ++-- .../web/client/ICommonClientServiceAsync.java | 14 +-- .../ui/experiment/ExperimentBrowserGrid.java | 3 + .../web/server/CommonClientService.java | 18 ++-- .../openbis/generic/server/CommonServer.java | 17 ++-- .../generic/server/CommonServerLogger.java | 8 +- .../server/business/bo/ExperimentBO.java | 7 +- .../server/business/bo/IExperimentBO.java | 3 +- .../server/business/bo/IMaterialBO.java | 3 +- .../generic/server/business/bo/ISampleBO.java | 3 +- .../server/business/bo/MaterialBO.java | 7 +- .../generic/server/business/bo/SampleBO.java | 9 +- .../openbis/generic/shared/ICommonServer.java | 68 +++++++------ .../experiment/GenericExperimentEditForm.java | 3 +- .../material/GenericMaterialEditForm.java | 2 +- .../sample/GenericSampleEditForm.java | 3 +- .../cisd/openbis/generic/SystemTestSuite.java | 1 + .../ui/experiment/ShowExperimentEditor.java | 53 +++++++++++ .../application/ui/util/GridTestUtils.java | 11 +++ .../generic/server/CommonServerTest.java | 19 ++-- .../shared/ICommonServer.java.expected | 68 +++++++------ .../experiment/FillExperimentEditForm.java | 95 +++++++++++++++++++ .../GenericExperimentEditorTest.java | 56 +++++++++++ 23 files changed, 363 insertions(+), 124 deletions(-) create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ShowExperimentEditor.java create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/FillExperimentEditForm.java create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditorTest.java 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 abc1d26bb66..107ecdf9770 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 @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; @@ -261,9 +262,9 @@ public interface ICommonClientService extends IClientService throws UserFailureException; /** - * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)} or - * {@link #prepareExportExperiments(TableExportCriteria)} has been invoked before and returned - * with an exportDataKey passed here as a parameter. + * Assumes that preparation of the export ({@link #prepareExportSamples(TableExportCriteria)} + * or {@link #prepareExportExperiments(TableExportCriteria)} has been invoked before and + * returned with an exportDataKey passed here as a parameter. */ public String getExportTable(String exportDataKey, String lineSeparator) throws UserFailureException; @@ -350,20 +351,21 @@ public interface ICommonClientService extends IClientService * Updates experiment. */ public void updateExperiment(String attachmentSessionKey, final String experimentIdentifier, - List<ExperimentProperty> properties, String newProjectIdentifier) + List<ExperimentProperty> properties, String newProjectIdentifier, Date version) throws UserFailureException; /** * Updates material. */ - public void updateMaterial(final String materialIdentifier, List<MaterialProperty> properties) - throws UserFailureException; + public void updateMaterial(final String materialIdentifier, List<MaterialProperty> properties, + Date version) throws UserFailureException; /** * Updates sample. */ public void updateSample(final String sampleIdentifier, List<SampleProperty> properties, - ExperimentIdentifier experimentIdentifierOrNull) throws UserFailureException; + ExperimentIdentifier experimentIdentifierOrNull, Date version) + throws UserFailureException; /** Deletes the specified data sets. */ public void deleteDataSets(List<String> dataSetCodes, String reason) 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 2111ef79d10..4abd04d10c6 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 @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client; +import java.util.Date; import java.util.List; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -303,24 +304,23 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync final AsyncCallback<Void> asyncCallback); /** - * @see ICommonClientService#updateExperiment(String, String, List,String) + * @see ICommonClientService#updateExperiment(String, String, List, String, Date) */ public void updateExperiment(String attachmentSessionKey, final String experimentIdentifier, - List<ExperimentProperty> properties, String newProjectIdentifier, + List<ExperimentProperty> properties, String newProjectIdentifier, Date version, final AsyncCallback<Void> asyncCallback) throws UserFailureException; /** - * @see ICommonClientService#updateMaterial(String, List) + * @see ICommonClientService#updateMaterial(String, List, Date) */ public void updateMaterial(final String materialIdentifier, List<MaterialProperty> properties, - final AsyncCallback<Void> asyncCallback) throws UserFailureException; + Date version, final AsyncCallback<Void> asyncCallback) throws UserFailureException; /** - * @see ICommonClientService#updateSample(String, List, ExperimentIdentifier) + * @see ICommonClientService#updateSample(String, List, ExperimentIdentifier, Date) */ public void updateSample(final String sampleIdentifier, List<SampleProperty> properties, - ExperimentIdentifier experimentIdentifierOrNull, final AsyncCallback<Void> asyncCallback) - throws UserFailureException; + ExperimentIdentifier experimentIdentifierOrNull, Date version, final AsyncCallback<Void> asyncCallback) throws UserFailureException; /** @see ICommonClientService#deleteDataSets(List, String) */ public void deleteDataSets(List<String> dataSetCodes, String reason, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java index ef6a1244263..06d8bb143d5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java @@ -64,6 +64,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyT */ public class ExperimentBrowserGrid extends AbstractBrowserGrid<Experiment, ExperimentModel> { + public static final String ID_SUFFIX_EDIT_BUTTON = "_edit-button"; + private static final String PREFIX = "experiment-browser"; public static final String BROWSER_ID = GenericConstants.ID_PREFIX + PREFIX; @@ -125,6 +127,7 @@ public class ExperimentBrowserGrid extends AbstractBrowserGrid<Experiment, Exper this.topToolbar.add(new SeparatorToolItem()); String editTitle = viewContext.getMessage(Dict.BUTTON_EDIT); Button editButton = createSelectedItemButton(editTitle, asShowEntityInvoker(true)); + editButton.setId(GRID_ID + ID_SUFFIX_EDIT_BUTTON); this.topToolbar.add(new AdapterToolItem(editButton)); } 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 eed4624d838..fd152a26249 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 @@ -21,6 +21,7 @@ import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DAT import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Date; import java.util.List; import javax.servlet.http.HttpSession; @@ -974,7 +975,7 @@ public final class CommonClientService extends AbstractClientService implements } public void updateExperiment(String sessionKey, String experimentIdentifier, - List<ExperimentProperty> properties, String newProjectIdentifier) + List<ExperimentProperty> properties, String newProjectIdentifier, Date version) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { @@ -999,7 +1000,8 @@ public final class CommonClientService extends AbstractClientService implements new ExperimentIdentifierFactory(experimentIdentifier).createIdentifier(); final ProjectIdentifier project = new ProjectIdentifierFactory(newProjectIdentifier).createIdentifier(); - commonServer.editExperiment(sessionToken, identifier, properties, attachments, project); + commonServer.editExperiment(sessionToken, identifier, properties, attachments, project, + version); } catch (final UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); @@ -1030,7 +1032,8 @@ public final class CommonClientService extends AbstractClientService implements } } - public void updateMaterial(String materialIdentifier, List<MaterialProperty> properties) + public void updateMaterial(String materialIdentifier, List<MaterialProperty> properties, + Date version) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { try @@ -1038,7 +1041,7 @@ public final class CommonClientService extends AbstractClientService implements final String sessionToken = getSessionToken(); final MaterialIdentifier identifier = MaterialIdentifier.tryParseIdentifier(materialIdentifier); - commonServer.editMaterial(sessionToken, identifier, properties); + commonServer.editMaterial(sessionToken, identifier, properties, version); } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); @@ -1046,10 +1049,7 @@ public final class CommonClientService extends AbstractClientService implements } - public void updateSample( - String sampleIdentifier, - List<SampleProperty> properties, - ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier experimentIdentifierOrNull) + public void updateSample(String sampleIdentifier, List<SampleProperty> properties,ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier experimentIdentifierOrNull, Date version) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { try @@ -1065,7 +1065,7 @@ public final class CommonClientService extends AbstractClientService implements .createBean(ExperimentIdentifier.class, experimentIdentifierOrNull); } commonServer.editSample(sessionToken, identifier, properties, - convExperimentIdentifierOrNull); + convExperimentIdentifierOrNull,version); } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); 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 38ec5f23137..80552c80026 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 @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -643,7 +644,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements public void editExperiment(String sessionToken, ExperimentIdentifier identifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, - ProjectIdentifier newProjectIdentifier) + ProjectIdentifier newProjectIdentifier, Date version) { final Session session = getSessionManager().getSession(sessionToken); if (newProjectIdentifier.equals(identifier) == false) @@ -653,7 +654,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements } final IExperimentBO experimentBO = businessObjectFactory.createExperimentBO(session); - experimentBO.edit(identifier, properties, attachments, newProjectIdentifier); + experimentBO.edit(identifier, properties, attachments, newProjectIdentifier, version); experimentBO.save(); } @@ -679,8 +680,7 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements final List<SamplePE> samples = sampleTable.getSamples(); if (samples.size() > 0) { - checkExperimentGroupMatches(samples.get(0).getSampleIdentifier(), - newProjectIdentifier); + checkExperimentGroupMatches(samples.get(0).getSampleIdentifier(), newProjectIdentifier); } } @@ -708,21 +708,22 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements } public void editMaterial(String sessionToken, MaterialIdentifier identifier, - List<MaterialProperty> properties) + List<MaterialProperty> properties, Date version) { final Session session = getSessionManager().getSession(sessionToken); final IMaterialBO materialBO = businessObjectFactory.createMaterialBO(session); - materialBO.edit(identifier, properties); + materialBO.edit(identifier, properties, version); materialBO.save(); } public void editSample(String sessionToken, SampleIdentifier identifier, - List<SampleProperty> properties, ExperimentIdentifier experimentIdentifierOrNull) + List<SampleProperty> properties, ExperimentIdentifier experimentIdentifierOrNull, + Date version) { final Session session = getSessionManager().getSession(sessionToken); final ISampleBO sampleBO = businessObjectFactory.createSampleBO(session); - sampleBO.edit(identifier, properties, experimentIdentifierOrNull); + sampleBO.edit(identifier, properties, experimentIdentifierOrNull, version); sampleBO.save(); } 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 11cbffd165f..df7dca9dacd 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 @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server; import java.util.Arrays; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.authentication.ISessionManager; @@ -313,7 +314,7 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe public void editExperiment(String sessionToken, ExperimentIdentifier experimentIdentifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, - ProjectIdentifier newProjectIdentifierOrNull) + ProjectIdentifier newProjectIdentifierOrNull, Date version) { logTracking(sessionToken, "edit_experiment", "EXPERIMENT(%s) ATTACHMENTS_ADDED(%s) NEW_PROJECT(%s)", experimentIdentifier, @@ -326,14 +327,15 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe } public void editMaterial(String sessionToken, MaterialIdentifier identifier, - List<MaterialProperty> properties) + List<MaterialProperty> properties, Date version) { logTracking(sessionToken, "edit_material", "MATERIAL(%s)", identifier); } public void editSample(String sessionToken, SampleIdentifier identifier, - List<SampleProperty> properties, ExperimentIdentifier experimentIdentifierOrNull) + List<SampleProperty> properties, ExperimentIdentifier experimentIdentifierOrNull, + Date version) { logTracking(sessionToken, "edit_sample", "SAMPLE(%s), CHANGE_TO_EXPERIMENT(%S)", identifier, experimentIdentifierOrNull); 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 6a131248e6d..9d7c58a8158 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 @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Set; @@ -292,9 +293,13 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper } public void edit(ExperimentIdentifier identifier, List<ExperimentProperty> properties, - List<AttachmentPE> newAttachments, ProjectIdentifier newProjectIdentifier) + List<AttachmentPE> newAttachments, ProjectIdentifier newProjectIdentifier, Date version) { loadByExperimentIdentifier(identifier); + if (experiment.getModificationDate().equals(version) == false) + { + throw new UserFailureException("Experiment has been modified in the meantime."); + } updateProperties(properties); updateProject(newProjectIdentifier); for (AttachmentPE a : newAttachments) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java index 0cbef8d614a..f67c5ba25d0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentProperty; @@ -65,5 +66,5 @@ public interface IExperimentBO extends IBusinessObject * Changes given experiment. Currently allowed changes: properties. */ public void edit(ExperimentIdentifier identifier, List<ExperimentProperty> properties, - List<AttachmentPE> attachments, ProjectIdentifier newProjectIdentifier); + List<AttachmentPE> attachments, ProjectIdentifier newProjectIdentifier, Date version); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IMaterialBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IMaterialBO.java index 8db93a800de..3ce9f521daa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IMaterialBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IMaterialBO.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; @@ -36,5 +37,5 @@ public interface IMaterialBO extends IBusinessObject /** * Changes given material. Currently allowed changes: properties. */ - public void edit(MaterialIdentifier identifier, List<MaterialProperty> properties); + public void edit(MaterialIdentifier identifier, List<MaterialProperty> properties, Date version); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ISampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ISampleBO.java index a97f35aa122..e2700c022c2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ISampleBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ISampleBO.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.common.exceptions.UserFailureException; @@ -82,5 +83,5 @@ public interface ISampleBO * sample is connected. */ void edit(SampleIdentifier identifier, List<SampleProperty> properties, - ExperimentIdentifier experimentIdentifierOrNull); + ExperimentIdentifier experimentIdentifierOrNul, Date version); } 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 4d006a2d9ae..13af410ca16 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 @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.springframework.dao.DataAccessException; @@ -99,9 +100,13 @@ public final class MaterialBO extends AbstractBusinessObject implements IMateria } } - public void edit(MaterialIdentifier identifier, List<MaterialProperty> properties) + public void edit(MaterialIdentifier identifier, List<MaterialProperty> properties, Date version) { loadByMaterialIdentifier(identifier); + if (material.getModificationDate().equals(version) == false) + { + throw new UserFailureException("Material has been modified in the meantime."); + } updateProperties(properties); dataChanged = true; } 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 d32d095ef76..99bee891422 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 @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.springframework.dao.DataAccessException; @@ -198,9 +199,13 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam } public void edit(SampleIdentifier identifier, List<SampleProperty> properties, - ExperimentIdentifier experimentIdentifierOrNull) + ExperimentIdentifier experimentIdentifierOrNull, Date version) { loadBySampleIdentifier(identifier); + if (sample.getModificationDate().equals(version) == false) + { + throw new UserFailureException("Sample has been modified in the meantime."); + } updateProperties(properties); updateExperiment(experimentIdentifierOrNull); dataChanged = true; @@ -265,7 +270,7 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam { if (validProcedureOrNull == null) { - return (newExperimentOrNull == null); + return newExperimentOrNull == null; } else { if (newExperimentOrNull == null) 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 f8a3ac82ac6..ddc1db0ffef 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 @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared; +import java.util.Date; import java.util.List; import org.springframework.transaction.annotation.Transactional; @@ -132,11 +133,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void registerGroupRole( - String sessionToken, - RoleCode roleCode, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) GroupIdentifier identifier, - String person); + public void registerGroupRole(String sessionToken, RoleCode roleCode, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + GroupIdentifier identifier, String person); /** * Registers a new instance role. @@ -150,11 +149,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void deleteGroupRole( - String sessionToken, - RoleCode roleCode, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) GroupIdentifier groupIdentifier, - String person); + public void deleteGroupRole(String sessionToken, RoleCode roleCode, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + GroupIdentifier groupIdentifier, String person); /** * Deletes role described by given role code and user id. @@ -189,10 +186,10 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExperimentPE> listExperiments( - final String sessionToken, + public List<ExperimentPE> listExperiments(final String sessionToken, ExperimentTypePE experimentType, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier project); + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier project); /** * For given {@link SampleIdentifier} returns the corresponding list of {@link ExternalDataPE}. @@ -201,9 +198,9 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExternalDataPE> listExternalData( - final String sessionToken, - @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) final SampleIdentifier identifier); + public List<ExternalDataPE> listExternalData(final String sessionToken, + @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) + final SampleIdentifier identifier); /** * For given {@link ExperimentIdentifier} returns the corresponding list of @@ -213,9 +210,9 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExternalDataPE> listExternalData( - final String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) final ExperimentIdentifier identifier); + public List<ExternalDataPE> listExternalData(final String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + final ExperimentIdentifier identifier); /** * Performs an <i>Hibernate Search</i> based on given parameters. @@ -291,10 +288,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void registerProject( - String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier projectIdentifier, - String description, String leaderId); + public void registerProject(String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier projectIdentifier, String description, String leaderId); /** * Performs an <i>Hibernate Search</i> based on given parameters. @@ -350,20 +346,20 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) public void deleteDataSets(String sessionToken, - @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> dataSetCodes, - String reason); + @AuthorizationGuard(guardClass = DataSetCodePredicate.class) + List<String> dataSetCodes, String reason); /** * Saves changed experiment. */ @Transactional @RolesAllowed(RoleSet.USER) - public void editExperiment( - String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ExperimentIdentifier experimentIdentifier, - List<ExperimentProperty> properties, + public void editExperiment(String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ExperimentIdentifier experimentIdentifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier newProjectIdentifier); + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier newProjectIdentifier, Date version); /** * Saves changed material. @@ -371,18 +367,18 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleSet.INSTANCE_ADMIN) public void editMaterial(String sessionToken, MaterialIdentifier identifier, - List<MaterialProperty> properties); + List<MaterialProperty> properties, Date version); /** * Saves changed sample. */ @Transactional @RolesAllowed(RoleSet.USER) - public void editSample( - String sessionToken, - @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) SampleIdentifier identifier, - List<SampleProperty> properties, - @AuthorizationGuard(guardClass = NullableGroupIdentifierPredicate.class) ExperimentIdentifier experimentIdentifierOrNull); + public void editSample(String sessionToken, + @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) + SampleIdentifier identifier, List<SampleProperty> properties, + @AuthorizationGuard(guardClass = NullableGroupIdentifierPredicate.class) + ExperimentIdentifier experimentIdentifierOrNull, Date version); /** Lists vocabulary terms of a given vocabulary. Includes terms usage statistics. */ @Transactional diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java index da5ec1b2e60..c1aba1aec31 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditForm.java @@ -130,7 +130,8 @@ public final class GenericExperimentEditForm final List<ExperimentProperty> properties = extractProperties(); final String newProjectIdentifier = extractIdentifier(); viewContext.getCommonService().updateExperiment(sessionKey, entity.getIdentifier(), - properties, newProjectIdentifier, new RegisterExperimentCallback(viewContext)); + properties, newProjectIdentifier, entity.getModificationDate(), + new RegisterExperimentCallback(viewContext)); } private String extractIdentifier() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java index 012e5398448..a7a8b045d89 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialEditForm.java @@ -62,7 +62,7 @@ public final class GenericMaterialEditForm { final List<MaterialProperty> properties = extractProperties(); viewContext.getCommonService().updateMaterial(entity.getIdentifier(), properties, - new RegisterMaterialCallback(viewContext)); + entity.getModificationDate(), new RegisterMaterialCallback(viewContext)); } public final class RegisterMaterialCallback extends AbstractAsyncCallback<Void> diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java index 4716d657e82..4f4040fd394 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java @@ -87,7 +87,8 @@ public final class GenericSampleEditForm { final List<SampleProperty> properties = extractProperties(); viewContext.getCommonService().updateSample(entity.getIdentifier(), properties, - experimentField.getValue(), new RegisterSampleCallback(viewContext)); + experimentField.getValue(), entity.getModificationDate(), + new RegisterSampleCallback(viewContext)); } public final class RegisterSampleCallback extends AbstractAsyncCallback<Void> diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/SystemTestSuite.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/SystemTestSuite.java index 690073426d2..6d573cd0e97 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/SystemTestSuite.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/SystemTestSuite.java @@ -63,6 +63,7 @@ public class SystemTestSuite extends GWTTestSuite // (NS_ERROR_DOM_SECURITY_ERR): Security error on CC // testSuite.addTestSuite(GenericExperimentRegistrationTest.class); testSuite.addTestSuite(GenericExperimentViewerTest.class); + // testSuite.addTestSuite(GenericExperimentEditorTest.class); testSuite.addTestSuite(PropertyTypeBrowserTest.class); testSuite.addTestSuite(PropertyTypeAssignmentBrowserTest.class); testSuite.addTestSuite(EntityTypePropertyTypeAssignmentTest.class); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ShowExperimentEditor.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ShowExperimentEditor.java new file mode 100644 index 00000000000..02ebd2c7db0 --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ShowExperimentEditor.java @@ -0,0 +1,53 @@ +/* + * Copyright 2008 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.experiment; + +import com.extjs.gxt.ui.client.widget.grid.Grid; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ExperimentModel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.experiment.CommonExperimentColDefKind; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.util.GridTestUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand; +import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.GWTTestUtil; + +/** + * A {@link AbstractDefaultTestCommand} extension for showing a experiment editor. + * + * @author Izabela Adamczyk + */ +public class ShowExperimentEditor extends AbstractDefaultTestCommand +{ + private final String code; + + public ShowExperimentEditor(final String code) + { + this.code = code; + } + + @SuppressWarnings("unchecked") + public void execute() + { + final Widget widget = GWTTestUtil.getWidgetWithID(ExperimentBrowserGrid.GRID_ID); + assertTrue(widget instanceof Grid); + final Grid<ExperimentModel> table = (Grid<ExperimentModel>) widget; + GridTestUtils.fireSingleClick(table, CommonExperimentColDefKind.CODE.id(), code); + GWTTestUtil.clickButtonWithID(ExperimentBrowserGrid.GRID_ID + + ExperimentBrowserGrid.ID_SUFFIX_EDIT_BUTTON); + + } +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/util/GridTestUtils.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/util/GridTestUtils.java index 6b038f6d3e8..e76ba012d5c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/util/GridTestUtils.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/util/GridTestUtils.java @@ -57,6 +57,17 @@ public class GridTestUtils table.fireEvent(Events.CellDoubleClick, event); } + /** + * Fires a single click event on a first row which contains given value in a column with a + * specified id. + */ + public static <T extends ModelData> void fireSingleClick(final Grid<T> table, String columnId, + String columnValue) + { + GridEvent event = createGridEvent(table, columnId, columnValue); + table.fireEvent(Events.CellClick, event); + } + private static <T extends ModelData> GridEvent createGridEvent(final Grid<T> table, String columnId, String columnValue) { 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 47524694dcc..ce865884a9b 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 @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Date; import java.util.List; import org.jmock.Expectations; @@ -791,22 +792,22 @@ public final class CommonServerTest extends AbstractServerTestCase @Test public void testEditMaterialNothingChanged() throws Exception { - final MaterialIdentifier identifier = - new MaterialIdentifier(MATERIAL_1, MATERIAL_TYPE_1); + final MaterialIdentifier identifier = new MaterialIdentifier(MATERIAL_1, MATERIAL_TYPE_1); final List<MaterialProperty> properties = new ArrayList<MaterialProperty>(); prepareGetSession(); + final Date version = new Date(); context.checking(new Expectations() { { one(commonBusinessObjectFactory).createMaterialBO(SESSION); will(returnValue(materialBO)); - one(materialBO).edit(identifier, properties); + one(materialBO).edit(identifier, properties, version); one(materialBO).save(); } }); - createServer().editMaterial(SESSION_TOKEN, identifier, properties); + createServer().editMaterial(SESSION_TOKEN, identifier, properties, version); context.assertIsSatisfied(); } @@ -818,18 +819,19 @@ public final class CommonServerTest extends AbstractServerTestCase DATABASE_1, GROUP_1)), SAMPLE_1); final List<SampleProperty> properties = new ArrayList<SampleProperty>(); prepareGetSession(); + final Date version = new Date(); context.checking(new Expectations() { { one(commonBusinessObjectFactory).createSampleBO(SESSION); will(returnValue(sampleBO)); - one(sampleBO).edit(identifier, properties, null); + one(sampleBO).edit(identifier, properties, null, version); one(sampleBO).save(); } }); - createServer().editSample(SESSION_TOKEN, identifier, properties, null); + createServer().editSample(SESSION_TOKEN, identifier, properties, null, version); context.assertIsSatisfied(); } @@ -843,6 +845,7 @@ public final class CommonServerTest extends AbstractServerTestCase final ProjectIdentifier newProjectIdentifier = new ProjectIdentifier(DATABASE_1, GROUP_1, PROJECT_1); prepareGetSession(); + final Date version = new Date(); context.checking(new Expectations() { { @@ -850,13 +853,13 @@ public final class CommonServerTest extends AbstractServerTestCase will(returnValue(experimentBO)); one(experimentBO).edit(identifier, properties, attachments, - newProjectIdentifier); + newProjectIdentifier, version); one(experimentBO).save(); } }); createServer().editExperiment(SESSION_TOKEN, identifier, properties, attachments, - newProjectIdentifier); + newProjectIdentifier, version); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected index 08d404b56f0..f06f868779a 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared; +import java.util.Date; import java.util.List; import org.springframework.transaction.annotation.Transactional; @@ -132,11 +133,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void registerGroupRole( - String sessionToken, - RoleCode roleCode, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) GroupIdentifier identifier, - String person); + public void registerGroupRole(String sessionToken, RoleCode roleCode, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + GroupIdentifier identifier, String person); /** * Registers a new instance role. @@ -150,11 +149,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void deleteGroupRole( - String sessionToken, - RoleCode roleCode, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) GroupIdentifier groupIdentifier, - String person); + public void deleteGroupRole(String sessionToken, RoleCode roleCode, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + GroupIdentifier groupIdentifier, String person); /** * Deletes role described by given role code and user id. @@ -189,10 +186,10 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExperimentPE> listExperiments( - final String sessionToken, + public List<ExperimentPE> listExperiments(final String sessionToken, ExperimentTypePE experimentType, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier project); + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier project); /** * For given {@link SampleIdentifier} returns the corresponding list of {@link ExternalDataPE}. @@ -201,9 +198,9 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExternalDataPE> listExternalData( - final String sessionToken, - @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) final SampleIdentifier identifier); + public List<ExternalDataPE> listExternalData(final String sessionToken, + @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) + final SampleIdentifier identifier); /** * For given {@link ExperimentIdentifier} returns the corresponding list of @@ -213,9 +210,9 @@ public interface ICommonServer extends IServer */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) - public List<ExternalDataPE> listExternalData( - final String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) final ExperimentIdentifier identifier); + public List<ExternalDataPE> listExternalData(final String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + final ExperimentIdentifier identifier); /** * Performs an <i>Hibernate Search</i> based on given parameters. @@ -291,10 +288,9 @@ public interface ICommonServer extends IServer */ @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) - public void registerProject( - String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier projectIdentifier, - String description, String leaderId); + public void registerProject(String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier projectIdentifier, String description, String leaderId); /** * Performs an <i>Hibernate Search</i> based on given parameters. @@ -350,20 +346,20 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleSet.GROUP_ADMIN) public void deleteDataSets(String sessionToken, - @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> dataSetCodes, - String reason); + @AuthorizationGuard(guardClass = DataSetCodePredicate.class) + List<String> dataSetCodes, String reason); /** * Saves changed experiment. */ @Transactional @RolesAllowed(RoleSet.USER) - public void editExperiment( - String sessionToken, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ExperimentIdentifier experimentIdentifier, - List<ExperimentProperty> properties, + public void editExperiment(String sessionToken, + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ExperimentIdentifier experimentIdentifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, - @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) ProjectIdentifier newProjectIdentifier); + @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) + ProjectIdentifier newProjectIdentifier, Date version); /** * Saves changed material. @@ -371,18 +367,18 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleSet.INSTANCE_ADMIN) public void editMaterial(String sessionToken, MaterialIdentifier identifier, - List<MaterialProperty> properties); + List<MaterialProperty> properties, Date version); /** * Saves changed sample. */ @Transactional @RolesAllowed(RoleSet.USER) - public void editSample( - String sessionToken, - @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) SampleIdentifier identifier, - List<SampleProperty> properties, - @AuthorizationGuard(guardClass = NullableGroupIdentifierPredicate.class) ExperimentIdentifier experimentIdentifierOrNull); + public void editSample(String sessionToken, + @AuthorizationGuard(guardClass = SampleOwnerIdentifierPredicate.class) + SampleIdentifier identifier, List<SampleProperty> properties, + @AuthorizationGuard(guardClass = NullableGroupIdentifierPredicate.class) + ExperimentIdentifier experimentIdentifierOrNull, Date version); /** Lists vocabulary terms of a given vocabulary. Includes terms usage statistics. */ @Transactional diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/FillExperimentEditForm.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/FillExperimentEditForm.java new file mode 100644 index 00000000000..5c24a981b1c --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/FillExperimentEditForm.java @@ -0,0 +1,95 @@ +/* + * Copyright 2008 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.plugin.generic.client.web.client.application.experiment; + +import java.util.ArrayList; +import java.util.List; + +import com.extjs.gxt.ui.client.widget.form.Field; +import com.google.gwt.user.client.ui.ListBox; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ProjectSelectionWidget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ControlledVocabullaryField.VocabularyList; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand; +import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.GWTTestUtil; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.PropertyField; + +/** + * A {@link AbstractDefaultTestCommand} extension for editing experiment. + * + * @author Izabela Adamczyk + */ +public final class FillExperimentEditForm extends AbstractDefaultTestCommand +{ + + private final String projectNameOrNull; + + private final List<PropertyField> properties; + + public FillExperimentEditForm(final String project) + { + this.projectNameOrNull = project; + this.properties = new ArrayList<PropertyField>(); + addCallbackClass(ProjectSelectionWidget.ListProjectsCallback.class); + } + + public final FillExperimentEditForm addProperty(final PropertyField property) + { + assert property != null : "Unspecified property"; + properties.add(property); + return this; + } + + // + // AbstractDefaultTestCommand + // + + public final void execute() + { + + final ProjectSelectionWidget projectSelector = + (ProjectSelectionWidget) GWTTestUtil.getWidgetWithID(ProjectSelectionWidget.ID + + ProjectSelectionWidget.SUFFIX + GenericExperimentRegistrationForm.ID); + if (projectNameOrNull != null) + { + GWTUtils.setSelectedItem(projectSelector, ModelDataPropertyNames.CODE, + projectNameOrNull); + } + + for (final PropertyField property : properties) + { + final Widget widget = GWTTestUtil.getWidgetWithID(property.getPropertyFieldId()); + if (widget instanceof Field) + { + ((Field<?>) widget).setRawValue(property.getPropertyFieldValue()); + } else if (widget instanceof VocabularyList) + { + ListBox list = (VocabularyList) widget; + GWTUtils.setSelectedItem(list, property.getPropertyFieldValue()); + } else + { + throw new IllegalStateException("Wrong widget type"); + } + } + GWTTestUtil.clickButtonWithID(GenericExperimentRegistrationForm.ID + + AbstractRegistrationForm.SAVE_BUTTON); + } +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditorTest.java new file mode 100644 index 00000000000..75f6c4534a1 --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentEditorTest.java @@ -0,0 +1,56 @@ +/* + * Copyright 2008 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.plugin.generic.client.web.client.application.experiment; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ListExperiments; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ShowExperimentEditor; +import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.PropertyField; + +/** + * A {@link AbstractGWTTestCase} extension to test {@link GenericExperimentEditForm}. + * + * @author Izabela Adamczyk + */ +public class GenericExperimentEditorTest extends AbstractGWTTestCase +{ + + private static final String SIRNA_HCS = "SIRNA_HCS"; + + private static final String NEMO = "NEMO (CISD)"; + + private static final String EXP1 = "EXP1"; + + public final void testShowExperimentDetails() + { + prepareShowExperimentEditor(NEMO, SIRNA_HCS, EXP1); + remoteConsole.prepare(new FillExperimentEditForm("NEMO").addProperty(new PropertyField( + GenericExperimentRegistrationForm.ID + "user-description", + "New test experiment description."))); + + launchTest(60000); + } + + private void prepareShowExperimentEditor(final String projectName, + final String experimentTypeName, final String experimentCode) + { + loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_BROWSE); + remoteConsole.prepare(new ListExperiments(projectName, experimentTypeName)); + remoteConsole.prepare(new ShowExperimentEditor(experimentCode)); + } +} -- GitLab