Skip to content

Instantly share code, notes, and snippets.

@jonathanvila
Created May 29, 2020 16:28
Show Gist options
  • Save jonathanvila/15737f11298a9905b30c2aa3cca99f7c to your computer and use it in GitHub Desktop.
Save jonathanvila/15737f11298a9905b30c2aa3cca99f7c to your computer and use it in GitHub Desktop.
To transform a Page<Object> to Map<String,Object>
package org.jboss.xavier.integrations.jpa.service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.inject.Named;
import org.apache.camel.Exchange;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
@Component
public class ApiService {
@Value("${camel.component.servlet.mapping.context-path}")
String contextPath;
public Map<String,Object> mapToCustomPage(Exchange exchange) {
Page<Object> page = (Page<Object>) exchange.getIn().getBody();
Map<String, Object> result = new HashMap<>();
Map<String, Object> meta = new HashMap<>();
meta.put("count", page.getTotalElements());
meta.put("limit", page.getSize());
meta.put("offset", page.getNumber());
result.put("meta", meta);
result.put("data", page.getContent());
Map<String, Object> links = new HashMap<>();
links.put("first", getURLLink(exchange.getIn().getHeader(Exchange.HTTP_URI, String.class)+exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class), 0, page.getSize()));
links.put("last", getURLLink(exchange.getIn().getHeader(Exchange.HTTP_URI, String.class)+exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class), page.getTotalPages() -1, page.getSize()));
result.put("links", links);
return result;
}
private String getURLLink(String url, int offset, int limit) {
int indexOfQuestion = url.indexOf("?");
if (indexOfQuestion >= 0) {
String query = url.substring(indexOfQuestion);
String urlNoParams = url.substring(0, indexOfQuestion);
String params = Arrays.asList(query.split("&")).stream().filter(e -> !e.startsWith("limit") && !e.startsWith("offset")).collect(Collectors.joining());
url = urlNoParams + ((params.isEmpty()) ? "?" : "?" + params + "&");
} else {
url = url + "?";
}
url = url + "limit=" + limit;
url = url + "&offset=" + offset;
return url;
}
}
<rest path="/mappings">
<description>Mapping REST API</description>
<get uri="/flag-assessment">
<param name="offset" type="query" defaultValue="0" required="false" description="Define the page requested" />
<param name="limit" type="query" defaultValue="10" required="false" description="Define the size of the requested page" /> <!-- ${{pagination.defaults.flag-assessment.limit}} -->
<route id="mappings-flag-assessment-findAll">
<!-- RBAC check start-->
<setHeader headerName="${type:org.jboss.xavier.integrations.rbac.RBACRouteBuilder.RBAC_ENDPOINT_RESOURCE_NAME}"><constant>mappings</constant></setHeader>
<setHeader headerName="${type:org.jboss.xavier.integrations.rbac.RBACRouteBuilder.RBAC_ENDPOINT_RESOURCE_PERMISSION}"><constant>read</constant></setHeader>
<to uri="direct:check-rbac-permissions" />
<!-- RBAC check end-->
<bean ref="flagAssessmentService" method="findAll(${header.offset}, ${header.limit})" />
<bean ref="apiService" method="mapToCustomPage(${exchange})"/>
</route>
</get>
</rest>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment