docs: JTree getTreeAlert() {
  		if (treeAlert == null) {
  			treeAlert = new JTree() {
  
  				private static final long serialVersionUID = 1L;
  
  				@Override
  				public Point getPopupLocation(final MouseEvent event) {
  					if (event != null) {
  						// Select item on right click
  						TreePath tp = treeAlert.getPathForLocation(event.getX(), event.getY());
  						if (tp != null) {
  							// Only select a new item if the current item is not
  							// already selected - this is to allow multiple items
  							// to be selected
  							if (!treeAlert.getSelectionModel().isPathSelected(tp)) {
  								treeAlert.getSelectionModel().setSelectionPath(tp);
  							}
  						}
  					}
  					return super.getPopupLocation(event);
  				}
  			};
  			treeAlert.setName(ALERT_TREE_PANEL_NAME);
  			treeAlert.setShowsRootHandles(true);
  			treeAlert.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
  			treeAlert.setComponentPopupMenu(new JPopupMenu() {
  
  				private static final long serialVersionUID = 1L;
  
  				@Override
  				public void show(Component invoker, int x, int y) {
  					final int countSelectedNodes = treeAlert.getSelectionCount();
  					final ArrayList<HistoryReference> uniqueHistoryReferences = new ArrayList<>(countSelectedNodes);
  					if (countSelectedNodes > 0) {
  						SortedSet<Integer> historyReferenceIdsAdded = new TreeSet<>();
  						for (TreePath path : treeAlert.getSelectionPaths()) {
  							final AlertNode node = (AlertNode) path.getLastPathComponent();
  							final Object userObject = node.getUserObject();
  							if (userObject instanceof Alert) {
  								HistoryReference historyReference = ((Alert) userObject).getHistoryRef();
  								if (historyReference != null && !historyReferenceIdsAdded
  										.contains(historyReference.getHistoryId())) {
  									historyReferenceIdsAdded.add(historyReference.getHistoryId());
  									uniqueHistoryReferences.add(historyReference);
  								}
  							}
  						}
  						uniqueHistoryReferences.trimToSize();
  					}
  					SelectableHistoryReferencesContainer messageContainer = new DefaultSelectableHistoryReferencesContainer(
  							treeAlert.getName(),
  							treeAlert,
  							Collections.<HistoryReference> emptyList(),
  							uniqueHistoryReferences);
  					view.getPopupMenu().show(messageContainer, x, y);
  				}
  			});
  
  			treeAlert.addMouseListener(new java.awt.event.MouseAdapter() { 
  
  				@Override
  				public void mouseClicked(java.awt.event.MouseEvent e) {
  				    if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() > 1) {
  				    	// Its a double click - edit the alert
  					    editSelectedAlert();
  				    }
  				}
  			});
  			treeAlert.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { 
  				@Override
  				public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
  				    DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeAlert.getLastSelectedPathComponent();
  				    if (node != null && node.getUserObject() != null) {
  				        Object obj = node.getUserObject();
  				        if (obj instanceof Alert) {
  				            Alert alert = (Alert) obj;
  						    setMessage(alert.getMessage(), alert.getEvidence());
  						    treeAlert.requestFocusInWindow();
  						    getAlertViewPanel().displayAlert(alert);
  				        } else {
  						    getAlertViewPanel().clearAlert();
  				        }
  				    } else {
  					    getAlertViewPanel().clearAlert();
  				    }
  				}
  			});
  			treeAlert.setCellRenderer(new AlertTreeCellRenderer());
  			treeAlert.setExpandsSelectedPaths(true);
  			
  			String deleteAlertKey = "zap.delete.alert";
  			treeAlert.getInputMap().put(view.getDefaultDeleteKeyStroke(), deleteAlertKey);
  			treeAlert.getActionMap().put(deleteAlertKey, new AbstractAction() {
  
  				private static final long serialVersionUID = 1L;
  
  				@Override
  				public void actionPerformed(ActionEvent e) {
  					Set<Alert> alerts = getSelectedAlerts();
  					if (alerts.size() > 1 && View.getSingleton().showConfirmDialog(
  							Constant.messages.getString("scanner.delete.confirm")) != JOptionPane.OK_OPTION) {
  						return;
  					}
  
  					for (Alert alert : alerts) {
  						extension.deleteAlert(alert);
  					}
  				}
  			});
  		}
  		return treeAlert;
  	}