All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.ouestfrance.querydsl.postgrest.model.HeaderRange Maven / Gradle / Ivy

package fr.ouestfrance.querydsl.postgrest.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Range object
 */
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class HeaderRange {

    /**
     * Range regexp
     */
    @SuppressWarnings("java:S5852")
    private static final Pattern REGEXP = Pattern.compile("(?\\d+)-(?\\d+)/(?[*\\d]+)");
    /**
     * Start of the range
     */
    private int offset;
    /**
     * Limit of the range
     */
    private int limit;
    /**
     * Total elements
     */
    private long totalElements;

    /**
     * Range string format is "{offset}-{limit}/{totalElements}
     *
     * @param rangeString string representation of range
     * @return range object
     */
    public static HeaderRange of(String rangeString) {
        Matcher matcher = REGEXP.matcher(rangeString);
        HeaderRange range = new HeaderRange();
        if (matcher.find()) {
            range.offset = Integer.parseInt(matcher.group("offset"));
            range.limit = Integer.parseInt(matcher.group("limit"));
            String total = matcher.group("total");
            if (total.startsWith("*")) {
                range.totalElements = range.limit - range.offset + 1;
            } else {
                range.totalElements = Long.parseLong(total);
            }
        }
        return range;
    }

    /**
     * Get count
     *
     * @return count
     */
    public long getCount() {
        return totalElements == 0 ? 0 : limit - offset + 1;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy