Newer
Older
wicketspringdata / src / main / java / ru / simplex_software / wicket_springdata / PersistableChoiceRenderer.java
package ru.simplex_software.wicket_springdata;

import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Persistable;
import ru.simplex_software.wicket_springdata.functions.SerializableFunction;

import java.io.Serializable;
import java.util.List;

/**
 * Отрисовщик элементов.
 */
public class PersistableChoiceRenderer<T extends Persistable<? extends Serializable>> implements IChoiceRenderer<T> {
    private static final Logger LOG = LoggerFactory.getLogger(PersistableChoiceRenderer.class);

    /**
     * Функция которая возращает отображаемое значение.
     */
    private SerializableFunction<T, String> function;

    public PersistableChoiceRenderer(SerializableFunction<T, String> function) {
        this.function = function;
    }

    @Override
    public Object getDisplayValue(T object) {
        return function.apply(object);
    }

    @Override
    public String getIdValue(T object, int index) {
        return object.getId().toString();
    }

    @Override
    public T getObject(String id, IModel<? extends List<? extends T>> choices) {
        for (T persistable : choices.getObject()) {
            if (id.equals(persistable.getId().toString())) {
                return persistable;
            }
        }
        LOG.warn("Persistable entity with id = {} not found.", id);
        return null;
    }
}