diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java index caeac0e6a0f7e6414585fcae6e81d95036daab4a..3aa9954e4d1bcf28173dba4405cfff3574c1e562 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."); } }