@NotNull
  @Override
  public JComponent createComponent() {
    ThreadingAssertions.assertEventDispatchThread();
    //todo multi-editing, separate project/ide combos _if_ needed by specific configurable (SQL, no Web)
    myPanel = new JPanel(new BorderLayout());
    myModel = new MyModel<>(param(TARGET_TITLE), param(MAPPING_TITLE));
    myTable = new JBTable(myModel) {
      @SuppressWarnings("unchecked")
      @Override
      public String getToolTipText(@NotNull MouseEvent event) {
        Point point = event.getPoint();
        int row = rowAtPoint(point);
        int col = columnAtPoint(point);
        if (row != -1 && col == 1) {
          return getToolTipFor((T)getValueAt(convertRowIndexToModel(row), col));
        }
        return super.getToolTipText(event);
      }
    };
    setupPerFileTable();
    JPanel tablePanel = ToolbarDecorator.createDecorator(myTable)
      .disableUpAction()
      .disableDownAction()
      .setAddAction(button -> doAddAction())
      .setRemoveAction(button -> doRemoveAction())
      .setEditAction(button -> doEditAction())
      .setEditActionUpdater(e -> myTable.getSelectedRows().length > 0)
      .createPanel();
    myTable.getEmptyText().setText(param(EMPTY_TEXT).replace(
      "$addShortcut", KeymapUtil.getFirstKeyboardShortcutText(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.ADD))));
    JBLabel label = new JBLabel(param(DESCRIPTION));
    label.setBorder(BorderFactory.createEmptyBorder(TITLED_BORDER_TOP_INSET, TITLED_BORDER_INDENT, TITLED_BORDER_BOTTOM_INSET, 0));
    label.setComponentStyle(UIUtil.ComponentStyle.SMALL);

    JComponent north = createDefaultMappingComponent();
    if (north != null) {
      myPanel.add(north, BorderLayout.NORTH);
    }
    myPanel.add(label, BorderLayout.SOUTH);
    myPanel.add(tablePanel, BorderLayout.CENTER);

    return myPanel;
  }
@NotNull
  @Override
  public JComponent createComponent()