Как правило, нестандартная реализация источника данных требуется для изменения процесса загрузки коллекции сущностей. При
создании класса такого источника рекомендуется унаследовать его от 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().

