public SubDocument from(String subdocAsJson, SubDocType subDocType) { JsonReader reader = Json.createReader(new StringReader(subdocAsJson)); JsonObject jsonObject = reader.readObject(); SubDocument.Builder builder = SubDocument.Builder.withKnownType(subDocType); for (Map.Entry<String, JsonValue> entry : jsonObject.entrySet()) { Object objectValue = jsonValueToObject(entry.getValue()); convertAttribute(builder, entry.getKey(), objectValue, subDocType); } return builder.build(); }
@Override public Void visit(KVDocument value, TranslatorConsumer arg) { SubDocType type = collectedTypes.get(value); DocStructure.Builder structureBuilder = new DocStructure.Builder(); SubDocument.Builder subDocBuilder = SubDocument.Builder.withKnownType(type); int index = consumeIndex(type); structureBuilder.setIndex(index); structureBuilder.setType(type); subDocBuilder.setIndex(index); subDocBuilder.setDocumentId(docId); ObjectTranslatorConsumer consumer = new ObjectTranslatorConsumer( subDocBuilder, structureBuilder); for (DocEntry<?> entry : value) { consumer.setAttributeName(entry.getKey()); entry.getValue().accept(this, consumer); } splitDocBuilder.add(subDocBuilder.build()); arg.consume(structureBuilder.built()); return null; }
public SubDocument getSubDoc() { SubDocType subDocType = table.getSubDocType(); SubDocument.Builder builder = SubDocument.Builder.withKnownType(subDocType); for (Field<? extends ScalarValue<? extends Serializable>> field : table.getSubDocFields()) { String attName = SubDocHelper.toAttributeName(field.getName()); SubDocAttribute att = subDocType.getAttribute(attName); builder.add(att, getValue(field)); } builder.setDocumentId(getValue(table.getDidColumn())); Integer index = getValue(table.getIndexColumn()); if (index == null) { index = 0; } builder.setIndex(index); return builder.build(); }