4.5.3.1.3. Собственные классы реализации

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