Как правило, нестандартная реализация источника данных требуется для изменения процесса загрузки коллекции сущностей. При
создании класса такого источника рекомендуется унаследовать его от CollectionDatasourceImpl
, либо от GroupDatasourceImpl
или HierarchicalDatasourceImpl
, и переопределить метод loadData()
.
Пример:
public class MyDatasource extends CollectionDatasourceImpl<SomeEntity, UUID> { private SomeService someService = AppBeans.get(SomeService.NAME); @Override protected void loadData(Map<String, Object> params) { detachListener(data.values()); data.clear(); for (SomeEntity entity : someService.getEntities()) { data.put(entity.getId(), entity); attachListener(entity); } } }
Здесь data
- поле базового класса, хранящее коллекцию загруженных экземпляров. Методы базового класса detachListener()
и attachListener()
управляют назначением на загруженные сущности слушателя, который оповещает источник данных об изменениях в полях экземпляров.
Для создания нестандартного источника данных декларативным способом необходимо указать класс в атрибуте datasourceClass
элемента XML. При программном создании через DsBuilder
класс источника указывается вызовом setDsClass()
.