use of org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException in project unipop by unipop-graph.
the class NestedEdgeSchema method addElement.
@Override
public BulkableAction<DocumentResult> addElement(Edge edge, boolean create) {
// TODO: use the 'create' parameter to differentiate between add and update
Vertex parentVertex = parentDirection.equals(Direction.OUT) ? edge.outVertex() : edge.inVertex();
Document parentDoc = parentVertexSchema.toDocument(parentVertex);
if (parentDoc == null)
return null;
Map<String, Object> edgeFields = getFields(edge);
Map<String, Object> childFields = getVertexFields(edge, parentDirection.opposite());
Map<String, Object> nestedFields = ConversionUtils.merge(Lists.newArrayList(edgeFields, childFields), this::mergeFields, false);
if (nestedFields == null)
return null;
Set<String> idField = propertySchemas.stream().map(schema -> schema.toFields(Collections.singleton(T.id.getAccessor()))).findFirst().get();
try {
HashMap<String, Object> params = new HashMap<>();
params.put("nestedDoc", nestedFields);
params.put("path", path);
params.put("edgeId", edge.id());
params.put("idField", idField.iterator().next());
HashMap<String, Object> docMap = new HashMap<>();
HashMap<String, Object> script = new HashMap<>();
script.put("params", params);
script.put("inline", UPDATE_SCRIPT);
script.put("lang", "groovy");
docMap.put("scripted_upsert", true);
docMap.put("script", script);
String json = mapper.writeValueAsString(docMap);
return new Update.Builder(json).index(parentDoc.getIndex()).type(parentDoc.getType()).id(parentDoc.getId()).build();
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
Aggregations