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

io.rocketbase.commons.resource.AbstractCrudChildRestResource 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;


@Slf4j
public abstract class AbstractCrudChildRestResource extends AbstractBaseCrudRestResource {

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

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

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

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

    public Read create(ID parentId, Write write) {
        return create(buildBaseUriBuilder(parentId), write);
    }

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

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

    UriComponentsBuilder buildBaseUriBuilder(ID parentId) {
        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(getBaseParentApiUrl() + (getBaseParentApiUrl().endsWith("/") ? "" : "/"));
        builder.path(String.valueOf(parentId));
        builder.path((getChildPath().startsWith("/") ? "" : "/") + getChildPath() + (getChildPath().endsWith("/") ? "" : "/"));
        return builder;
    }

    /**
     * @return full qualified url to the parent base url without ID etc
     */
    protected abstract String getBaseParentApiUrl();

    /**
     * @return url path of the child entity
     */
    protected abstract String getChildPath();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy