* Cache a list of eligible drop controllers, sorted by relative DOM positions
    * of their respective drop targets. Called at the beginning of each drag operation,
    * or whenever drop target eligibility has changed while dragging.
    *
    * @param boundaryPanel boundary area for drop target eligibility considerations
    * @param context the current drag context
    """
    def resetCache(self, boundaryPanel, context):
        ArrayList list = ArrayList()
        
        if context.draggable is not None:
            WidgetArea boundaryArea = WidgetArea(boundaryPanel, None)
            for Iterator iterator = dropControllerList.iterator(); iterator.hasNext();:
                DropController dropController = (DropController) iterator.next()
                Candidate candidate = Candidate(dropController)
                if DOMUtil.isOrContains(context.draggable.getElement(),
                candidate.getDropTarget().getElement())) {
                    continue
                
                if candidate.getTargetArea().intersects(boundaryArea):
                    list.add(candidate)
                
            
        
        
        sortedCandidates = (Candidate[]) list.toArray(Candidate[list.size()])
        Arrays.sort(sortedCandidates)