class DefaultDataTablesEventListenerBuilder implements DataTablesEventListenerBuilder {

    @Override
    public DataTablesEventListener getDataTablesEventListener() {<FILL_FUNCTION_BODY>}
}

        if (SwingUtilities.isEventDispatchThread()) {
            return (DataTableTopComponent) WindowManager.getDefault().findTopComponent("DataTableTopComponent");
        } else {
            final List<DataTableTopComponent> listenerHolder = new ArrayList<>();
            try {
                //We have to do this in AWT thread...
                //There is no support for Futures as far as I know
                SwingUtilities.invokeAndWait(new Runnable() {
                    @Override
                    public void run() {
                        listenerHolder.add((DataTableTopComponent) WindowManager.getDefault()
                            .findTopComponent("DataTableTopComponent"));
                    }
                });
            } catch (InterruptedException ex) {
                Logger.getLogger("").log(Level.SEVERE, null, ex);
            } catch (InvocationTargetException ex) {
                Logger.getLogger("").log(Level.SEVERE, null, ex);
            }

            return listenerHolder.get(0);
        }
    
<no_super_class>