private static void appendCondition(StringBuilder aql, Map<String, Object> params, char entity, Document document, String condition) { String nameParam = getNameParam(document.getName(), params); aql.append(SEPARATOR).append(entity).append('.').append(document.getName()) .append(condition).append(PARAM_APPENDER).append(nameParam); if(IN.equals(condition)) { params.put(nameParam, ValueUtil.convertToList(document.getValue())); } else { params.put(nameParam, document.get()); } }
@Override public void add(String documentName, Object value) { requireNonNull(documentName, "documentName is required"); requireNonNull(value, "value is required"); this.add(Document.of(documentName, value)); }
static String getPrefix(Document document, String collection) { String id = document.get(String.class); return getPrefix(collection, id); }
@Override public <T> void convert(T instance, List<Document> documents, Optional<Document> document, FieldRepresentation field, AbstractDocumentEntityConverter converter) { Value value = document.get().getValue(); Optional<Class<? extends AttributeConverter>> optionalConverter = field.getConverter(); if (optionalConverter.isPresent()) { AttributeConverter attributeConverter = converter.getConverters().get(optionalConverter.get()); Object attributeConverted = attributeConverter.convertToEntityAttribute(value.get()); converter.getReflections().setValue(instance, field.getNativeField(), field.getValue(Value.of(attributeConverted))); } else { converter.getReflections().setValue(instance, field.getNativeField(), field.getValue(value)); } } }
static DocumentCondition between(Document document) { Objects.requireNonNull(document, "document is required"); checkBetweenClause(document.get()); return new DefaultDocumentCondition(document, Condition.BETWEEN); }
@Override public void add(Document document) { requireNonNull(document, "Document is required"); documents.put(document.getName(), document); }
private static void appendCondition(StringBuilder query, List<Object> params, Document document, String condition, List<ORecordId> ids) { if(OrientDBConverter.RID_FIELD.equals(document.getName())) { ids.add(new ORecordId(document.get(String.class))); return; } query.append(document.getName()) .append(condition).append(PARAM_APPENDER); if(IN.equals(condition)) { params.add(ValueUtil.convertToList(document.getValue())); } else { params.add(document.get()); } }
private static void inKeys(List<String> keys, String documentCollection, Document document) { if(document.getName().equals(KEY_FIELD)){ keys.addAll(document.get(new TypeReference<List<String>>() { })); } else { List<String> ids = document.get(new TypeReference<List<String>>() {}); ids.stream().map(id -> EntityConverter.getPrefix(documentCollection, id)) .forEach(keys::add); } }
private static Consumer<Document> toJsonObject(JsonObject jsonObject) { return d -> { Object value = ValueUtil.convert(d.getValue()); if (Document.class.isInstance(value)) { convertDocument(jsonObject, d, value); } else if (Iterable.class.isInstance(value)) { convertIterable(jsonObject, d, value); } else { jsonObject.put(d.getName(), value); } }; }
@Override public <T> void convert(T instance, List<Document> documents, Optional<Document> document, FieldRepresentation field, AbstractDocumentEntityConverter converter) { if (document.isPresent()) { Document sudDocument = document.get(); Object value = sudDocument.get(); if (Map.class.isInstance(value)) { Map map = Map.class.cast(value); List<Document> embeddedDocument = new ArrayList<>(); for (Map.Entry entry : (Set<Map.Entry>) map.entrySet()) { embeddedDocument.add(Document.of(entry.getKey().toString(), entry.getValue())); } converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), embeddedDocument)); } else { converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), sudDocument.get(new TypeReference<List<Document>>() { }))); } } else { converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), documents)); } } }
static DocumentCondition in(Document document) { Objects.requireNonNull(document, "document is required"); Object value = document.get(); checkInClause(value); return new DefaultDocumentCondition(document, Condition.IN); }
protected <T> Consumer<String> feedObject(T instance, List<Document> documents, Map<String, FieldRepresentation> fieldsGroupByName) { return k -> { Optional<Document> document = documents.stream().filter(c -> c.getName().equals(k)).findFirst(); FieldRepresentation field = fieldsGroupByName.get(k); DocumentFieldConverter fieldConverter = converterFactory.get(field); fieldConverter.convert(instance, documents, document, field, this); }; }