From 6f5d3c94e58ddf35eb3fab7a8b69d7ecba774a5c Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Mon, 27 Sep 2021 11:34:44 +0200
Subject: [PATCH] MAINT: clean-up

---
 .../grpc/EntityTransactionServiceImpl.java    | 33 ++++++++++++-------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index caeac0e6..3aa9954e 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -39,6 +39,7 @@ import org.caosdb.api.entity.v1alpha1.UpdateRequest;
 import org.caosdb.api.entity.v1alpha1.UpdateResponse;
 import org.caosdb.api.entity.v1alpha1.Version;
 import org.caosdb.datetime.DateTimeInterface;
+import org.caosdb.server.CaosDBException;
 import org.caosdb.server.datatype.AbstractCollectionDatatype;
 import org.caosdb.server.datatype.AbstractDatatype;
 import org.caosdb.server.datatype.BooleanDatatype;
@@ -476,6 +477,12 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     FileDownload file_download = null;
 
     for (final TransactionRequest sub_request : request.getRequestsList()) {
+      if (sub_request.getWrappedRequestsCase() != WrappedRequestsCase.RETRIEVE_REQUEST) {
+        throw new CaosDBException(
+            "Cannot process a "
+                + sub_request.getWrappedRequestsCase().name()
+                + " in a read-only request.");
+      }
       final boolean fileDownload = sub_request.getRetrieveRequest().getRegisterFileDownload();
       if (sub_request.getRetrieveRequest().hasQuery()
           && !sub_request.getRetrieveRequest().getQuery().getQuery().isBlank()) {
@@ -564,18 +571,17 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
 
   public MultiTransactionResponse transaction(final MultiTransactionRequest request)
       throws Exception {
-    // we currently can only process one request type per multi transaction request.
-    WrappedRequestsCase requestCase = WrappedRequestsCase.WRAPPEDREQUESTS_NOT_SET;
-
     if (request.getRequestsCount() > 0) {
-      requestCase = request.getRequests(0).getWrappedRequestsCase();
-    }
-
-    switch (requestCase) {
-      case RETRIEVE_REQUEST:
-        return retrieve(request);
-      default:
-        return write(request);
+      final WrappedRequestsCase requestCase = request.getRequests(0).getWrappedRequestsCase();
+      switch (requestCase) {
+        case RETRIEVE_REQUEST:
+          return retrieve(request);
+        default:
+          return write(request);
+      }
+    } else {
+      // empty request, empty response.
+      return MultiTransactionResponse.newBuilder().build();
     }
   }
 
@@ -649,7 +655,10 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
           }
           break;
         default:
-          throw new UnsupportedOperationException("Not implemented");
+          throw new CaosDBException(
+              "Cannot process a "
+                  + request.getWrappedRequestsCase().name()
+                  + " in a write request.");
       }
     }
 
-- 
GitLab