} else if (list.contains( nextFocusOwner )) { return null; } else { list.add( nextFocusOwner ); }
	public IFigure getPreviousFocusableFigureInSameOrder(IFigure root, IFigure focusOwner) {				IFigure nextFocusOwner = focusOwner;		if (focusOwner == null) {			if (root.getChildren().size() != 0) {				nextFocusOwner = findDeepestRightmostChildOf(root);				if (isFocusEligible(nextFocusOwner))					return nextFocusOwner;			} else				return null;		}				boolean found = false;	 	while (!found) {	 		IFigure parent = nextFocusOwner.getParent();						/* 			 * At root, return null to indicate traversal			 * is complete.			 */			if (parent == null)				return null;						List siblings = parent.getChildren();			int siblingPos = siblings.indexOf(nextFocusOwner);						/*					 * Figure traversal is implemented using the post-order right to left 			 * tree traversal algorithm.			 * 			 * Find the rightmost child.			 * If this child is focusable, return it			 * If not focusable, traverse to its sibling and repeat.			 * If there is no sibling, traverse its parent.			 */			if (siblingPos != 0) {				nextFocusOwner = ((IFigure)(siblings.get(siblingPos - 1)));				if (isFocusEligible(nextFocusOwner))					found = true;							} else {								nextFocusOwner = ((IFigure)(siblings.get(siblings.size() - 1)));				if (isFocusEligible(nextFocusOwner))					found = true;							}		}		return nextFocusOwner;	}