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

io.rocketbase.commons.resource.AbstractCrudRestResource Maven / Gradle / Ivy

package io.rocketbase.commons.resource;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.rocketbase.commons.dto.PageableResult;
import io.rocketbase.commons.request.PageableRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.util.UriComponentsBuilder;

import java.io.Serializable;
import java.util.function.Consumer;


@Slf4j
public abstract class AbstractCrudRestResource extends AbstractBaseCrudRestResource {


    @Autowired
    public AbstractCrudRestResource(ObjectMapper objectMapper) {
        super(objectMapper);
    }

    /**
     * will call paged find method, iterate through all results and execute the consumer on all data instances
     *
     * @param execute   method to exeute on all found instances
     * @param batchSize pagesize with which the find method is called
     */
    public void executeAll(Consumer execute, int batchSize) {
        int page = 0;
        PageableResult pageableResult;
        do {
            pageableResult = find(page++, batchSize);
            pageableResult.forEach(execute);
        } while (pageableResult.hasNextPage());
    }

    public PageableResult find(int page, int pagesize) {
        return find(appendParams(buildBaseUriBuilder(),
                new PageableRequest(page, pagesize, null)));
    }

    public PageableResult find(PageableRequest request) {
        return find(appendParams(buildBaseUriBuilder(), request));
    }

    public Read getById(ID id) {
        return getById(buildBaseUriBuilder().path(String.valueOf(id)));
    }

    public Read create(Write write) {
        return create(UriComponentsBuilder.fromUriString(
                getBaseApiUrl()), write);
    }

    public Read update(ID id, Write write) {
        return update(buildBaseUriBuilder().path(String.valueOf(id)), write);
    }

    public void delete(ID id) {
        delete(buildBaseUriBuilder().path(String.valueOf(id)));
    }

    /**
     * @return full qualified url to the entity base url
     */
    protected abstract String getBaseApiUrl();

    UriComponentsBuilder buildBaseUriBuilder() {
        return UriComponentsBuilder.fromUriString(getBaseApiUrl() + (getBaseApiUrl().endsWith("/") ? "" : "/"));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy