/** * Get DataTable pagination information from query parameters * * @param uriInfo * query parameters. * @param ormMapping * Optional JSon to ORM property mapping. * @return a {@link PageRequest} instance containing sort and page sizes. */ public PageRequest getPageRequest(final UriInfo uriInfo, final Map<String, String> ormMapping) { return getPageRequest(uriInfo, ormMapping, null); }
/** * Get JQGrid pagination information from query parameters. * * @param uriInfo * query parameters. * @return a page request build with sort and filter. */ public UiPageRequest getUiPageRequest(final UriInfo uriInfo) { return getUiPageRequest(uriInfo, IDENTITY_MAPPING); }
/** * Return a filtered sublist where item match the criteria (query parameter "q") * * @param uriInfo * filter data. * @param items * the items to filter and paginate in memory. * @return the filtered items with pagination information. */ public TableItem<String> getFilteredStringList(final UriInfo uriInfo, final Collection<String> items) { return getFilteredStringList(uriInfo, items.stream()); }
/** * Return containers the current user can manage with administration access. * * @param uriInfo * filter data. * @return containers the current user can manage. */ @GET @Path("filter/admin") public TableItem<String> getContainersForAdmin(@Context final UriInfo uriInfo) { return paginationJson.applyPagination(uriInfo, getCacheRepository().findAllAdmin(securityHelper.getLogin(), DataTableAttributes.getSearch(uriInfo), paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS)), CacheContainer::getName); }
/** * Get JQGrid pagination information from query parameters. * * @param uriInfo * query parameters. * @param ormMapping * Optional JSon to ORM property mapping. * @return a page request build with sort and filter. */ public UiPageRequest getUiPageRequest(final UriInfo uriInfo, final Map<String, String> ormMapping) { final MultivaluedMap<String, String> parameters = uriInfo.getQueryParameters(); // Build the page request object final UiPageRequest request = new UiPageRequest(); request.setUiFilter(buildFilter(parameters.getFirst("filters"))); request.setUiSort(buildSort(getOrmColumn(ormMapping, getSortColumn(parameters)), getSortDirection(parameters))); request.setPage(ObjectUtils.defaultIfNull(getPage(parameters), 1)); request.setPageSize(getPageLength(parameters)); return request; }
/** * Return all users. * * @param uriInfo * Query context. * @return all users. */ @GET public TableItem<String> findAll(@Context final UriInfo uriInfo) { return paginationJson.applyPagination(uriInfo, repository.findAll(paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS)), TO_BUSINESS); }
/** * Return a {@link TableItem} instance containing the given items and the pagination information. * * @param uriInfo * filter data. * @param items * the items to paginate in memory. * @param transformer * the paginated item transformer. * @return the paginated items with pagination information. * @param <T> * The collection target item type. * @param <E> * The collection source item type. */ public <E, T> TableItem<T> applyPagination(final UriInfo uriInfo, final Collection<E> items, final Function<E, T> transformer) { final UiPageRequest uiPageRequest = paginationJson.getUiPageRequest(uriInfo); final PageRequest pageRequest = PageRequest.of(uiPageRequest.getPage() - 1, uiPageRequest.getPageSize()); return paginationJson.applyPagination(uriInfo, newPage(items, pageRequest), transformer); }
/** * Get DataTable pagination information from query parameters. * * @param uriInfo * Query parameters. * @param ormMapping * Optional JSon to ORM property mapping. * @param caseSensitiveColumns * Optional JSon columns name where the case sensitive ordering is requested. The "lower" function will * not be used for the "ORDER BY" in this case. * @return a {@link PageRequest} instance containing sort and page sizes. */ public PageRequest getPageRequest(final UriInfo uriInfo, final Map<String, String> ormMapping, final Collection<String> caseSensitiveColumns) { // Update pagination informations if (uriInfo == null) { return PageRequest.of(0, 10); } final MultivaluedMap<String, String> parameters = uriInfo.getQueryParameters(); final int pageLength = getPageLength(parameters); final int firstPage = Optional.ofNullable(getPage(parameters)).map(p -> p - 1) .orElse(getStart(parameters) / pageLength); // Update sort informations return buildOrderedPageRequest(ormMapping, parameters, pageLength, firstPage, caseSensitiveColumns); }
/** * Return a filtered sublist where item match the criteria (query parameter "q") * * @param uriInfo * filter data. * @param items * the items as {@link Stream} to filter and paginate in memory. * @return the filtered items with pagination information. */ public TableItem<String> getFilteredStringList(final UriInfo uriInfo, final Stream<String> items) { return applyPagination(uriInfo, items.filter(input -> StringUtils.containsIgnoreCase(input, DataTableAttributes.getSearch(uriInfo))) .collect(Collectors.toList()), Function.identity()); }
/** * Default constructor overriding the default annotation introspector. */ public ObjectMapperTrim() { final SimpleModule module = new SimpleModule("BootstrapModule", new Version(1, 0, 1, null, null, null)); module.addDeserializer(Date.class, DateDeserializer.INSTANCE); module.addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE); module.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); module.addSerializer(Date.class, DateSerializer.INSTANCE); module.addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE); module.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE); module.addSerializer(Enum.class, new LowerCasingEnumSerializer()); // Case insensitive enumeration enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS); registerModule(module); } }
/** * Return all users with roles. * * @param uriInfo * Query context. * @return all users. */ @GET @Path("roles") public TableItem<SystemUserVo> findAllWithRoles(@Context final UriInfo uriInfo) { final Page<SystemUser> findAll = pagination.findAll(SystemUser.class, uriInfo, ORDERED_COLUMNS, null, FETCHED_ASSOCS); // apply pagination return paginationJson.applyPagination(uriInfo, findAll, TO_BUSINESS_ROLES); }
/** * Build the {@link PageRequest} with ordering information. */ private PageRequest buildOrderedPageRequest(final Map<String, String> ormMapping, final MultivaluedMap<String, String> parameters, final int pageLength, final int firstPage, final Collection<String> caseSensitiveColumns) { return Optional.ofNullable(getSortColumn(parameters)) .map(c -> newSortedPageRequest(ormMapping, parameters, pageLength, firstPage, c, caseSensitiveColumns)) .orElse(PageRequest.of(firstPage, pageLength)); }
/** * Retrieve all elements without pagination. * * @return all elements without pagination. */ @GET @org.springframework.transaction.annotation.Transactional(readOnly = true) public TableItem<SystemRole> findAll() { final TableItem<SystemRole> result = new TableItem<>(); result.setData(repository.findAll()); return result; }
/** * Return a filter structure from the JSon string. * * @param jsonString * the JSon string generated by JQGrid component. * @return a filter structure. */ public UiFilter buildFilter(final String jsonString) { if (jsonString != null) { final ObjectMapper mapper = new org.ligoj.bootstrap.core.json.ObjectMapperTrim(); try { return mapper.readValue(jsonString, UiFilter.class); } catch (final IOException e) { // Ignore invalid UI filter, considered as no UI filter log.error(String.format("Unable to parse JSon data :%s", jsonString), e); } } return new UiFilter(); } }
@Override public Date deserialize(final JsonParser parser, final DeserializationContext context) throws IOException { if (parser.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) { final Calendar newCalendar = DateUtils.newCalendar(); newCalendar.setTimeInMillis(parser.getLongValue()); return newCalendar.getTime(); } return _parseDate(parser, context); }
/** * Return containers the current user can see. A user always sees his * company, as if he had a company delegation to see it. * * @param uriInfo * filter data. * @return containers the current user can see. */ @GET @Path("filter/read") public TableItem<String> getContainers(@Context final UriInfo uriInfo) { return paginationJson.applyPagination(uriInfo, getCacheRepository().findAll(securityHelper.getLogin(), DataTableAttributes.getSearch(uriInfo), paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS)), CacheContainer::getName); }
/** * Retrieve all project with pagination, and filtered. A visible project is attached to a visible group. * * @param uriInfo * pagination data. * @param criteria * the optional criteria to match. * @return all elements with pagination. */ @GET public TableItem<ProjectLightVo> findAll(@Context final UriInfo uriInfo, @QueryParam(DataTableAttributes.SEARCH) final String criteria) { final Page<Object[]> findAll = repository.findAllLight(securityHelper.getLogin(), StringUtils.trimToEmpty(criteria), paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS)); // apply pagination and prevent lazy initialization issue return paginationJson.applyPagination(uriInfo, findAll, this::toVoLightCount); }
/** * Get a list of JPA entities matching the given filter. The result is paginated and filtered. * * @param <T> * JPA entity type to fetch. * @param entityType * JPA entity class to fetch. * @param uriInfo * query parameters. * @param mapping * the JSON to SQL mapping. Property access is allowed using '.' separator. * @param specifications * the optional custom specification mapping. * @param fetch * A map of association to fetch. The map keys for composites associations should not have two times the * same identifier <"contrat.contrat", JoinType.INNER> is not possible although * <"contrats.contrat", JoinType.INNER> is accepted. * @return a list of JPA entities matching the given filter. The result is paginated and filtered. */ public <T> Page<T> findAll(final Class<T> entityType, final UriInfo uriInfo, final Map<String, String> mapping, final Map<String, CustomSpecification> specifications, final Map<String, JoinType> fetch) { return findAll(entityType, paginationJson.getUiPageRequest(uriInfo), mapping, specifications, fetch); }
/** * Return containers the current user can manage with write access. * * @param uriInfo * filter data. * @return containers the current user can manage. */ @GET @Path("filter/write") public TableItem<String> getContainersForWrite(@Context final UriInfo uriInfo) { return paginationJson.applyPagination(uriInfo, getCacheRepository().findAllWrite(securityHelper.getLogin(), DataTableAttributes.getSearch(uriInfo), paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS)), CacheContainer::getName); }
/** * Retrieve all elements with pagination * * @param uriInfo * pagination data. * @param criteria * Optional text to match. * @return all elements with pagination. */ @GET public TableItem<DelegateNode> findAll(@Context final UriInfo uriInfo, @QueryParam(DataTableAttributes.SEARCH) final String criteria) { final PageRequest pageRequest = paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS); final Page<DelegateNode> findAll = repository.findAll(securityHelper.getLogin(), StringUtils.trimToNull(criteria), pageRequest); // apply pagination and prevent lazy initialization issue return paginationJson.applyPagination(uriInfo, findAll, Function.identity()); }