From 6bdb55161d991334a4d104743f103b62e30b9bdd Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Thu, 25 May 2023 08:02:22 +0200
Subject: [PATCH] SSDM-13672: V3 API extension: Flag codeBeatsAutoGeneratedCode
 added to SampleCreation. This allows to specify sample code even though
 sample type has autoGeneratedCode set

---
 .../asapi/v3/dto/sample/create/SampleCreation.java   | 12 ++++++++++++
 .../src/v3/as/dto/sample/create/SampleCreation.js    |  7 +++++++
 .../v3/executor/sample/CreateSampleExecutor.java     |  4 +++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java
index 808b41f2279..3000bb1ce98 100644
--- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java
+++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java
@@ -60,6 +60,8 @@ public class SampleCreation implements ICreation, ICreationIdHolder, IProperties
 
     private boolean autoGeneratedCode;
 
+    private boolean codeBeatsAutoGeneratedCode;
+
     private List<? extends ITagId> tagIds;
 
     private Map<String, String> properties = new HashMap<String, String>();
@@ -139,6 +141,16 @@ public class SampleCreation implements ICreation, ICreationIdHolder, IProperties
         this.autoGeneratedCode = autoGeneratedCode;
     }
 
+    public boolean isCodeBeatsAutoGeneratedCode()
+    {
+        return codeBeatsAutoGeneratedCode;
+    }
+
+    public void setCodeBeatsAutoGeneratedCode(boolean codeBeatsAutoGeneratedCode)
+    {
+        this.codeBeatsAutoGeneratedCode = codeBeatsAutoGeneratedCode;
+    }
+
     public List<? extends ITagId> getTagIds()
     {
         return tagIds;
diff --git a/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js
index 61e717b3f8e..daeb9d993a6 100644
--- a/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js
+++ b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js
@@ -24,6 +24,7 @@ define([ "stjs", "as/dto/common/Relationship" ], function(stjs, Relationship) {
 		prototype.attachments = null;
 		prototype.creationId = null;
 		prototype.autoGeneratedCode = null;
+        prototype.codeBeatsAutoGeneratedCode = null;
 		prototype.getTypeId = function() {
 			return this.typeId;
 		};
@@ -60,6 +61,12 @@ define([ "stjs", "as/dto/common/Relationship" ], function(stjs, Relationship) {
 		prototype.setAutoGeneratedCode = function(autoGeneratedCode) {
 			this.autoGeneratedCode = autoGeneratedCode;
 		};
+        prototype.isCodeBeatsAutoGeneratedCode = function() {
+            return this.codeBeatsAutoGeneratedCode;
+        }
+        prototype.setCodeBeatsAutoGeneratedCode = function(codeBeatsAutoGeneratedCode) {
+            this.codeBeatsAutoGeneratedCode = codeBeatsAutoGeneratedCode;
+        };
 		prototype.getTagIds = function() {
 			return this.tagIds;
 		};
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/CreateSampleExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/CreateSampleExecutor.java
index e7776a26606..73b1f7f94f8 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/CreateSampleExecutor.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/CreateSampleExecutor.java
@@ -191,7 +191,9 @@ public class CreateSampleExecutor extends AbstractCreateEntityExecutor<SampleCre
                     } else if (type == null)
                     {
                         throw new ObjectNotFoundException(creation.getTypeId());
-                    } else if (false == StringUtils.isEmpty(creation.getCode()) && (type.isAutoGeneratedCode() || creation.isAutoGeneratedCode()))
+                    } else if (false == StringUtils.isEmpty(creation.getCode()) 
+                            && (type.isAutoGeneratedCode() || creation.isAutoGeneratedCode())
+                            && creation.isCodeBeatsAutoGeneratedCode() == false)
                     {
                         throw new UserFailureException("Code should be empty when auto generated code is selected.");
                     } else if (StringUtils.isEmpty(creation.getCode()) && false == type.isAutoGeneratedCode()
-- 
GitLab