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 5b9be0a09e750bbb048faff749971dcc5e3628b2..b7f992069b06e422c26d38cd64f0721489263136 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 @@ -2775,7 +2775,21 @@ public final class CommonClientService extends AbstractClientService implements try { final String sessionToken = getSessionToken(); - commonServer.updateProperty(sessionToken, kind, entityId, propertyColumnName, value); + switch (kind) + { + case DATA_SET: + commonServer.updateDataSetProperty(sessionToken, entityId, propertyColumnName, value); + break; + case EXPERIMENT: + commonServer.updateExperimentProperty(sessionToken, entityId, propertyColumnName, value); + break; + case MATERIAL: + commonServer.updateMaterialProperty(sessionToken, entityId, propertyColumnName, value); + break; + case SAMPLE: + commonServer.updateSampleProperty(sessionToken, entityId, propertyColumnName, value); + break; + } } catch (final 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 8cb8c7999764e3701573c97ec6c89a92c9935aec..fb73b4c172ec81c34ddc01027e612cfa15298977 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 @@ -2487,56 +2487,15 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt return dataStores.get(0).getDownloadUrl(); } - public void updateProperty(String sessionToken, EntityKind kind, TechId entityId, - String propertyTypeCode, String value) + public void updateDataSetProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) { checkSession(sessionToken); - Map<String, String> properties = new HashMap<String, String>(); - properties.put(CodeConverter.getPropertyTypeCode(propertyTypeCode), value); - switch (kind) - { - case MATERIAL: - updateMaterialProperties(sessionToken, entityId, properties); - break; - case EXPERIMENT: - updateExperimentProperties(sessionToken, entityId, properties); - break; - case SAMPLE: - EntityHelper.updateSampleProperties(this, sessionToken, entityId, properties); - break; - case DATA_SET: - updateDataSetProperties(sessionToken, entityId, properties); - break; - } - } - - private void updateMaterialProperties(String sessionToken, TechId entityId, - Map<String, String> properties) - { - Date modificationDate = getDAOFactory().getMaterialDAO().tryGetByTechId(entityId).getModificationDate(); - updateMaterial(sessionToken, entityId, EntityHelper.translatePropertiesMapToList(properties), modificationDate); - } - - private void updateExperimentProperties(String sessionToken, TechId entityId, - Map<String, String> properties) - { - Experiment experiment = getExperimentInfo(sessionToken, entityId); - ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO(); - updates.setVersion(experiment.getModificationDate()); - updates.setExperimentId(entityId); - updates.setAttachments(Collections.<NewAttachment>emptySet()); - updates.setProjectIdentifier(new ProjectIdentifierFactory(experiment.getProject().getIdentifier()).createIdentifier()); - updates.setProperties(EntityHelper.translatePropertiesMapToList(properties)); - updateExperiment(sessionToken, updates); - } - - private void updateDataSetProperties(String sessionToken, TechId dataSetID, - Map<String, String> properties) - { - ExternalData dataSet = getDataSetInfo(sessionToken, dataSetID); + ExternalData dataSet = getDataSetInfo(sessionToken, entityId); DataSetUpdatesDTO updates = new DataSetUpdatesDTO(); - updates.setDatasetId(dataSetID); + updates.setDatasetId(entityId); updates.setVersion(dataSet.getModificationDate()); + Map<String, String> properties = createPropertiesMap(propertyColumnName, value); updates.setProperties(EntityHelper.translatePropertiesMapToList(properties)); Experiment exp = dataSet.getExperiment(); if (exp != null) @@ -2554,5 +2513,47 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } updateDataSet(sessionToken, updates); } + + public void updateExperimentProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + checkSession(sessionToken); + Experiment experiment = getExperimentInfo(sessionToken, entityId); + ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO(); + updates.setVersion(experiment.getModificationDate()); + updates.setExperimentId(entityId); + updates.setAttachments(Collections.<NewAttachment> emptySet()); + updates.setProjectIdentifier(new ProjectIdentifierFactory(experiment.getProject() + .getIdentifier()).createIdentifier()); + Map<String, String> properties = createPropertiesMap(propertyColumnName, value); + updates.setProperties(EntityHelper.translatePropertiesMapToList(properties)); + updateExperiment(sessionToken, updates); + } + + public void updateSampleProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + checkSession(sessionToken); + Map<String, String> properties = createPropertiesMap(propertyColumnName, value); + EntityHelper.updateSampleProperties(this, sessionToken, entityId, properties); + } + + public void updateMaterialProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + checkSession(sessionToken); + Date modificationDate = + getDAOFactory().getMaterialDAO().tryGetByTechId(entityId).getModificationDate(); + Map<String, String> properties = createPropertiesMap(propertyColumnName, value); + updateMaterial(sessionToken, entityId, + EntityHelper.translatePropertiesMapToList(properties), modificationDate); + } + + private Map<String, String> createPropertiesMap(String propertyColumnName, String value) + { + Map<String, String> properties = new HashMap<String, String>(); + properties.put(CodeConverter.getPropertyTypeCode(propertyColumnName), value); + return properties; + } } 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 371dead6f423ccc549c97328eceb6373b1bb0c25..350f265e305d0753b59a7cd2d635f6a3c9e03df8 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 @@ -1067,11 +1067,31 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe return null; } - public void updateProperty(String sessionToken, EntityKind kind, TechId entityId, - String propertyTypeCode, String value) + public void updateDataSetProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) { - logTracking(sessionToken, "updateProperty", - "ENTITY_KIND(%s) ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", kind, entityId, - propertyTypeCode, value); + logTracking(sessionToken, "updateDataSetProperty", + "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value); + } + + public void updateExperimentProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + logTracking(sessionToken, "updateExperimentProperty", + "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value); + } + + public void updateSampleProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + logTracking(sessionToken, "updateSampleProperty", + "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value); + } + + public void updateMaterialProperty(String sessionToken, TechId entityId, + String propertyColumnName, String value) + { + logTracking(sessionToken, "updateMaterialProperty", + "ID(%s) PROPERTY_COLUMN_NAME(%s) VALUE(%s)", entityId, propertyColumnName, value); } } 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 f9aadb8a6e699e4426fa7e64a5e4b2b653d25380..558c925c056bf41d86b38336068e2dc7aff5f87c 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 @@ -1344,7 +1344,25 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleWithHierarchy.SPACE_USER) - public void updateProperty(String sessionToken, EntityKind kind, TechId entityId, + public void updateDataSetProperty(String sessionToken, + @AuthorizationGuard(guardClass = DataSetTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.SPACE_USER) + public void updateExperimentProperty(String sessionToken, + @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.SPACE_USER) + public void updateSampleProperty(String sessionToken, + @AuthorizationGuard(guardClass = SampleTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN) + public void updateMaterialProperty(String sessionToken, TechId entityId, String propertyColumnName, String value); } 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 f9aadb8a6e699e4426fa7e64a5e4b2b653d25380..558c925c056bf41d86b38336068e2dc7aff5f87c 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 @@ -1344,7 +1344,25 @@ public interface ICommonServer extends IServer @Transactional @RolesAllowed(RoleWithHierarchy.SPACE_USER) - public void updateProperty(String sessionToken, EntityKind kind, TechId entityId, + public void updateDataSetProperty(String sessionToken, + @AuthorizationGuard(guardClass = DataSetTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.SPACE_USER) + public void updateExperimentProperty(String sessionToken, + @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.SPACE_USER) + public void updateSampleProperty(String sessionToken, + @AuthorizationGuard(guardClass = SampleTechIdPredicate.class) TechId entityId, + String propertyColumnName, String value); + + @Transactional + @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN) + public void updateMaterialProperty(String sessionToken, TechId entityId, String propertyColumnName, String value); }