/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-inventory-client/src/main/java/com/liferay/headless/commerce/admin/inventory/client/pagination/Page.java

https://github.com/vilmospapp/liferay-portal · Java · 296 lines · 224 code · 55 blank · 17 comment · 36 complexity · 22bbed91e6b4f2c3a1c91a45472c4dd5 MD5 · raw file

  1. /**
  2. * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.headless.commerce.admin.inventory.client.pagination;
  15. import com.liferay.headless.commerce.admin.inventory.client.aggregation.Facet;
  16. import com.liferay.headless.commerce.admin.inventory.client.json.BaseJSONParser;
  17. import java.util.ArrayList;
  18. import java.util.Collection;
  19. import java.util.Iterator;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Objects;
  23. import java.util.Set;
  24. import java.util.function.Function;
  25. import java.util.stream.Collectors;
  26. import java.util.stream.Stream;
  27. import javax.annotation.Generated;
  28. /**
  29. * @author Alessio Antonio Rendina
  30. * @generated
  31. */
  32. @Generated("")
  33. public class Page<T> {
  34. public static <T> Page<T> of(
  35. String json, Function<String, T> toDTOFunction) {
  36. PageJSONParser pageJSONParser = new PageJSONParser(toDTOFunction);
  37. return (Page<T>)pageJSONParser.parseToDTO(json);
  38. }
  39. public Map<String, Map> getActions() {
  40. return _actions;
  41. }
  42. public List<Facet> getFacets() {
  43. return _facets;
  44. }
  45. public Collection<T> getItems() {
  46. return _items;
  47. }
  48. public long getLastPage() {
  49. if (_totalCount == 0) {
  50. return 1;
  51. }
  52. return -Math.floorDiv(-_totalCount, _pageSize);
  53. }
  54. public long getPage() {
  55. return _page;
  56. }
  57. public long getPageSize() {
  58. return _pageSize;
  59. }
  60. public long getTotalCount() {
  61. return _totalCount;
  62. }
  63. public boolean hasNext() {
  64. if (getLastPage() > _page) {
  65. return true;
  66. }
  67. return false;
  68. }
  69. public boolean hasPrevious() {
  70. if (_page > 1) {
  71. return true;
  72. }
  73. return false;
  74. }
  75. public void setActions(Map<String, Map> actions) {
  76. _actions = actions;
  77. }
  78. public void setFacets(List<Facet> facets) {
  79. _facets = facets;
  80. }
  81. public void setItems(Collection<T> items) {
  82. _items = items;
  83. }
  84. public void setPage(long page) {
  85. _page = page;
  86. }
  87. public void setPageSize(long pageSize) {
  88. _pageSize = pageSize;
  89. }
  90. public void setTotalCount(long totalCount) {
  91. _totalCount = totalCount;
  92. }
  93. @Override
  94. public String toString() {
  95. StringBuilder sb = new StringBuilder("{\"actions\": ");
  96. sb.append(_toString((Map)_actions));
  97. sb.append(", \"items\": [");
  98. Iterator<T> iterator = _items.iterator();
  99. while (iterator.hasNext()) {
  100. sb.append(iterator.next());
  101. if (iterator.hasNext()) {
  102. sb.append(", ");
  103. }
  104. }
  105. sb.append("], \"page\": ");
  106. sb.append(_page);
  107. sb.append(", \"pageSize\": ");
  108. sb.append(_pageSize);
  109. sb.append(", \"totalCount\": ");
  110. sb.append(_totalCount);
  111. sb.append("}");
  112. return sb.toString();
  113. }
  114. public static class PageJSONParser<T> extends BaseJSONParser<Page> {
  115. public PageJSONParser() {
  116. _toDTOFunction = null;
  117. }
  118. public PageJSONParser(Function<String, T> toDTOFunction) {
  119. _toDTOFunction = toDTOFunction;
  120. }
  121. @Override
  122. protected Page createDTO() {
  123. return new Page();
  124. }
  125. @Override
  126. protected Page[] createDTOArray(int size) {
  127. return new Page[size];
  128. }
  129. @Override
  130. protected void setField(
  131. Page page, String jsonParserFieldName,
  132. Object jsonParserFieldValue) {
  133. if (Objects.equals(jsonParserFieldName, "actions")) {
  134. if (jsonParserFieldValue != null) {
  135. PageJSONParser pageJSONParser = new PageJSONParser(
  136. _toDTOFunction);
  137. page.setActions(
  138. pageJSONParser.parseToMap(
  139. (String)jsonParserFieldValue));
  140. }
  141. }
  142. else if (Objects.equals(jsonParserFieldName, "facets")) {
  143. if (jsonParserFieldValue != null) {
  144. page.setFacets(
  145. Stream.of(
  146. toStrings((Object[])jsonParserFieldValue)
  147. ).map(
  148. this::parseToMap
  149. ).map(
  150. facets -> new Facet(
  151. (String)facets.get("facetCriteria"),
  152. Stream.of(
  153. (Object[])facets.get("facetValues")
  154. ).map(
  155. object -> (String)object
  156. ).map(
  157. this::parseToMap
  158. ).map(
  159. facetValues -> new Facet.FacetValue(
  160. Integer.valueOf(
  161. (String)facetValues.get(
  162. "numberOfOccurrences")),
  163. (String)facetValues.get("term"))
  164. ).collect(
  165. Collectors.toList()
  166. ))
  167. ).collect(
  168. Collectors.toList()
  169. ));
  170. }
  171. }
  172. else if (Objects.equals(jsonParserFieldName, "items")) {
  173. if (jsonParserFieldValue != null) {
  174. page.setItems(
  175. Stream.of(
  176. toStrings((Object[])jsonParserFieldValue)
  177. ).map(
  178. string -> _toDTOFunction.apply(string)
  179. ).collect(
  180. Collectors.toList()
  181. ));
  182. }
  183. }
  184. else if (Objects.equals(jsonParserFieldName, "lastPage")) {
  185. }
  186. else if (Objects.equals(jsonParserFieldName, "page")) {
  187. if (jsonParserFieldValue != null) {
  188. page.setPage(Long.valueOf((String)jsonParserFieldValue));
  189. }
  190. }
  191. else if (Objects.equals(jsonParserFieldName, "pageSize")) {
  192. if (jsonParserFieldValue != null) {
  193. page.setPageSize(
  194. Long.valueOf((String)jsonParserFieldValue));
  195. }
  196. }
  197. else if (Objects.equals(jsonParserFieldName, "totalCount")) {
  198. if (jsonParserFieldValue != null) {
  199. page.setTotalCount(
  200. Long.valueOf((String)jsonParserFieldValue));
  201. }
  202. }
  203. else {
  204. throw new IllegalArgumentException(
  205. "Unsupported field name " + jsonParserFieldName);
  206. }
  207. }
  208. private final Function<String, T> _toDTOFunction;
  209. }
  210. private String _toString(Map<String, Object> map) {
  211. StringBuilder sb = new StringBuilder("{");
  212. Set<Map.Entry<String, Object>> entries = map.entrySet();
  213. Iterator<Map.Entry<String, Object>> iterator = entries.iterator();
  214. while (iterator.hasNext()) {
  215. Map.Entry<String, Object> entry = iterator.next();
  216. sb.append("\"");
  217. sb.append(entry.getKey());
  218. sb.append("\": ");
  219. Object value = entry.getValue();
  220. if (value instanceof Map) {
  221. sb.append(_toString((Map)value));
  222. }
  223. else {
  224. sb.append("\"");
  225. sb.append(value);
  226. sb.append("\"");
  227. }
  228. if (iterator.hasNext()) {
  229. sb.append(", ");
  230. }
  231. }
  232. sb.append("}");
  233. return sb.toString();
  234. }
  235. private Map<String, Map> _actions;
  236. private List<Facet> _facets = new ArrayList<>();
  237. private Collection<T> _items;
  238. private long _page;
  239. private long _pageSize;
  240. private long _totalCount;
  241. }