diff --git a/pom.xml b/pom.xml index eea7434..381c3de 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ru.simplex_software wicket-springdata - 1.1 + 1.2-SNAPSHOT wicket-springdata http://www.simplex-software.ru diff --git a/src/main/java/ru/simplex_software/wicket_springdata/HibernateModel.java b/src/main/java/ru/simplex_software/wicket_springdata/HibernateModel.java index 0f0e062..b929d9b 100644 --- a/src/main/java/ru/simplex_software/wicket_springdata/HibernateModel.java +++ b/src/main/java/ru/simplex_software/wicket_springdata/HibernateModel.java @@ -1,6 +1,7 @@ package ru.simplex_software.wicket_springdata; import org.apache.wicket.injection.Injector; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.hibernate.Hibernate; @@ -10,9 +11,9 @@ import org.springframework.data.repository.CrudRepository; import java.io.Serializable; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; +import java.util.Optional; +import java.util.stream.StreamSupport; /** * Модель содержит: @@ -66,12 +67,13 @@ // Получаем Persistable сущность. T entity = getObject(); if (entity == null) { - return; + id = null; + tClass = null; + } else { + id = entity.getId(); + tClass = (Class) Hibernate.getClass(entity); } - // Получаем Id и класс Persistable сущности. - id = entity.getId(); - tClass = (Class) Hibernate.getClass(entity); LOG.debug("onDetach end"); } @@ -89,31 +91,21 @@ if (tClass == null) { return null; } - final CrudRepository repository = repositoryFinder.findRepository(tClass); + final CrudRepository repository = repositoryFinder.findRepository(tClass); LOG.trace("repository={}", repository); - return (T) repository.findById(id).get(); + + Optional optional = repository.findById(id); + return optional.orElseThrow(() -> new RuntimeException("Entity with type " + tClass + " and id " + id + " not found.")); } /** - * Оборачивает в модели элементы списка. + * Оборачивает в HibernateModel элементы коллекции, преобразует их к IModel и возвращает итератор. */ - public static > List> wrapElements(List list) { - final ArrayList> models = new ArrayList<>(list.size()); - for (E e : list) { - models.add(new HibernateModel<>(e)); - } - return models; - } - - /** - * Оборачивает в модели элементы списка и возвращает итератор. - */ - public static > Iterator> wrapAndIterateElements(List list) { - final ArrayList> models = new ArrayList<>(list.size()); - for (E e : list) { - models.add(new HibernateModel<>(e)); - } - return models.iterator(); + public static > Iterator> getItemsModels(Iterable iterable) { + return StreamSupport.stream(iterable.spliterator(), false) + .map(HibernateModel::new) + .map(item -> (IModel) item) + .iterator(); } @Override diff --git a/src/main/java/ru/simplex_software/wicket_springdata/PersistablesListModel.java b/src/main/java/ru/simplex_software/wicket_springdata/PersistablesListModel.java new file mode 100644 index 0000000..e4dd026 --- /dev/null +++ b/src/main/java/ru/simplex_software/wicket_springdata/PersistablesListModel.java @@ -0,0 +1,59 @@ +package ru.simplex_software.wicket_springdata; + +import org.apache.wicket.model.LoadableDetachableModel; +import org.springframework.data.domain.Persistable; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Hibernate Model списка. + */ +public class PersistablesListModel

> extends LoadableDetachableModel> { + + /** + * Список моделей. + */ + private List> modelList; + + public PersistablesListModel(List

list) { + super(list); + modelList = new ArrayList<>(list.size()); + for (P pe : list) { + modelList.add(new HibernateModel<>(pe)); + } + } + + @Override + public void onDetach() { + for (HibernateModel obj : modelList) { + obj.detach(); + } + } + + @Override + public void setObject(List

object) { + detach(); + super.setObject(object); + modelList = new ArrayList<>(object.size()); + for (P pe : object) { + modelList.add(new HibernateModel<>(pe)); + } + } + + @Override + protected List

load() { + List

list = new ArrayList<>(this.modelList.size()); + for (HibernateModel

hibernateModel : this.modelList) { + hibernateModel.load(); + list.add(hibernateModel.getObject()); + } + return list; + } + + public Iterator> getItegator() { + return modelList.iterator(); + } +}