Description :
There are many anti patterns in java, one of them is calculations and conversions to the weights.
Use Case :
Before instructing to Che (Container Handling Equipment, like STRADDLE, RMG, RTG, Quay-Crane),
We need to check, whether this Che is lift capacity is greater than the container
or containers(In case of twins) weight.
CheCapacityCheck.java
import javax.measure.quantity.Mass;
import javax.measure.unit.Unit;
import java.util.Arrays;
import java.util.List;
import org.jscience.physics.amount.Amount;
import static javax.measure.unit.SI.HECTO;
import static javax.measure.unit.SI.KILOGRAM;
public class CheCapacityCheck {
public static void main(String[] args) {
final Amount cheCapacity = Amount.valueOf(cheCapacityInLong, _unit);
//Create two containers with weights
Container c1 = new Container("C1", new Long(500));
Container c2 = new Container("C2", new Long(400));
//Caluclate total containers weights.
Amount totalWeight = getTotalContainerWeight(Arrays.asList(c1, c2));
System.out.println("Containers Total weight is: " + totalWeight );
isCheIsLiftCapable( cheCapacity, totalWeight );
//Change Second container wight
c2.setWeight(new Long(600));
totalWeight = getTotalContainerWeight(Arrays.asList(c1, c2));
System.out.println("Containers Total weight is: " + totalWeight );
isCheIsLiftCapable( cheCapacity, totalWeight );
}
static void isCheIsLiftCapable( final Amount inCheCapacity, final Amount inTotalWeight){
if( inTotalWeight.isGreaterThan(inCheCapacity) ){
System.out.println("*******Che is not Lift Capable *************");
}else{
System.out.println("*******Che is Lift Capable *************");
}
}
static Amount getTotalContainerWeight(final List inContainerList){
Amount totalWeight = Amount.valueOf(0, _unit);
for( Container c : inContainerList){
final Amount unitWeight = Amount.valueOf( c.getWeight(), _unit);
totalWeight = totalWeight.plus(unitWeight);
}
return totalWeight;
}
public static class Container {
private String containerId;
private Long weight;
public Container(final String inContainerId, final Long inweight) {
containerId = inContainerId;
weight = inweight;
}
public String getContainerId() {
return containerId;
}
public Long getWeight() {
return weight;
}
public void setWeight( final Long inweight ) {
weight = inweight;
}
}
private static final Long cheCapacityInLong = new Long(1000);
private static final Unit _unit = HECTO(KILOGRAM);
}
Out Put:
Containers Total weight is: 900 kg*100
*******Che is Lift Capable *************
Containers Total weight is: 1100 kg*100
*******Che is not Lift Capable *************