Add list View Provider

We will add View provider that will show Employees from Database

First create Group of columns for Employee

public class EmployeesGroup extends DBColumnsGroupReflexive{
        /** Localization path */
        public static final String locPath = "ui/lists/employees";
        /** Id of group */
        public static final String ID = EmployeesGroup.class.getSimpleName();
        static LocPair<StringLocValue> LOC_PAIR = new LocPairImpl<StringLocValue>(locPath,ID);
        /** DB mapping */
        public static final SJoinable mapping = new STable(EMPDBSchema.NAME,DBTableEmployee.NAME);
        /** Columns container for reflection */
        public static class Columns extends DBTableEmployee.Columns{
        }
}

Add provider that will show employees

public class EmployeeDBListViewProviderImpl extends AbstractRDBListViewProviderImpl {
        
        /**
         * Creates AllEmployeesDBListViewProviderImpl
         * @param viewProviderParams
         * @param listViewProviderParameter
         */
        public EmployeeDBListViewProviderImpl(
                        ViewProviderParams viewProviderParams,
                        ViewProviderDBParams listViewProviderParameter) {
                super(viewProviderParams, listViewProviderParameter);
        }
        
        private static LocKey locPrefix = new LocKeyImpl("list/empList","employeeDBList");
        
        @Override
        protected LocKey getLocPrefix() {
                return locPrefix;
        }

        
        @Override
        protected ViewProviderComponentToolbar setupMainToolbar(){
                ViewProviderComponentToolbar toolBar = super.setupMainToolbar();
                toolBar.addComponent(createShowTaskRecordsBtn());
                return toolBar;
        }
        
        @Override
        protected Sort setupInitSort() {
                return new Sort(Arrays.asList(new SortItem(ListViewUtils.getColumnId(EmployeeGroup.ID, EmployeeGroup.Columns.SURNAME.name))));
        }

        
        
        /**
         * Creates button to show all employees task records
         * @return show employee task records button
         */
        protected ToggleButtonViewProviderComponent createShowTaskRecordsBtn(){
                ToggleButtonLocValue locValue = locService.localizeData(locPrefix.createChildKey("taskRecordsSubList"), session.getSettingsContext(), new ToggleButtonLocValueBuilderFactory().createBuilder(), null, null);
                String idColumn = ListViewUtils.getColumnId(EmployeeGroup.ID,EmployeeGroup.Columns.ID.getName());
                String joinColumn = ListViewUtils.getColumnId(EmployeeTaskRecordGroup.ID,EmployeeTaskRecordGroup.Columns.EMPLOYEE_ID.getName());
                ShowViewProviderCommand showSublistCmd = ShowViewProviderCommand.showSubListProvider(
                                new ViewProviderDef(ViewProviderKind.ListViewProvider,EmployeeTaskRecordDBListViewProviderImpl.class),
                                new MacroAdjustCurrentData(
                                                new SetSublistSimpleJoinCriteriaAdjustCurrentData(idColumn,joinColumn),
                                                new SetIDAdjustCurrentData(idColumn,Employee.EMPLOYEE_ID_KEY)
                                                )
                                );
                Command cmd = new ShowOrDisposeViewProviderCommand(showSublistCmd);
                ToggleButtonViewProviderComponent toggleButtonViewProviderComponent = new ToggleButtonViewProviderComponentImpl("taskRecordsSubList",locValue,cmd);
                return toggleButtonViewProviderComponent;
        }

        

        @Override
        protected GroupsListViewDef setupGroupsListViewDef() {
                EmployeeGroup employeeGroup = new EmployeeGroup();
                return new GroupsListViewDefDBBuilderImpl().setMainGroup(employeeGroup).
                addEqJoin(
                                DepartmentGroup.createjoinGroup(), DepartmentGroup.class.getSimpleName(), 
                                employeeGroup.getJoinable().getAlias(), SJoinType.INNER, DepartmentGroup.Columns.ID.name, EmployeeGroup.Columns.DEPARTMENT_ID.name).
                addEqJoin(
                                WorkPositionGroup.createjoinGroup(), WorkPositionGroup.class.getSimpleName(), 
                                employeeGroup.getJoinable().getAlias(), SJoinType.INNER, WorkPositionGroup.Columns.ID.name, EmployeeGroup.Columns.WORK_POSITION_ID.name).
                getDef();
        }
        
        @Override
        protected Class<? extends AbstractEntityService> getMainBusinessServiceClass() {
                return EmployeeService.class;
        }
        
        @Override
        protected ViewProviderDef getMainDetailViewProviderDef() {
                return new ViewProviderDef(ViewProviderKind.DetailViewProvider,EmployeeDetailImpl.class);
        }
        
}