diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java index af5ffb547cbd51d0781573b1dd3f122a621b5fe1..1fed350eca5b1c48fac986d1738b8d1784b7f634 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java @@ -26,7 +26,7 @@ public class NewBasicExperiment extends Identifier<NewBasicExperiment> implement private static final long serialVersionUID = ServiceVersionHolder.VERSION; public static final String EXPERIMENT_REGISTRATION_TEMPLATE_COMMENT = - "# Three short formats are accepted for identifiers, 'EXPERIMENT_CODE', '/EXPERIMENT_CODE', '/PROJECT_CODE/EXPERIMENT_CODE' when the full identifier is not given '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE' the default space and project are applied, if they are not configured an error will be thrown.\n"; + "# Besides the full identifier of format '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE', two short formats 'EXPERIMENT_CODE' and 'PROJECT_CODE/EXPERIMENT_CODE' are accepted given that the default project (former short format) or default space (latter short format) are configured. If the proper default value is not configured when using a short format, experiment import will fail.\n"; private IEntityProperty[] properties = IEntityProperty.EMPTY_ARRAY; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedBasicExperiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedBasicExperiment.java index ae33ae41f83c309784eef9577abb8ca2103ffe96..95990706e5add29e0cc7d6ae993f51e069db7089 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedBasicExperiment.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedBasicExperiment.java @@ -25,7 +25,7 @@ public class UpdatedBasicExperiment extends NewBasicExperiment { public static final String EXPERIMENT_UPDATE_TEMPLATE_COMMENT = "# All columns except \"identifier\" can be removed from the file.\n" - + "# Three short formats are accepted for identifiers, 'EXPERIMENT_CODE', '/EXPERIMENT_CODE', '/PROJECT_CODE/EXPERIMENT_CODE' when the full identifier is not given '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE' the default space and project are applied, if they are not configured an error will be thrown.\n" + + "# Besides the full identifier of format '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE', two short formats 'EXPERIMENT_CODE' and 'PROJECT_CODE/EXPERIMENT_CODE' are accepted given that the default project (former short format) or default space (latter short format) are configured. If the proper default value is not configured when using a short format, experiment update will fail.\n" + "# If a column is removed from the file or a cell in a column is left empty the corresponding values of updated expriments will be preserved.\n" + "# To delete a value/connection from openBIS one needs to put \"--DELETE--\" or \"__DELETE__\" into the corresponding cell\n" + "# The \"project\" column (if not removed) should contain project identifiers, e.g. /SPACE/PROJECT\n"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java index fd8dc793095d54100de6d5080de4cc8c07945453..f86068a0f633a839b32728a5494a019f984b4455 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java @@ -557,49 +557,33 @@ public class GenericClientService extends AbstractClientService implements IGene private void applyDefaultSpaceProjectToExperiments(List<? extends NewBasicExperiment> experiments, String sessionToken) { - String defaultProjectIdentifier = getUserDefaultProject(sessionToken); // If default project is present - - // Fix identifier 'EXPERIMENT_ID' alone - for (NewBasicExperiment experiment : experiments) - { - String newExperimentIdentifier = experiment.getIdentifier(); - if (newExperimentIdentifier.indexOf('/') == -1 && - defaultProjectIdentifier != null) - { - experiment.setIdentifier(defaultProjectIdentifier + "/" + newExperimentIdentifier); - } - } - - // Fix identifier '/EXPERIMENT_ID' alone with forward slash - for (NewBasicExperiment experiment : experiments) - { - String newExperimentIdentifier = experiment.getIdentifier(); - int numberSlash = count('/', newExperimentIdentifier); - if (newExperimentIdentifier.indexOf('/') > -1 && - numberSlash == 1 && - defaultProjectIdentifier != null) - { - experiment.setIdentifier(defaultProjectIdentifier + newExperimentIdentifier); - } - } - String defaultSpaceIdentifier = getUserDefaultSpace(sessionToken); // If default space is present - // Fix identifier '/PROJECT/EXPERIMENT_ID' with project for (NewBasicExperiment experiment : experiments) { String newExperimentIdentifier = experiment.getIdentifier(); - int numberSlash = count('/', newExperimentIdentifier); - if (newExperimentIdentifier.indexOf('/') > -1 && - numberSlash == 2 && - defaultSpaceIdentifier != null) + int numberOfSlashes = count('/', newExperimentIdentifier); + + switch (numberOfSlashes) { - experiment.setIdentifier("/" + defaultSpaceIdentifier + newExperimentIdentifier); + case 0: + if (defaultProjectIdentifier != null) + { + experiment.setIdentifier(defaultProjectIdentifier + "/" + newExperimentIdentifier); + } + break; + case 1: + if (defaultSpaceIdentifier != null && (newExperimentIdentifier.startsWith("/") == false) + && (newExperimentIdentifier.endsWith("/") == false)) + { + experiment.setIdentifier("/" + defaultSpaceIdentifier + "/" + newExperimentIdentifier); + } + break; + default: } } - // Throw meaningful error for (NewBasicExperiment experiment : experiments) { String newExperimentIdentifier = experiment.getIdentifier(); 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 84d408cd73cc523e25aa45950c8ef32e253141f5..109980f6bd3ab016011117235884cb0e8cbe3188 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 @@ -245,7 +245,7 @@ public final class CommonServerTest extends AbstractServerTestCase false, false, false, BatchOperationKind.REGISTRATION); assertEquals( - "# Three short formats are accepted for identifiers, 'EXPERIMENT_CODE', '/EXPERIMENT_CODE', '/PROJECT_CODE/EXPERIMENT_CODE' when the full identifier is not given '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE' the default space and project are applied, if they are not configured an error will be thrown.\nidentifier\tNON-MANAGED-PROP\tMANAGED-PROP-NO-SUBCOLUMNS\t" + "# Besides the full identifier of format '/SPACE_CODE/PROJECT_CODE/EXPERIMENT_CODE', two short formats 'EXPERIMENT_CODE' and 'PROJECT_CODE/EXPERIMENT_CODE' are accepted given that the default project (former short format) or default space (latter short format) are configured. If the proper default value is not configured when using a short format, experiment import will fail.\nidentifier\tNON-MANAGED-PROP\tMANAGED-PROP-NO-SUBCOLUMNS\t" + "MANAGED-PROP-SUBCOLUMNS:A\tMANAGED-PROP-SUBCOLUMNS:B", template); context.assertIsSatisfied(); }