ExcelHandler#

com.palmyralabs.palmyra.handlers.ExcelHandler

Streams query results as an Excel workbook, combining the tabular export surface with the read-side lifecycle.

Methods#

Method Signature
getReportName default String getReportName() — returns "Report" by default
getHeaders List<ColumnMeta> getHeaders()
aclCheck int aclCheck(FilterCriteria criteria, HandlerContext ctx)
applyQueryFilter QueryFilter applyQueryFilter(QueryFilter filter, HandlerContext ctx)
preProcess void preProcess(FilterCriteria criteria, HandlerContext ctx) — default copies ctx.getParams() into the criteria

Example#

@Component
@CrudMapping(value = "/v1/admin/user/export.xlsx", type = User.class)
public class UserExcelHandler implements ExcelHandler, QueryHandler {

    @Autowired
    private UserProvider userProvider;

    @Override
    public String getReportName() {
        return "Users";
    }

    @Override
    public List<ColumnMeta> getHeaders() {
        return List.of(
            ColumnMeta.of("loginName", "Email"),
            ColumnMeta.of("firstName", "First Name"),
            ColumnMeta.of("lastName",  "Last Name")
        );
    }

    @Override
    public int aclCheck(FilterCriteria criteria, HandlerContext ctx) {
        return userProvider.hasRole("USER_EXPORT") ? 0 : -1;
    }

    @Override
    public void preProcess(FilterCriteria criteria, HandlerContext ctx) {
        ExcelHandler.super.preProcess(criteria, ctx);
        criteria.addAttribute("requestedBy", userProvider.getUserId());
    }

    @Override
    public QueryFilter applyQueryFilter(QueryFilter filter, HandlerContext ctx) {
        // restrict export to active users in the caller's tenant
        filter.addCondition("tenantId", userProvider.getTenantId());
        filter.addCondition("status", "ACTIVE");
        return filter;
    }
}