@Override public void add(Column column) { Objects.requireNonNull(column, "Column is required"); this.columns.put(column.getName(), column); }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Column)) { return false; } Column that = (Column) o; return Objects.equals(name, that.getName()) && Objects.equals(value, that.getValue()); }
@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); }
protected <T> Consumer<String> feedObject(T instance, List<Column> columns, Map<String, FieldRepresentation> fieldsGroupByName) { return (String k) -> { Optional<Column> column = columns.stream().filter(c -> c.getName().equals(k)).findFirst(); FieldRepresentation field = fieldsGroupByName.get(k); ColumnFieldConverter fieldConverter = converterFactory.get(field); fieldConverter.convert(instance, columns, column, field, this); }; }
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; }