@Override public Map<String, Object> toMap() { Map<String, Object> map = new HashMap<>(); for (Map.Entry<String, Column> entry : columns.entrySet()) { Column value = entry.getValue(); map.put(value.getName(), convert(value.get())); } return Collections.unmodifiableMap(map); }
private Column getConditions(ColumnCondition columnCondition, Condition condition) { List<ColumnCondition> conditions = new ArrayList<>(column.get(new TypeReference<List<ColumnCondition>>() { })); conditions.add(columnCondition); return Column.of(condition.getNameField(), conditions); }
private Object convert(Object value) { if (value instanceof Column) { Column column = Column.class.cast(value); return Collections.singletonMap(column.getName(), convert(column.get())); } else if (value instanceof Iterable) { List<Object> list = new ArrayList<>(); Iterable.class.cast(value).forEach(e -> list.add(convert(e))); return list; } return value; }
static DefaultColumnCondition between(Column column) { Objects.requireNonNull(column, "column is required"); checkBetweenClause(column.get()); return new DefaultColumnCondition(column, BETWEEN); }
static DefaultColumnCondition in(Column column) { Objects.requireNonNull(column, "column is required"); checkInClause(column.get()); return new DefaultColumnCondition(column, IN); }
private <T> Consumer<Column> convertColumn(T instance, FieldRepresentation field, AbstractColumnEntityConverter converter) { return column -> { GenericFieldRepresentation genericField = GenericFieldRepresentation.class.cast(field); Collection collection = genericField.getCollectionInstance(); List<List<Column>> embeddable = (List<List<Column>>) column.get(); for (List<Column> columnList : embeddable) { Object element = converter.toEntity(genericField.getElementType(), columnList); collection.add(element); } converter.getReflections().setValue(instance, field.getNativeField(), collection); }; } }
@Override public <T> void convert(T instance, List<Column> columns, Optional<Column> column, FieldRepresentation field, AbstractColumnEntityConverter converter) { if (column.isPresent()) { Column subColumn = column.get(); Object value = subColumn.get(); if (Map.class.isInstance(value)) { Map map = Map.class.cast(value); List<Column> embeddedColumns = new ArrayList<>(); for (Map.Entry entry : (Set<Map.Entry>) map.entrySet()) { embeddedColumns.add(Column.of(entry.getKey().toString(), entry.getValue())); } converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), embeddedColumns)); } else { converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), subColumn.get(new TypeReference<List<Column>>() { }))); } } else { converter.getReflections().setValue(instance, field.getNativeField(), converter.toEntity(field.getNativeField().getType(), columns)); } } }
@Override public ColumnCondition negate() { if (NOT.equals(this.condition)) { return this.column.get(ColumnCondition.class); } else { Column column = Column.of(NOT.getNameField(), this); return new DefaultColumnCondition(column, NOT); } }