CostingTreeNodeUtils.java
package com.tradecloud.domain.costing.utils;
import com.tradecloud.domain.costing.CostGroup;
import com.tradecloud.domain.costing.clean.Costed;
import com.tradecloud.domain.costing.clean.CostedLineItem;
import com.tradecloud.domain.costing.clean.CostedOrder;
import com.tradecloud.domain.document.invoice.ActualConsignment;
import com.tradecloud.domain.document.invoice.ActualLineItem;
import com.tradecloud.domain.document.invoice.ActualOrder;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@Component("costingTreeNodeUtils")
public class CostingTreeNodeUtils {
public static Logger log = Logger.getLogger(CostingTreeNodeUtils.class);
public static final int BASE_PADDING = 9;
public static String findFinalTableHeight(Costed rootParent, String costGroup, boolean isTotalsDistribution) {
String finalTableHeight;
int uiTreeHeight = CostingTreeNodeUtils.findUITreeHeight(rootParent, isTotalsDistribution, costGroup);
int maximumHeight = 450;
if (uiTreeHeight > maximumHeight) {
finalTableHeight = (String.valueOf(maximumHeight));
} else {
finalTableHeight = "no scroll height";
}
return finalTableHeight;
}
public static int findUITreeHeight(Costed rootParent, boolean isTotalsDistribution, String costGroup) {
int totalHeight = findHeightOfAllChildren(rootParent, isTotalsDistribution, costGroup);
return totalHeight;
}
private static boolean isRoot(Costed costed) {
return costed.getParent() == null;
}
private static int findHeightOfAllChildren(Costed parent, boolean isTotalsDistribution, String costGroup) {
return findHeightOfAllChildren(parent, isTotalsDistribution, 0, costGroup);
}
private static int findHeightOfAllChildren(Costed<? extends Costed, ? extends Costed> parent,
boolean isTotalsDistribution, int totalHeight,
String costGroup) {
for (Costed costed : parent.getCostedChildren()) {
totalHeight += findHeightOfAllChildren(costed, isTotalsDistribution, 0, costGroup);
}
if (isTotalsDistribution)
totalHeight += findRowHeightTotalsDistribution(parent) + BASE_PADDING;
else
totalHeight += findRowHeight(parent, costGroup) + BASE_PADDING;
return totalHeight;
}
public static int findRowHeight(Costed costed, String costGroup) {
boolean isRoot = isRoot(costed);
if (isRoot) {
return 80;
} else if (costed instanceof ActualConsignment) {
return 36;
} else if (costed instanceof ActualOrder || costed instanceof CostedOrder) {
return 70;
} else if (costed instanceof ActualLineItem || costed instanceof CostedLineItem) {
if (costGroup.equals(CostGroup.CUSTOMS.value())) {
return 60;
}
return 44;
}
return 80;
}
public static int findRowHeightTotalsDistribution(Costed costed) {
return 31;
}
}