diff --git a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java index 867beae5ba8a4ab03d98e68b79d809777378445a..3cf08cd9417dbfe7ac3e7297d57f4aa623e0da89 100644 --- a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java +++ b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java @@ -622,7 +622,7 @@ public class CaosDBToGrpcConverters { String selector = s.getSelector(); switch (selector) { case "name": - if (e.getName() != null) { + if (e.hasName()) { result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getName())); } break; @@ -631,22 +631,72 @@ public class CaosDBToGrpcConverters { result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getId().toString())); break; + case "description": + if (e.hasDescription()) { + result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getDescription())); + } + break; + + case "unit": + if (e.hasUnit()) { + final String unit = getStringUnit(e); + result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); + } + break; + + // TODO path, hash + default: // selector for a normal property for (Property p : e.getProperties()) { - if (p.getName() != null && p.getName().equals(selector) && s.getSubselection() == null) { - try { - p.parseValue(); - } catch (Message m) { - throw new TransactionException(m); - } - if (!p.hasValue()) { - continue; - } else if (p.getValue() instanceof CollectionValue) { - + if (p.getName() != null && p.getName().equals(selector)) { + if (s.getSubselection() == null) { + // no subselection -> just return the actual value + try { + p.parseValue(); + } 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())); + } } else { - result.setScalarValue( - ScalarValue.newBuilder().setStringValue(p.getValue().toString())); + // with subselection, e.g. p1.unit, site.geolocation.longitude + switch (s.getSubselection().getSelector()) { + case "unit": + final String unit = getStringUnit(p); + if (unit != null) { + result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); + } + break; + + // TODO name, description, id + default: + break; + } } } }