class NodesPopupAdapter extends AbstractPopupAdapter<Node> {

    public NodesPopupAdapter(AbstractElementsDataTable<Node> elementsDataTable) {
        super(elementsDataTable);
    }

    @Override
    protected JPopupMenu createPopup(Point p) {<FILL_FUNCTION_BODY>}
}

        final List<Node> selectedElements = elementsDataTable.getElementsFromSelectedRows();
        final Node clickedElement = elementsDataTable.getElementFromRow(table.rowAtPoint(p));
        JPopupMenu contextMenu = new JPopupMenu();

        //First add edges manipulators items:
        DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault();
        Integer lastManipulatorType = null;
        for (NodesManipulator em : dlh.getNodesManipulators()) {
            em.setup(selectedElements.toArray(new Node[0]), clickedElement);
            if (lastManipulatorType == null) {
                lastManipulatorType = em.getType();
            }
            if (lastManipulatorType != em.getType()) {
                contextMenu.addSeparator();
            }
            lastManipulatorType = em.getType();
            if (em.isAvailable()) {
                contextMenu.add(PopupMenuUtils
                    .createMenuItemFromNodesManipulator(em, clickedElement, selectedElements.toArray(new Node[0])));
            }
        }

        //Add AttributeValues manipulators submenu:
        Column column = elementsDataTable.getColumnAtIndex(table.columnAtPoint(p));
        if (column != null) {
            contextMenu.add(PopupMenuUtils.createSubMenuFromRowColumn(clickedElement, column));
        }
        return contextMenu;
    
<methods>public void <init>(AbstractElementsDataTable<Node>) <variables>protected final non-sealed AbstractElementsDataTable<Node> elementsDataTable,protected final non-sealed JXTable table