diff --git a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java index 3cf08cd9417dbfe7ac3e7297d57f4aa623e0da89..af40f7358b695e8943ce7cea69ff1012406b571b 100644 --- a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java +++ b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java @@ -611,44 +611,66 @@ public class CaosDBToGrpcConverters { SelectQueryRow.Builder result = SelectQueryRow.newBuilder(); for (Selection s : selections) { - org.caosdb.api.entity.v1.Value.Builder value = getValue(s, e); + org.caosdb.api.entity.v1.Value.Builder value = getSelectedValue(s, e); result.addCells(value); } return result; } - - private org.caosdb.api.entity.v1.Value.Builder getValue(Selection s, EntityInterface e) { + + private org.caosdb.api.entity.v1.Value.Builder getSelectedValue(Selection s, EntityInterface e) { org.caosdb.api.entity.v1.Value.Builder result = org.caosdb.api.entity.v1.Value.newBuilder(); String selector = s.getSelector(); switch (selector) { + case "value": + if(e.hasValue()) { + result = convert(e.getValue()); + } + break; case "name": if (e.hasName()) { - result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getName())); + result.setScalarValue(convertStringValue(e.getName())); } break; case "id": - result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getId().toString())); + result.setScalarValue(convertStringValue(e.getId().toString())); break; case "description": if (e.hasDescription()) { - result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getDescription())); + result.setScalarValue(convertStringValue(e.getDescription())); } break; case "unit": if (e.hasUnit()) { final String unit = getStringUnit(e); - result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); + result.setScalarValue(convertStringValue(unit)); + } + break; + case "datatype": + if (e.hasDatatype()) { + result.setScalarValue(convertStringValue(e.getDatatype().toString())); } break; - // TODO path, hash + case "path": + if (e.hasFileProperties() && e.getFileProperties().hasPath()) { + result.setScalarValue(convertStringValue(e.getFileProperties().getPath())); + } + case "parent": + if (e.hasParents()) { + CollectionValues.Builder parents = CollectionValues.newBuilder(); + for (org.caosdb.server.entity.wrapper.Parent p : e.getParents()) { + parents.addValues(ScalarValue.newBuilder().setStringValue(p.getName())); + } + result.setListValues(parents); + } default: // selector for a normal property for (Property p : e.getProperties()) { + // TODO(tf) - handle multiple matching properties if (p.getName() != null && p.getName().equals(selector)) { if (s.getSubselection() == null) { // no subselection -> just return the actual value @@ -657,44 +679,54 @@ public class CaosDBToGrpcConverters { } catch (Message m) { throw new TransactionException(m); } - if (!p.hasValue()) { - continue; - } else if (p.getValue() instanceof CollectionValue) { - - } else if (p.getValue() instanceof GenericValue) { - if (((GenericValue) p.getValue()).getValue() instanceof Double) { - result.setScalarValue( - ScalarValue.newBuilder() - .setDoubleValue((Double) ((GenericValue) p.getValue()).getValue())); - } else if (((GenericValue) p.getValue()).getValue() instanceof Integer) { - result.setScalarValue( - ScalarValue.newBuilder() - .setIntegerValue((Integer) ((GenericValue) p.getValue()).getValue())); - } else { - result.setScalarValue( - ScalarValue.newBuilder().setStringValue(p.getValue().toString())); - } - } else if (p.getValue() instanceof BooleanValue) { - result.setScalarValue( - ScalarValue.newBuilder() - .setBooleanValue(((BooleanValue) p.getValue()).getValue())); - - } else { - result.setScalarValue( - ScalarValue.newBuilder().setStringValue(p.getValue().toString())); - } + + result = convert(p.getValue()); } else { // with subselection, e.g. p1.unit, site.geolocation.longitude switch (s.getSubselection().getSelector()) { + case "name": + if (p.hasName()) { + result.setScalarValue(convertStringValue(p.getName())); + } + break; + + case "id": + result.setScalarValue(convertStringValue(p.getId().toString())); + break; + + case "description": + if (p.hasDescription()) { + result.setScalarValue(convertStringValue(p.getDescription())); + } + break; + case "unit": final String unit = getStringUnit(p); if (unit != null) { - result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); + result.setScalarValue(convertStringValue(unit)); } break; - // TODO name, description, id + case "datatype": + if (p.hasDatatype()) { + result.setScalarValue(convertStringValue(p.getDatatype().toString())); + } + break; + case "value": + if(p.hasValue()) { + result = convert(p.getValue()); + } + break; default: + // normal property + Value v = p.getValue(); + + if (v instanceof ReferenceValue) { + EntityInterface referenced_entity = ((ReferenceValue) v).getEntity(); + return getSelectedValue(s.getSubselection(), referenced_entity); + } else if (v instanceof CollectionValue) { + // TODO(tf) + } break; } } @@ -702,7 +734,6 @@ public class CaosDBToGrpcConverters { } break; } - // TODO Auto-generated method stub return result; }