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

MAINT: clean-up CaosDBToGrpcConverters

parent 7648d2a6
No related branches found
No related tags found
2 merge requests!80Release 0.9,!72F grpc select
Pipeline #30754 passed
caosdb-proto @ 13d083b8
Subproject commit 96e7a1fb667ed1bb3b2602af6c69724519bf5118
Subproject commit 13d083b84400507f6f1967a099e2af006af2a231
......@@ -617,34 +617,49 @@ public class CaosDBToGrpcConverters {
return result;
}
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();
/**
* Handle special selectors like "id", "name", "value", "parent",...
*
* @return a {@link org.caosdb.api.entity.v1.Value.Builder}, if the selector has been handled.
* Return null when the caller must handle the selector otherwise.
*/
private org.caosdb.api.entity.v1.Value.Builder handleSpecialSelectors(
String selector, EntityInterface e) {
org.caosdb.api.entity.v1.Value.Builder result = null;
switch (selector) {
case "value":
try {
e.parseValue();
} catch (Message m) {
throw new TransactionException(m);
}
if (e.hasValue()) {
return convert(e.getValue());
}
break;
case "version":
if (e.hasVersion()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getVersion().getId()));
return result;
}
break;
case "name":
if (e.hasName()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getName()));
return result;
}
break;
case "id":
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getId().toString()));
return result;
case "description":
if (e.hasDescription()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getDescription()));
return result;
}
......@@ -653,24 +668,28 @@ public class CaosDBToGrpcConverters {
case "unit":
final String unit = getStringUnit(e);
if (unit != null) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(unit));
return result;
}
break;
case "datatype":
if (e.hasDatatype()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getDatatype().toString()));
return result;
}
break;
case "path":
if (e.hasFileProperties() && e.getFileProperties().hasPath()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(e.getFileProperties().getPath()));
return result;
}
break;
case "parent":
if (e.hasParents()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
CollectionValues.Builder parents = CollectionValues.newBuilder();
for (org.caosdb.server.entity.wrapper.Parent p : e.getParents()) {
parents.addValues(ScalarValue.newBuilder().setStringValue(p.getName()));
......@@ -680,6 +699,16 @@ public class CaosDBToGrpcConverters {
}
break;
default:
break;
}
return null;
}
private org.caosdb.api.entity.v1.Value.Builder getSelectedValue(Selection s, EntityInterface e) {
org.caosdb.api.entity.v1.Value.Builder result = null;
String selector = s.getSelector();
result = handleSpecialSelectors(selector, e);
if (result == null) {
// selector for a normal property
List<org.caosdb.api.entity.v1.Value.Builder> results = new LinkedList<>();
for (Property p : e.getProperties()) {
......@@ -695,72 +724,15 @@ public class CaosDBToGrpcConverters {
results.add(convert(p.getValue()));
} else {
// with subselection, e.g. p1.unit, site.geolocation.longitude
switch (s.getSubselection().getSelector()) {
case "name":
if (p.hasName()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(p.getName()));
results.add(result);
}
break;
case "id":
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(p.getId().toString()));
results.add(result);
break;
case "version":
if (p.hasVersion()) {
result.setScalarValue(convertStringValue(p.getVersion().getId()));
return result;
}
break;
case "description":
if (p.hasDescription()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(p.getDescription()));
results.add(result);
}
break;
case "unit":
final String property_unit = getStringUnit(p);
if (property_unit != null) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(property_unit));
results.add(result);
}
break;
case "datatype":
if (p.hasDatatype()) {
result = org.caosdb.api.entity.v1.Value.newBuilder();
result.setScalarValue(convertStringValue(p.getDatatype().toString()));
results.add(result);
}
break;
case "value":
if (p.hasValue()) {
try {
p.parseValue();
} catch (Message m) {
throw new TransactionException(m);
}
result = org.caosdb.api.entity.v1.Value.newBuilder();
result = convert(p.getValue());
results.add(result);
}
break;
default:
String subselection = s.getSubselection().getSelector();
result = handleSpecialSelectors(subselection, p);
if (result == null) {
// normal property
Value v = p.getValue();
if (v instanceof ReferenceValue) {
EntityInterface referenced_entity = ((ReferenceValue) v).getEntity();
result = getSelectedValue(s.getSubselection(), referenced_entity);
results.add(result);
} else if (v instanceof CollectionValue) {
for (Value i : (CollectionValue) v) {
if (i instanceof ReferenceValue) {
......@@ -778,11 +750,14 @@ public class CaosDBToGrpcConverters {
result = getSelectedValue(s.getSubselection(), p);
results.add(result);
}
break;
} else {
results.add(result);
}
}
}
}
if (results.size() > 1) {
// There have been multiple matching properties
CollectionValues.Builder values = CollectionValues.newBuilder();
......@@ -800,7 +775,11 @@ public class CaosDBToGrpcConverters {
// There has been exactly one matching property
result = results.get(0);
}
return result;
}
if (result == null) {
// no matching property found
result = org.caosdb.api.entity.v1.Value.newBuilder();
}
return result;
}
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment