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

WIP: implement retrieve

parent 86709377
No related branches found
No related tags found
2 merge requests!44Release 0.6,!43Merge f-GRPC-main to dev
Pipeline #10124 passed
caosdb-proto @ 12f07226
Subproject commit dd9abe3499367c4eded4774ade1acbc90ef048b3 Subproject commit 12f072263c05208464b80c0124bde0396b100d86
package org.caosdb.server.grpc; package org.caosdb.server.grpc;
import io.grpc.stub.StreamObserver; import io.grpc.stub.StreamObserver;
import java.util.Iterator;
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;
import org.caosdb.api.entity.v1alpha1.Entity.Builder;
import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase; import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
import org.caosdb.api.entity.v1alpha1.Parent;
import org.caosdb.api.entity.v1alpha1.RetrieveRequest; import org.caosdb.api.entity.v1alpha1.RetrieveRequest;
import org.caosdb.api.entity.v1alpha1.RetrieveResponse; import org.caosdb.api.entity.v1alpha1.RetrieveResponse;
import org.caosdb.api.entity.v1alpha1.Version;
import org.caosdb.server.entity.EntityInterface;
import org.caosdb.server.entity.MagicTypes;
import org.caosdb.server.entity.RetrieveEntity;
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.wrapper.Property;
import org.caosdb.server.transaction.Retrieve;
import org.caosdb.server.utils.EntityStatus;
public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBase { public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBase {
public String getStringUnit(final EntityInterface entity) {
for (final Property p : entity.getProperties()) {
if (MagicTypes.UNIT.getId() == p.getId()) {
p.setEntityStatus(EntityStatus.IGNORE);
return p.getValue().toString();
}
}
return null;
}
public Entity convert(final EntityInterface from) {
final Builder builder = Entity.newBuilder();
if (from.getRole() != null) {
builder.setRole(from.getRole().toString());
}
if (from.hasId()) {
builder.setId(from.getId().toString());
}
if (from.hasVersion()) {
builder.setVersion(convert(from.getVersion()));
}
if (from.hasName()) {
builder.setName(from.getName());
}
if (from.hasDescription()) {
builder.setDescription(from.getDescription());
}
if (from.hasDatatype()) {
builder.setDatatype(from.getDatatype().getName());
}
if (from.hasUnit()) {
builder.setUnit(getStringUnit(from));
}
if (from.hasProperties()) {
builder.addAllProperties(convert(from.getProperties()));
}
if (from.hasParents()) {
builder.addAllParents(convert(from.getParents()));
}
return builder.build();
}
public Version convert(final org.caosdb.server.entity.Version from) {
final org.caosdb.api.entity.v1alpha1.Version.Builder builder = Version.newBuilder();
builder.setId(from.getId());
return builder.build();
}
public Parent convert(final org.caosdb.server.entity.wrapper.Parent from) {
final org.caosdb.api.entity.v1alpha1.Parent.Builder builder = Parent.newBuilder();
if (from.hasId()) {
builder.setId(from.getId().toString());
}
if (from.hasName()) {
builder.setName(from.getName());
}
if (from.hasDescription()) {
builder.setDescription(from.getDescription());
}
return builder.build();
}
public org.caosdb.api.entity.v1alpha1.Property convert(final Property from) {
final org.caosdb.api.entity.v1alpha1.Property.Builder builder =
org.caosdb.api.entity.v1alpha1.Property.newBuilder();
if (from.hasId()) {
builder.setId(from.getId().toString());
}
if (from.hasName()) {
builder.setName(from.getName());
}
if (from.hasDescription()) {
builder.setDescription(from.getDescription());
}
if (from.hasDatatype()) {
builder.setDatatype(from.getDatatype().getName());
}
if (from.hasUnit()) {
builder.setUnit(getStringUnit(from));
}
if (from.hasValue()) {
builder.setValue(from.getValue().toString());
}
builder.setImportance(from.getStatementStatus().toString());
return builder.build();
}
public Iterable<? extends org.caosdb.api.entity.v1alpha1.Property> convert(
final PropertyContainer from) {
final Iterator<org.caosdb.server.entity.wrapper.Property> iterator = from.iterator();
return () ->
new Iterator<>() {
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public org.caosdb.api.entity.v1alpha1.Property next() {
return convert(iterator.next());
}
};
}
public Iterable<? extends Parent> convert(final ParentContainer from) {
final Iterator<org.caosdb.server.entity.wrapper.Parent> iterator = from.iterator();
return () ->
new Iterator<>() {
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public Parent next() {
return convert(iterator.next());
}
};
}
public Integer getId(final ByIdRequest request) {
return Integer.parseInt(request.getId());
}
public Entity retrieve(final RetrieveRequest request) throws Exception {
final RetrieveContainer container =
new RetrieveContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null);
final RetrieveEntity entity = new RetrieveEntity(getId(request.getById()));
container.add(entity);
final Retrieve transaction = new Retrieve(container);
transaction.execute();
return convert(transaction.getContainer().get(0));
}
private String getSRID() {
return UUID.randomUUID().toString();
}
private Long getTimestamp() {
return System.currentTimeMillis();
}
@Override @Override
public void retrieve( public void retrieve(
final RetrieveRequest request, final StreamObserver<RetrieveResponse> responseObserver) { final RetrieveRequest request, final StreamObserver<RetrieveResponse> responseObserver) {
final Entity entity = Entity.newBuilder().setDescription("This is an entity").build(); try {
final RetrieveResponse response = RetrieveResponse.newBuilder().setEntity(entity).build(); final Entity entity = retrieve(request);
final RetrieveResponse response = RetrieveResponse.newBuilder().setEntity(entity).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
responseObserver.onNext(response); } catch (final Exception e) {
responseObserver.onCompleted(); e.printStackTrace();
responseObserver.onError(e);
}
} }
} }
...@@ -54,14 +54,14 @@ public class Retrieve extends Transaction<RetrieveContainer> { ...@@ -54,14 +54,14 @@ public class Retrieve extends Transaction<RetrieveContainer> {
{ {
final ResolveNames r = new ResolveNames(); final ResolveNames r = new ResolveNames();
r.init(JobFailureSeverity.WARN, null, this); r.init(JobFailureSeverity.WARN, null, this);
ScheduledJob scheduledJob = getSchedule().add(r); final ScheduledJob scheduledJob = getSchedule().add(r);
getSchedule().runJob(scheduledJob); getSchedule().runJob(scheduledJob);
} }
{ {
final RemoveDuplicates job = new RemoveDuplicates(); final RemoveDuplicates job = new RemoveDuplicates();
job.init(JobFailureSeverity.ERROR, null, this); job.init(JobFailureSeverity.ERROR, null, this);
ScheduledJob scheduledJob = getSchedule().add(job); final ScheduledJob scheduledJob = getSchedule().add(job);
getSchedule().runJob(scheduledJob); getSchedule().runJob(scheduledJob);
} }
......
...@@ -91,7 +91,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra ...@@ -91,7 +91,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra
* *
* <p>E.g. in {@link Retrieve} and {@link WriteTransaction}. * <p>E.g. in {@link Retrieve} and {@link WriteTransaction}.
*/ */
protected void makeSchedule() throws Exception { protected void makeSchedule() {
// load flag jobs // load flag jobs
final Job loadContainerFlags = final Job loadContainerFlags =
Job.getJob("LoadContainerFlagJobs", JobFailureSeverity.ERROR, null, this); Job.getJob("LoadContainerFlagJobs", JobFailureSeverity.ERROR, null, this);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment