Right here, if you have a canDrainMethod()  it should be  called here at the very least. Though You again need to choose, doFill or canFill() Both is just begging for trouble