Skip to content
Snippets Groups Projects
Verified Commit 00275630 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: delete insert

parent 2dbcc909
No related branches found
No related tags found
2 merge requests!44Release 0.6,!43Merge f-GRPC-main to dev
Pipeline #10903 failed
caosdb-proto @ 8febce70
Subproject commit 4845aa8e479b85b50a130530bbc96a0cab4f8688
Subproject commit 8febce70a96b3322d61a74e4567ade8b33f75369
......@@ -25,7 +25,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.caosdb</groupId>
<artifactId>caosdb-server</artifactId>
<version>0.5.0-GRPC0.0.6</version>
<version>0.5.0-GRPC0.0.7</version>
<packaging>jar</packaging>
<name>CaosDB Server</name>
<scm>
......
......@@ -6,24 +6,35 @@ import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import org.apache.shiro.SecurityUtils;
import org.caosdb.api.entity.v1alpha1.ByIdRequest;
import org.caosdb.api.entity.v1alpha1.Entity;
import org.caosdb.api.entity.v1alpha1.Entity.Builder;
import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
import org.caosdb.api.entity.v1alpha1.FullEntityRequest;
import org.caosdb.api.entity.v1alpha1.IdResponse;
import org.caosdb.api.entity.v1alpha1.MessageCode;
import org.caosdb.api.entity.v1alpha1.MultiTransactionRequest;
import org.caosdb.api.entity.v1alpha1.MultiTransactionResponse;
import org.caosdb.api.entity.v1alpha1.Parent;
import org.caosdb.api.entity.v1alpha1.RetrieveRequest;
import org.caosdb.api.entity.v1alpha1.QueryOrIdRequest;
import org.caosdb.api.entity.v1alpha1.RetrieveResponse;
import org.caosdb.api.entity.v1alpha1.TransactionRequest;
import org.caosdb.api.entity.v1alpha1.TransactionRequest.WrappedRequestsCase;
import org.caosdb.api.entity.v1alpha1.TransactionResponse;
import org.caosdb.api.entity.v1alpha1.Version;
import org.caosdb.server.entity.DeleteEntity;
import org.caosdb.server.entity.EntityInterface;
import org.caosdb.server.entity.InsertEntity;
import org.caosdb.server.entity.MagicTypes;
import org.caosdb.server.entity.Message;
import org.caosdb.server.entity.RetrieveEntity;
import org.caosdb.server.entity.Role;
import org.caosdb.server.entity.container.ParentContainer;
import org.caosdb.server.entity.container.PropertyContainer;
import org.caosdb.server.entity.container.RetrieveContainer;
import org.caosdb.server.entity.container.WritableContainer;
import org.caosdb.server.entity.wrapper.Property;
import org.caosdb.server.transaction.Retrieve;
import org.caosdb.server.transaction.WriteTransaction;
import org.caosdb.server.utils.EntityStatus;
import org.caosdb.server.utils.ServerMessages;
......@@ -69,15 +80,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
if (from.hasParents()) {
builder.addAllParents(convert(from.getParents()));
}
if (from.hasMessage(Message.MessageType.Error.toString())) {
builder.addAllErrors(convert(from.getMessages(Message.MessageType.Error.toString())));
}
if (from.hasMessage(Message.MessageType.Warning.toString())) {
builder.addAllErrors(convert(from.getMessages(Message.MessageType.Warning.toString())));
}
if (from.hasMessage(Message.MessageType.Info.toString())) {
builder.addAllErrors(convert(from.getMessages(Message.MessageType.Info.toString())));
}
appendMessages(from, builder);
return builder.build();
}
......@@ -104,6 +107,8 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
// TODO move to Message class.
if (m.equals(ServerMessages.ENTITY_DOES_NOT_EXIST)) {
return MessageCode.MESSAGE_CODE_ENTITY_DOES_NOT_EXIST;
} else if (m.equals(ServerMessages.ENTITY_HAS_NO_PROPERTIES)) {
return MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES;
}
throw new UnsupportedOperationException("Unkown message code: " + m.toString());
}
......@@ -191,11 +196,11 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
};
}
public Integer getId(final ByIdRequest request) {
return Integer.parseInt(request.getId());
public Integer getId(final String id) {
return Integer.parseInt(id);
}
public RetrieveResponse retrieve(final RetrieveRequest request) throws Exception {
public RetrieveResponse retrieve(final QueryOrIdRequest queryOrIdRequest) throws Exception {
Entity responseEntity = null;
final org.caosdb.api.entity.v1alpha1.RetrieveResponse.Builder builder =
......@@ -203,7 +208,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
final RetrieveContainer container =
new RetrieveContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null);
try {
final RetrieveEntity entity = new RetrieveEntity(getId(request.getById()));
final RetrieveEntity entity = new RetrieveEntity(getId(queryOrIdRequest.getId()));
container.add(entity);
final Retrieve transaction = new Retrieve(container);
......@@ -212,7 +217,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
} catch (final NumberFormatException e) {
// ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
// exist.
responseEntity = entityDoesNotExist(request.getById().getId());
responseEntity = entityDoesNotExist(queryOrIdRequest.getId());
}
builder.setEntity(responseEntity);
......@@ -234,11 +239,114 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
return System.currentTimeMillis();
}
public MultiTransactionResponse transaction(final MultiTransactionRequest request)
throws Exception {
final TransactionResponse response = singleTransaction(request.getRequests(0));
return MultiTransactionResponse.newBuilder().addResponses(response).build();
}
public TransactionResponse singleTransaction(final TransactionRequest request) throws Exception {
final WrappedRequestsCase requestCase = request.getWrappedRequestsCase();
switch (requestCase) {
case RETRIEVE_REQUEST:
return TransactionResponse.newBuilder()
.setRetrieveResponse(retrieve(request.getRetrieveRequest()))
.build();
case INSERT_REQUEST:
return TransactionResponse.newBuilder()
.setInsertResponse(insert(request.getInsertRequest()))
.build();
case DELETE_REQUEST:
return TransactionResponse.newBuilder()
.setDeleteResponse(delete(request.getDeleteRequest()))
.build();
default:
throw new UnsupportedOperationException("Not implemented");
}
}
private IdResponse delete(final QueryOrIdRequest deleteRequest) throws Exception {
final String id = deleteRequest.getId();
final org.caosdb.api.entity.v1alpha1.IdResponse.Builder builder = IdResponse.newBuilder();
builder.setId(id);
final WritableContainer container =
new WritableContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null);
try {
final DeleteEntity entity = new DeleteEntity(getId(id));
container.add(entity);
final WriteTransaction transaction = new WriteTransaction(container);
transaction.execute();
appendMessages(entity, builder);
} catch (final NumberFormatException e) {
// ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
// exist.
builder.addEntityErrors(convert(ServerMessages.ENTITY_DOES_NOT_EXIST));
}
return builder.build();
}
private IdResponse insert(final FullEntityRequest insertRequest) throws Exception {
final Entity insertEntity = insertRequest.getEntity();
final org.caosdb.api.entity.v1alpha1.IdResponse.Builder builder = IdResponse.newBuilder();
final WritableContainer container =
new WritableContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null);
final InsertEntity entity = convert(insertEntity);
container.add(entity);
final WriteTransaction transaction = new WriteTransaction(container);
transaction.execute();
builder.setId(Integer.toString(entity.getId()));
appendMessages(entity, builder);
return builder.build();
}
private void appendMessages(
final EntityInterface from, final org.caosdb.api.entity.v1alpha1.Entity.Builder builder) {
if (from.hasMessage(Message.MessageType.Error.toString())) {
builder.addAllErrors(convert(from.getMessages(Message.MessageType.Error.toString())));
}
if (from.hasMessage(Message.MessageType.Warning.toString())) {
builder.addAllWarnings(convert(from.getMessages(Message.MessageType.Warning.toString())));
}
if (from.hasMessage(Message.MessageType.Info.toString())) {
builder.addAllInfos(convert(from.getMessages(Message.MessageType.Info.toString())));
}
}
private void appendMessages(
final EntityInterface from, final org.caosdb.api.entity.v1alpha1.IdResponse.Builder builder) {
if (from.hasMessage(Message.MessageType.Error.toString())) {
builder.addAllEntityErrors(convert(from.getMessages(Message.MessageType.Error.toString())));
}
if (from.hasMessage(Message.MessageType.Warning.toString())) {
builder.addAllEntityWarnings(
convert(from.getMessages(Message.MessageType.Warning.toString())));
}
if (from.hasMessage(Message.MessageType.Info.toString())) {
builder.addAllEntityInfos(convert(from.getMessages(Message.MessageType.Info.toString())));
}
}
private InsertEntity convert(final Entity insertEntity) {
final InsertEntity entity =
new InsertEntity(
insertEntity.getName().isEmpty() ? null : insertEntity.getName(),
Role.parse(insertEntity.getRole()));
// TODO (other basic attributes, properties, parents)
return entity;
}
@Override
public void retrieve(
final RetrieveRequest request, final StreamObserver<RetrieveResponse> responseObserver) {
public void multiTransaction(
final MultiTransactionRequest request,
final StreamObserver<MultiTransactionResponse> responseObserver) {
try {
final RetrieveResponse response = retrieve(request);
final MultiTransactionResponse response = transaction(request);
responseObserver.onNext(response);
responseObserver.onCompleted();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment