code: private void handleOpenItemRequest(final Request request) {
  
  		// Check for tree item id
  		String param = request.getParameter(ITEM_REQUEST_KEY);
  		if (param == null) {
  			throw new SystemException("No tree item id provided for open request.");
  		}
  
  		// Remove the prefix to get the item id
  		int offset = getItemIdPrefix().length();
  		if (param.length() <= offset) {
  			throw new SystemException("Tree item id [" + param + "] does not have the correct prefix value.");
  		}
  		String itemId = param.substring(offset);
  
  		// Check is a valid item id
  		if (!isValidTreeItem(itemId)) {
  			throw new SystemException("Tree item id [" + itemId + "] is not valid.");
  		}
  
  		// Check expandable
  		TreeItemIdNode custom = getCustomTree();
  		if (custom == null) {
  			List<Integer> rowIndex = getExpandedItemIdIndexMap().get(itemId);
  			if (!getTreeModel().isExpandable(rowIndex)) {
  				throw new SystemException("Tree item id [" + itemId + "] is not expandable.");
  			}
  		} else {
  			TreeItemIdNode node = getCustomIdNodeMap().get(itemId);
  			if (!node.hasChildren()) {
  				throw new SystemException("Tree item id [" + itemId + "] is not expandable in custom tree.");
  			}
  		}
  
  		// Save the open id
  		setOpenRequestItemId(itemId);
  
  		// Run the open action (if set)
  		final Action action = getOpenAction();
  		if (action != null) {
  			final ActionEvent event = new ActionEvent(this, "openItem");
  			Runnable later = new Runnable() {
  				@Override
  				public void run() {
  					action.execute(event);
  				}
  			};
  			invokeLater(later);
  		}
  
  	}
docs: Handles a request containing an open request.
  
  @param request the request containing row open request.