AbstractCostingVisitor.java

package com.tradecloud.domain.costing.clean;

import com.tradecloud.domain.costing.CostableType;
import com.tradecloud.domain.document.CommercialCreditNote;
import com.tradecloud.domain.document.ServiceProviderCreditNote;
import com.tradecloud.domain.document.invoice.*;
import com.tradecloud.domain.export.ExportInvoice;
import com.tradecloud.domain.item.LineItem;
import com.tradecloud.domain.model.ordermanagement.Consignment;
import com.tradecloud.domain.model.ordermanagement.Order;
import com.tradecloud.domain.shipment.Shipment;

import java.util.Collections;
import java.util.List;

/**
 * @author jon
 */
public abstract class AbstractCostingVisitor implements CostingVisitor {

    @Override
    public void visit(LineItem lineItem) {
    }

    @Override
    public void visit(Order order) {
    }

    @Override
    public void visit(Consignment consignment) {
    }

    @Override
    public void visit(Shipment shipment) {
    }

    @Override
    public void visit(CostedLineItem costedLineItem) {
    }

    @Override
    public void visit(CostedOrder costedOrder) {
    }

    @Override
    public void visit(CostedConsignment costedConsignment) {
    }

    @Override
    public void visit(BaseCommercialInvoice commercialInvoice) {
    }

    @Override
    public void visit(BaseServiceProviderInvoice serviceProviderInvoice) {
    }

    @Override
    public void visit(DeclarationInvoice declarationInvoice) {
    }

    @Override
    public void visit(CommercialCreditNote commercialCreditNote) {
    }

    @Override
    public void visit(ServiceProviderCreditNote serviceProviderCreditNote) {
    }

    @Override
    public void visit(ActualShipment actualShipment) {
    }

    @Override
    public void visit(ActualConsignment actualConsignment) {
    }

    @Override
    public void visit(ActualOrder actualOrder) {
    }

    @Override
    public void visit(ActualLineItem actualLineItem) {
    }

    @Override
    public void visit(ExportInvoice exportInvoice) {

    }

    protected CostingCell findCostingCell(Actual actual, String costLine) {
        return actual.getCostLineCosting().getCachedCostLineCostingCell(costLine);
    }

    protected CostingCell findCostingCell(Costed costed, String costLine) {
        return costed.getCostLineCosting().getCachedCostLineCostingCell(costLine);
    }

    protected List<CostedLineItem> getAllCostedLineItems(CostedLineItem costedLineItem, CostableType costableType) {
        switch (costableType) {
            case CONSIGNMENT:
                return costedLineItem.getCostedOrder().getParent().getAllCostedLineItems();
            case ORDER:
                return costedLineItem.getCostedOrder().getCostedLineItems();
            case ORDER_LINE_ITEM:
                return Collections.singletonList(costedLineItem);
            default:
                break;
        }
        return Collections.EMPTY_LIST;
    }

    protected List<ActualLineItem> getAllActualLineItems(ActualLineItem actualLineItem, CostableType costableType) {

        switch (costableType) {
            case INVOICE:
                return actualLineItem.getCostsInvoice().getActualLineItems();
            case CONSIGNMENT:
                return (List<ActualLineItem>) actualLineItem.getActualOrder()
                        .getActualConsignment().getActualItems();
            case ORDER:
                return actualLineItem.getActualOrder().getActualLineItemList();
            case ORDER_LINE_ITEM:
                return Collections.singletonList(actualLineItem);
            case SHIPMENT:
                return actualLineItem.getActualOrder().getActualConsignment().getActualShipment().getActualLineItems();
            default:
                break;
        }
        return Collections.EMPTY_LIST;

    }

    protected List<? extends Costed> getAllItems(Costed item, CostableType costableType) {
        if (item.isActual()) {
            return getAllActualLineItems((ActualLineItem) item, costableType);
        } else {
            return getAllCostedLineItems((CostedLineItem) item, costableType);
        }
    }

}