StockLevelRow.java

package com.tradecloud.domain.model.requestforquote;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.place.FinalDestination;

import javax.persistence.*;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

@MappedSuperclass
public abstract class StockLevelRow extends PersistenceBase {

    @ElementCollection
    @MapKeyEnumerated(EnumType.STRING)
    private Map<GeneratedColumns, BigDecimal> columnValueMap =new HashMap<>();

    private transient int rowNo;

    @Enumerated(value = EnumType.STRING)
    private GeneratedColumns averageUsed;
    private Integer originalQuantity;
    private Integer branchQuantity;
    private Integer rfqQuantity;
    private String reason;

    public Integer getColumn(GeneratedColumns column) {
        return switch (column.getType()) {
           case SALE,STOCK , AVERAGE -> getColumnValue(column);
            default -> null;
        };
    }

    public Integer getTotalColumn(GeneratedColumns column) {
       if(column==GeneratedColumns.ORIGINAL_QUANTITY){
           return getOriginalQuantity();
       }else{
         return   getColumn(column);
       }
    }

    public String getStyle(){
        return null;
    }

    public String getCode(){
        return null;
    }

    public String getDescription(){
        return null;
    }

    public String getBrand(){
        return null;
    }

    public int getRowNo() {
        return rowNo;
    }

    public void setRowNo(int rowNo) {
        this.rowNo = rowNo;
    }

    public void addColumnValue(GeneratedColumns col, int value) {
        columnValueMap.merge(col, BigDecimal.valueOf(value), BigDecimal::add);
    }

    public void addColumnValue(GeneratedColumns col, double value) {
        columnValueMap.merge(col, BigDecimal.valueOf(value), BigDecimal::add);
    }

    public Integer getColumnValue(GeneratedColumns col) {
        BigDecimal bigDecimal = columnValueMap.get(col);
        return bigDecimal !=null?bigDecimal.intValue():null;
    }

    public BigDecimal getColumnValueBigDecimal(GeneratedColumns col) {
        BigDecimal bigDecimal = columnValueMap.get(col);
        return bigDecimal ;
    }

    public GeneratedColumns getAverageUsed() {
        return averageUsed;
    }

    public void setAverageUsed(GeneratedColumns averageUsed) {
        this.averageUsed = averageUsed;
    }

    public void setColumnValueMap(Map<GeneratedColumns, BigDecimal> columnValueMap) {
        this.columnValueMap = columnValueMap;
    }

    public Map<GeneratedColumns, BigDecimal> getColumnValueMap() {
        return columnValueMap;
    }

    public Integer getBranchQuantity() {
        return branchQuantity;
    }

    public void setBranchQuantity(Integer branchQuantity) {
        this.branchQuantity = branchQuantity;
    }

    public Integer getRfqQuantity() {
        return rfqQuantity;
    }

    public void setRfqQuantity(Integer rfqQuantity) {
        this.rfqQuantity = rfqQuantity;
    }

    public FinalDestination getFinalDestination(){
        return null;
    }

    public boolean isProduct(){
        return false;
    }

    public Integer getOriginalQuantity() {
        return originalQuantity;
    }

    public void setOriginalQuantity(Integer originalQuantity) {
        this.originalQuantity = originalQuantity;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public boolean isRegion(){
        return false;
    }

    public boolean isStyleLevel(){
        return false;
    }

    public boolean isRootLevel(){
        return false;
    }

    public boolean isBranchQuantitySelected() {
        return false;
    }

    public void setBranchQuantitySelected(boolean branchQuantitySelected) {

    }

    public boolean isOriginalQuantitySelected() {
        return false;
    }

    public void setOriginalQuantitySelected(boolean originalQuantitySelected) {

    }

    @Override
    public String toString() {
        return "StockLevelRow{" +
                "originalQuantity=" + originalQuantity +
                ", branchQuantity=" + branchQuantity +
                ", rfqQuantity=" + rfqQuantity +
                ", reason='" + reason + '\'' +
                '}';
    }
}