SearchBase.java

/**
 *
 */
package com.tradecloud.domain.dto.base;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.search.OrgUnitFilter;
import com.tradecloud.repository.SearchMetaParams;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.StringJoiner;

/**
 * Base class for all entity search classes.
 */
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public abstract class SearchBase implements OrgUnitFilter, Serializable {

    @JsonIgnore
    private boolean filteredByOrg;

    private Boolean imports = Boolean.TRUE;

    /**
     * This method has an empty implementation. It is a hook method for
     * subclasses to specify the table name of the entity they represent.
     *
     * @return The table name of the entity
     */
    @JsonIgnore
    public abstract String getTableName();

    @JsonIgnore
    private SearchMetaParams searchMetaParams;

    @JsonIgnore
    public SearchMetaParams getSearchMetaParams() {
        return searchMetaParams;
    }

    @JsonIgnore
    public void setSearchMetaParams(SearchMetaParams searchMetaParams) {
        this.searchMetaParams = searchMetaParams;
    }

    @JsonIgnore
    public boolean isFilteredByUserOrg() {
        return filteredByOrg;
    }

    @JsonIgnore
    public void setFilteredByUserOrg(boolean filteredByOrg) {
        this.filteredByOrg = filteredByOrg;
    }

    @Override
    @JsonIgnore
    public boolean noSelectedOrgUnit() {
        return false;
    }

    //breaks order search screen export if not commented
    @JsonIgnore
    public void setOrganisationalUnits2(List<OrganisationalUnit> organisationalUnits) {
        //throw new NotImplementedException("implement this");
    }

    @JsonIgnore
    public Collection<OrganisationalUnit> getOrganisationalUnits2() {
        //throw new NotImplementedException("implement this");
        return null;
    }

    @JsonIgnore
    public void setOrganisationalUnit2(OrganisationalUnit organisationalUnit) {
        //throw new NotImplementedException("implement this");
    }

    public Boolean getImports() {
        return imports;
    }

    public void setImports(Boolean imports) {
        this.imports = imports;
    }

    public Boolean isImports(){
        return imports;
    }

    public static void addIfNotNull(StringJoiner joiner, String name, Object value) {
        if (value != null) {
            joiner.add(name + "=" + value);
        }
    }

    public static void addIfNotBlank(StringJoiner joiner, String name, String value) {
        if (value != null && !value.isBlank()) {
            joiner.add(name + "='" + value + "'");
        }
    }

    public static void addIfNotEmpty(StringJoiner joiner, String name, Object[] value) {
        if (value != null && value.length > 0) {
            joiner.add(name + "=" + Arrays.toString(value));
        }
    }
}