From 39a4e8d2dc26ac8bae285c3ac23eace019c78c07 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Tue, 20 Jun 2023 15:10:11 +0200
Subject: [PATCH] SSDM-13784 : V3 API : Cannot remove a property type which
 already has some values - fix failing tests

---
 ...UpdateEntityTypePropertyTypesExecutor.java | 61 ++++++++++++-------
 1 file changed, 40 insertions(+), 21 deletions(-)

diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityTypePropertyTypesExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityTypePropertyTypesExecutor.java
index cb5a7c28f60..e3251830242 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityTypePropertyTypesExecutor.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractUpdateEntityTypePropertyTypesExecutor.java
@@ -20,20 +20,34 @@ import java.util.*;
 import javax.annotation.Resource;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.operation.IOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.operation.IOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.DataSetSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.SearchDataSetsOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.SearchDataSetsOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search.ExperimentSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search.SearchExperimentsOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search.SearchExperimentsOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.fetchoptions.MaterialFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.search.MaterialSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.search.SearchMaterialsOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.search.SearchMaterialsOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SearchSamplesOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SearchSamplesOperationResult;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset.ISearchDataSetExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset.ISearchDataSetsOperationExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.experiment.ISearchExperimentExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.experiment.ISearchExperimentsOperationExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.material.ISearchMaterialExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.material.ISearchMaterialsOperationExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.sample.ISearchSampleExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.sample.ISearchSamplesOperationExecutor;
 import ch.systemsx.cisd.openbis.generic.server.CommonServiceProvider;
 import ch.systemsx.cisd.openbis.generic.shared.dto.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -81,19 +95,16 @@ public abstract class AbstractUpdateEntityTypePropertyTypesExecutor<UPDATE exten
     private IMapPropertyAssignmentByIdExecutor mapPropertyAssignmentByIdExecutor;
 
     @Autowired
-    private ISearchSampleExecutor searchSampleExecutor;
+    private ISearchSamplesOperationExecutor searchSampleExecutor;
 
     @Autowired
-    private ISearchExperimentExecutor searchExperimentExecutor;
+    private ISearchExperimentsOperationExecutor searchExperimentExecutor;
 
     @Autowired
-    private ISearchDataSetExecutor searchDataSetExecutor;
+    private ISearchDataSetsOperationExecutor searchDataSetExecutor;
 
     @Autowired
-    private ISearchMaterialExecutor searchMaterialExecutor;
-
-    @Autowired
-    private IApplicationServerApi applicationServerApi;
+    private ISearchMaterialsOperationExecutor searchMaterialExecutor;
 
     protected abstract EntityKind getEntityKind();
 
@@ -262,40 +273,48 @@ public abstract class AbstractUpdateEntityTypePropertyTypesExecutor<UPDATE exten
         {
             EntityTypePE entityTypePE = entityTypePropertyType.getEntityType();
             int totalCount = 0;
-            String sessionToken = context.getSession().getSessionToken();
-            if (entityTypePE instanceof SampleTypePE) {
+            if (entityTypePE instanceof SampleTypePE)
+            {
                 SampleSearchCriteria criteria = new SampleSearchCriteria();
                 criteria.withType().withCode().thatEquals(entityTypePE.getCode());
                 criteria.withProperty(entityTypePropertyType.getPropertyType().getCode());
                 SampleFetchOptions fetchOptions = new SampleFetchOptions();
                 fetchOptions.count(0);
-                SearchResult searchResult = applicationServerApi.searchSamples(sessionToken, criteria, fetchOptions);
-                totalCount = searchResult.getTotalCount();
-            } else if (entityTypePE instanceof ExperimentTypePE) {
+                Map<IOperation, IOperationResult> results =
+                        searchSampleExecutor.execute(context, List.of(new SearchSamplesOperation(criteria, fetchOptions)));
+                totalCount = ((SearchSamplesOperationResult) results.values().iterator().next()).getSearchResult().getTotalCount();
+            } else if (entityTypePE instanceof ExperimentTypePE)
+            {
                 ExperimentSearchCriteria criteria = new ExperimentSearchCriteria();
                 criteria.withType().withCode().thatEquals(entityTypePE.getCode());
                 criteria.withProperty(entityTypePropertyType.getPropertyType().getCode());
                 ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions();
                 fetchOptions.count(0);
-                SearchResult searchResult = applicationServerApi.searchExperiments(sessionToken, criteria, fetchOptions);
-                totalCount = searchResult.getTotalCount();
-            } else if (entityTypePE instanceof DataSetTypePE) {
+                Map<IOperation, IOperationResult> results =
+                        searchExperimentExecutor.execute(context, List.of(new SearchExperimentsOperation(criteria, fetchOptions)));
+                totalCount = ((SearchExperimentsOperationResult) results.values().iterator().next()).getSearchResult().getTotalCount();
+            } else if (entityTypePE instanceof DataSetTypePE)
+            {
                 DataSetSearchCriteria criteria = new DataSetSearchCriteria();
                 criteria.withType().withCode().thatEquals(entityTypePE.getCode());
                 criteria.withProperty(entityTypePropertyType.getPropertyType().getCode());
                 DataSetFetchOptions fetchOptions = new DataSetFetchOptions();
                 fetchOptions.count(0);
-                SearchResult searchResult = applicationServerApi.searchDataSets(sessionToken, criteria, fetchOptions);
-                totalCount = searchResult.getTotalCount();
-            } else if (entityTypePE instanceof MaterialTypePE) {
+                Map<IOperation, IOperationResult> results =
+                        searchDataSetExecutor.execute(context, List.of(new SearchDataSetsOperation(criteria, fetchOptions)));
+                totalCount = ((SearchDataSetsOperationResult) results.values().iterator().next()).getSearchResult().getTotalCount();
+            } else if (entityTypePE instanceof MaterialTypePE)
+            {
                 MaterialSearchCriteria criteria = new MaterialSearchCriteria();
                 criteria.withType().withCode().thatEquals(entityTypePE.getCode());
                 criteria.withProperty(entityTypePropertyType.getPropertyType().getCode());
                 MaterialFetchOptions fetchOptions = new MaterialFetchOptions();
                 fetchOptions.count(0);
-                SearchResult searchResult = applicationServerApi.searchMaterials(sessionToken, criteria, fetchOptions);
-                totalCount = searchResult.getTotalCount();
-            } else {
+                Map<IOperation, IOperationResult> results =
+                        searchMaterialExecutor.execute(context, List.of(new SearchMaterialsOperation(criteria, fetchOptions)));
+                totalCount = ((SearchMaterialsOperationResult) results.values().iterator().next()).getSearchResult().getTotalCount();
+            } else
+            {
                 throw new IllegalStateException("This should never happen! entityTypePE=" + entityTypePE.getClass());
             }
             if (forceRemovingAssignments || totalCount == 0)
-- 
GitLab