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;
}
}