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 e8e8fb81878ef082dc7f5a1e4ddb264bfb463bbd..4c1724d67c8547d7db5fb5f82a2b4e413ae17eb3 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 @@ -349,7 +349,7 @@ public interface ICommonClientService extends IClientService * Updates experiment. */ public void updateExperiment(String attachmentSessionKey, final String experimentIdentifier, - List<ExperimentProperty> properties, String newProjectIdentifierOrNull) + List<ExperimentProperty> properties, String newProjectIdentifier) throws UserFailureException; /** 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 6b8d03f0331288f28c6ba2246b5f4c48783725ab..54872c1bbada680d8d4722703a0b759802561c7a 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 @@ -134,7 +134,8 @@ public final class ExperimentBrowserGrid extends AbstractBrowserGrid<Experiment, { return new EditableExperiment(selectedType.getExperimentTypePropertyTypes(), experiment .getProperties(), selectedType, experiment.getIdentifier(), experiment.getId(), - experiment.getModificationDate(), experiment.getProject().getIdentifier()); + experiment.getModificationDate(), experiment.getProject().getIdentifier(), + experiment.getCode()); } @Override 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 55d9da4cddb78af1fbe954b99c6ad194a25e4c50..cd36cec780f67f760be7359c0a87e484b1302d6b 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 @@ -998,8 +998,7 @@ public final class CommonClientService extends AbstractClientService implements final ExperimentIdentifier identifier = new ExperimentIdentifierFactory(experimentIdentifier).createIdentifier(); final ProjectIdentifier project = - newProjectIdentifier == null ? null : new ProjectIdentifierFactory( - newProjectIdentifier).createIdentifier(); + new ProjectIdentifierFactory(newProjectIdentifier).createIdentifier(); commonServer.editExperiment(sessionToken, identifier, properties, attachments, project); } catch (final UserFailureException 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 520b9e258a2d72d270ed93211c47066a24703ce7..8fbfc5f9d77b2a45b0b99ade1bfa0cae9c2fbe6a 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 @@ -643,11 +643,22 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements public void editExperiment(String sessionToken, ExperimentIdentifier identifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, - ProjectIdentifier newProjectIdentifierOrNull) + ProjectIdentifier newProjectIdentifier) { final Session session = getSessionManager().getSession(sessionToken); + if (newProjectIdentifier.equals(identifier) == false) + { + final IExternalDataTable externalDataTable = + businessObjectFactory.createExternalDataTable(session); + externalDataTable.loadByExperimentIdentifier(identifier); + if (externalDataTable.getExternalData().size() > 0) + { + throw new UserFailureException( + "Changing the project of experiment containing data sets is not allowed."); + } + } final IExperimentBO experimentBO = businessObjectFactory.createExperimentBO(session); - experimentBO.edit(identifier, properties, attachments, newProjectIdentifierOrNull); + experimentBO.edit(identifier, properties, attachments, newProjectIdentifier); experimentBO.save(); } 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 e61ff86b096fa5fc6c0118408599292011ddb697..6a131248e6d66704a4627d93ed76ed52c1a59077 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 @@ -292,11 +292,11 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper } public void edit(ExperimentIdentifier identifier, List<ExperimentProperty> properties, - List<AttachmentPE> newAttachments, ProjectIdentifier newProjectIdentifierOrNull) + List<AttachmentPE> newAttachments, ProjectIdentifier newProjectIdentifier) { loadByExperimentIdentifier(identifier); updateProperties(properties); - updateProject(newProjectIdentifierOrNull); + updateProject(newProjectIdentifier); for (AttachmentPE a : newAttachments) { addAttachment(a); @@ -304,22 +304,16 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper dataChanged = true; } - private void updateProject(ProjectIdentifier newProjectIdentifierOrNull) + private void updateProject(ProjectIdentifier newProjectIdentifier) { - if (newProjectIdentifierOrNull != null) + ProjectPE project = + getProjectDAO().tryFindProject(newProjectIdentifier.getDatabaseInstanceCode(), + newProjectIdentifier.getGroupCode(), newProjectIdentifier.getProjectCode()); + if (project == null) { - ProjectPE project = - getProjectDAO().tryFindProject( - newProjectIdentifierOrNull.getDatabaseInstanceCode(), - newProjectIdentifierOrNull.getGroupCode(), - newProjectIdentifierOrNull.getProjectCode()); - if (project == null) - { - throw UserFailureException.fromTemplate(ERR_PROJECT_NOT_FOUND, - newProjectIdentifierOrNull); - } - experiment.setProject(project); + throw UserFailureException.fromTemplate(ERR_PROJECT_NOT_FOUND, newProjectIdentifier); } + experiment.setProject(project); } private void updateProperties(List<ExperimentProperty> properties) 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 f98a3546fee312ae24b92432d5b9318068f46608..ed44d92b581615829e4e4e383ed836bc939b5b9f 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 @@ -357,7 +357,7 @@ public interface ICommonServer extends IServer ExperimentIdentifier experimentIdentifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) - ProjectIdentifier newProjectIdentifierOrNull); + ProjectIdentifier newProjectIdentifier); /** * Saves changed material. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/GroupIdentifierPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/GroupIdentifierPredicate.java index 6ac21c6c110947b904a70e9185cd93a210b8da06..89b88646fd660534fc2dc46385331122df98d9be 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/GroupIdentifierPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/GroupIdentifierPredicate.java @@ -30,7 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.util.GroupCodeHelper; * * @author Christian Ribeaud */ -public final class GroupIdentifierPredicate extends AbstractGroupPredicate<GroupIdentifier> +public class GroupIdentifierPredicate extends AbstractGroupPredicate<GroupIdentifier> { public GroupIdentifierPredicate() { @@ -47,7 +47,7 @@ public final class GroupIdentifierPredicate extends AbstractGroupPredicate<Group } @Override - final Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, + Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, final GroupIdentifier groupIdentifier) { assert inited : "Predicate has not been initialized"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableEntity.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableEntity.java index 64b1bf6a329134da076c6ace6b6e9892c23f10d9..c72b1ad356efadcbe1fdd4f3d1092abbd5fc3877 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableEntity.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableEntity.java @@ -34,7 +34,7 @@ public class EditableEntity<T extends EntityType, S extends EntityTypePropertyTy private final T type; - private final String identifier; + protected String identifier; private final Long id; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableExperiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableExperiment.java index 64232ca286146e37a8221a7fa7de9ab8f0e3c274..5e258c5ae430277c2e93cac0db73045de80b3510 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableExperiment.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EditableExperiment.java @@ -28,12 +28,15 @@ public class EditableExperiment extends private final String project; + private String code; + public EditableExperiment(List<ExperimentTypePropertyType> etpts, List<ExperimentProperty> properties, ExperimentType type, String identifier, Long id, - Date modificationDate, String project) + Date modificationDate, String project, String code) { super(EntityKind.EXPERIMENT, etpts, properties, type, identifier, id, modificationDate); this.project = project; + this.code = code; } public String getProjectIdentifier() @@ -41,4 +44,14 @@ public class EditableExperiment extends return project; } + public void setIdentifier(String identifier) + { + this.identifier = identifier; + } + + public String getCode() + { + return code; + } + } 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 1ac2ea4d5e479454d817c246d001203b0e19b32a..e97ddcbef32870bfd8ed1265e019d08bf3508fd7 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 @@ -125,22 +125,14 @@ public final class GenericExperimentEditForm private void save() { final List<ExperimentProperty> properties = extractProperties(); - final String newProjectIdentifierOrNull = extractIdentifier(); - viewContext.getCommonService() - .updateExperiment(sessionKey, entity.getIdentifier(), properties, - newProjectIdentifierOrNull, new RegisterExperimentCallback(viewContext)); + final String newProjectIdentifier = extractIdentifier(); + viewContext.getCommonService().updateExperiment(sessionKey, entity.getIdentifier(), + properties, newProjectIdentifier, new RegisterExperimentCallback(viewContext)); } private String extractIdentifier() { - final String newIdentifier = projectChooser.tryGetSelectedProject().getIdentifier(); - if (originalProjectIdentifier.equals(newIdentifier)) - { - return null; - } else - { - return newIdentifier; - } + return projectChooser.tryGetSelectedProject().getIdentifier(); } @Override @@ -202,6 +194,8 @@ public final class GenericExperimentEditForm protected void updateCheckPageWidgets() { projectChooser.updateOriginalValue(); + originalProjectIdentifier = projectChooser.tryGetSelectedProject().getIdentifier(); + entity.setIdentifier(originalProjectIdentifier + "/" + entity.getCode()); attachmentsInfo.setHtml(getAttachmentInfoText(attachmentManager.attachmentsDefined())); } 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 674440954b13443e3e5b469fc66cd9ed656f35df..01ec154a0048943e538b69c7a59eb2ff6ef968e5 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 @@ -357,7 +357,7 @@ public interface ICommonServer extends IServer ExperimentIdentifier experimentIdentifier, List<ExperimentProperty> properties, List<AttachmentPE> attachments, @AuthorizationGuard(guardClass = GroupIdentifierPredicate.class) - ProjectIdentifier newProjectIdentifierOrNull); + ProjectIdentifier newProjectIdentifier); /** * Saves changed material.