This commit is contained in:
Tadgh 2021-06-30 14:55:57 -04:00
parent 91dee55279
commit 883337a9f4
3 changed files with 25 additions and 12 deletions

View File

@ -695,7 +695,3 @@ This operation can also be done at the Instance level. When this is the case, th
http://example.com/Patient/123/$mdm-submit http://example.com/Patient/123/$mdm-submit
http://example.com/Practitioner/456/$mdm-submit http://example.com/Practitioner/456/$mdm-submit
``` ```

View File

@ -3,7 +3,6 @@ package ca.uhn.fhir.mdm.api.paging;
import ca.uhn.fhir.mdm.api.MdmLinkJson; import ca.uhn.fhir.mdm.api.MdmLinkJson;
import ca.uhn.fhir.rest.server.RestfulServerUtils; import ca.uhn.fhir.rest.server.RestfulServerUtils;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails; import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import ca.uhn.fhir.util.ParametersUtil;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import java.util.Arrays; import java.util.Arrays;
@ -11,7 +10,20 @@ import java.util.Arrays;
import static ca.uhn.fhir.rest.api.Constants.PARAM_COUNT; import static ca.uhn.fhir.rest.api.Constants.PARAM_COUNT;
import static ca.uhn.fhir.rest.api.Constants.PARAM_OFFSET; import static ca.uhn.fhir.rest.api.Constants.PARAM_OFFSET;
/**
* Builder to generate {@link MdmPageLinkTuple} objects, based on a given page of data and the incoming page request.
*/
public final class MdmPageLinkBuilder { public final class MdmPageLinkBuilder {
/**
* Generates an {@link MdmPageLinkTuple} which contains previous/self/next links for pagination purposes.
*
* @param theServletRequestDetails the incoming request details. Used to determine server base.
* @param theCurrentPage the page of MDM link data. Used for determining if there are next/previous pages available.
* @param thePageRequest the incoming Page request, containing requested offset and count. Used for building offset for outgoing URLs.
*
* @return the {@link MdmPageLinkTuple}
*/
public static MdmPageLinkTuple buildMdmPageLinks(ServletRequestDetails theServletRequestDetails, Page<MdmLinkJson> theCurrentPage, MdmPageRequest thePageRequest) { public static MdmPageLinkTuple buildMdmPageLinks(ServletRequestDetails theServletRequestDetails, Page<MdmLinkJson> theCurrentPage, MdmPageRequest thePageRequest) {
MdmPageLinkTuple tuple = new MdmPageLinkTuple(); MdmPageLinkTuple tuple = new MdmPageLinkTuple();
String urlWithoutPaging = RestfulServerUtils.createLinkSelfWithoutGivenParameters(theServletRequestDetails.getFhirServerBase(), theServletRequestDetails, Arrays.asList(PARAM_OFFSET, PARAM_COUNT)); String urlWithoutPaging = RestfulServerUtils.createLinkSelfWithoutGivenParameters(theServletRequestDetails.getFhirServerBase(), theServletRequestDetails, Arrays.asList(PARAM_OFFSET, PARAM_COUNT));
@ -23,9 +35,9 @@ public final class MdmPageLinkBuilder {
tuple.setPreviousLink(buildLinkWithOffsetAndCount(urlWithoutPaging,thePageRequest.getCount(), thePageRequest.getPreviousOffset())); tuple.setPreviousLink(buildLinkWithOffsetAndCount(urlWithoutPaging,thePageRequest.getCount(), thePageRequest.getPreviousOffset()));
} }
return tuple; return tuple;
} }
protected static String buildLinkWithOffsetAndCount(String theStartingUrl, int theCount, int theOffset) {
private static String buildLinkWithOffsetAndCount(String theStartingUrl, int theCount, int theOffset) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append(theStartingUrl); builder.append(theStartingUrl);
if (!theStartingUrl.contains("?")) { if (!theStartingUrl.contains("?")) {

View File

@ -1,7 +1,6 @@
package ca.uhn.fhir.mdm.api.paging; package ca.uhn.fhir.mdm.api.paging;
import ca.uhn.fhir.rest.server.IPagingProvider; import ca.uhn.fhir.rest.server.IPagingProvider;
import ca.uhn.fhir.rest.server.IRestfulServerDefaults;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.hl7.fhir.dstu3.model.UnsignedIntType; import org.hl7.fhir.dstu3.model.UnsignedIntType;
@ -12,6 +11,11 @@ import static ca.uhn.fhir.rest.api.Constants.PARAM_COUNT;
import static ca.uhn.fhir.rest.api.Constants.PARAM_OFFSET; import static ca.uhn.fhir.rest.api.Constants.PARAM_OFFSET;
import static org.slf4j.LoggerFactory.getLogger; import static org.slf4j.LoggerFactory.getLogger;
/**
* This class is essentially just a data clump of offset + count, as well as the ability to convert itself into a standard
* {@link PageRequest} for spring data to use. The reason we don't use PageRequest natively is because it is concerned with `pages` and `counts`,
* but we are using `offset` and `count` which requires some minor translation.
*/
public class MdmPageRequest { public class MdmPageRequest {
private static final Logger ourLog = getLogger(MdmPageRequest.class); private static final Logger ourLog = getLogger(MdmPageRequest.class);
@ -34,10 +38,6 @@ public class MdmPageRequest {
this.myPage = myOffset / myCount; this.myPage = myOffset / myCount;
} }
public PageRequest toPageRequest() {
return PageRequest.of(this.myPage, this.myCount);
}
private void validatePagingParameters(int theOffset, int theCount) { private void validatePagingParameters(int theOffset, int theCount) {
String errorMessage = ""; String errorMessage = "";
@ -67,7 +67,12 @@ public class MdmPageRequest {
public int getNextOffset() { public int getNextOffset() {
return myOffset + myCount; return myOffset + myCount;
} }
public int getPreviousOffset() { public int getPreviousOffset() {
return myOffset - myCount; return myOffset - myCount;
} }
public PageRequest toPageRequest() {
return PageRequest.of(this.myPage, this.myCount);
}
} }