public FileSetConfigurationTab()

in struts2/src/main/java/com/intellij/struts2/facet/ui/FileSetConfigurationTab.java [112:235]


  public FileSetConfigurationTab(@NotNull final StrutsFacetConfiguration strutsFacetConfiguration,
                                 @NotNull final FacetEditorContext facetEditorContext) {
    originalConfiguration = strutsFacetConfiguration;
    module = facetEditorContext.getModule();
    myConfigsSearcher = new StrutsConfigsSearcher(module);

    // init tree
    final SimpleTreeStructure structure = new SimpleTreeStructure() {
      @NotNull
      @Override
      public Object getRootElement() {
        return myRootNode;
      }
    };

    myTree = new SimpleTree();
    myTree.setRootVisible(false);
    myTree.setShowsRootHandles(true); // show expand/collapse handles
    myTree.getEmptyText().setText(StrutsBundle.message("facet.fileset.no.filesets.defined"), SimpleTextAttributes.ERROR_ATTRIBUTES);
    myTreeExpander = new DefaultTreeExpander(myTree);

    myModel = new StructureTreeModel<>(structure, this);
    myTree.setModel(new AsyncTreeModel(myModel, this));

    final DumbService dumbService = DumbService.getInstance(facetEditorContext.getProject());
    myTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
      @Override
      public void valueChanged(final TreeSelectionEvent e) {
        final StrutsFileSet fileSet = getCurrentFileSet();
        myEditButton.setEnabled(fileSet != null && !dumbService.isDumb());
        myRemoveButton.setEnabled(fileSet != null);
      }
    });

    final CommonActionsManager actionManager = CommonActionsManager.getInstance();
    myTreePanel.add(
      ToolbarDecorator.createDecorator(myTree)
        .setAddAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            final StrutsFileSet fileSet =
              new StrutsFileSet(StrutsFileSet.getUniqueId(myBuffer),
                                StrutsFileSet.getUniqueName(StrutsBundle.message("facet.fileset.my.fileset"), myBuffer),
                                originalConfiguration) {
                @Override
                public boolean isNew() {
                  return true;
                }
              };

            final FileSetEditor editor = new FileSetEditor(myPanel,
                                                           fileSet,
                                                           facetEditorContext,
                                                           myConfigsSearcher);
            editor.show();
            if (editor.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
              final StrutsFileSet editedFileSet = editor.getEditedFileSet();
              Disposer.register(strutsFacetConfiguration, editedFileSet);
              myBuffer.add(editedFileSet);
              myModified = true;
              myModel.invalidateAsync().thenRun(() -> selectFileSet(editedFileSet));
            }
            IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(myTree, true));
          }
        })
        .setRemoveAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            remove();
            myModified = true;
            myModel.invalidateAsync();
            IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(myTree, true));
          }
        })
        .setEditAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            final StrutsFileSet fileSet = getCurrentFileSet();
            if (fileSet != null) {
              final FileSetEditor editor = new FileSetEditor(myPanel,
                                                             fileSet,
                                                             facetEditorContext,
                                                             myConfigsSearcher);
              editor.show();
              if (editor.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
                myModified = true;
                myBuffer.remove(fileSet);
                final StrutsFileSet edited = editor.getEditedFileSet();
                Disposer.register(strutsFacetConfiguration, edited);
                myBuffer.add(edited);
                edited.setAutodetected(false);
                myModel.invalidateAsync();
                selectFileSet(edited);
              }
              IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(myTree, true));
            }
          }
        })
        .addExtraAction(AnActionButton.fromAction(actionManager.createExpandAllAction(myTreeExpander, myTree)))
        .addExtraAction(AnActionButton.fromAction(actionManager.createCollapseAllAction(myTreeExpander, myTree)))
        .addExtraAction(new AnActionButton(StrutsBundle.messagePointer("action.AnActionButton.text.open.struts.2.plugin.documentation"),
                                           AllIcons.Actions.Help) {
          @Override
          public void actionPerformed(@NotNull AnActionEvent e) {
            BrowserUtil.browse("https://confluence.jetbrains.com/pages/viewpage.action?pageId=35367");
          }

          @Override
          public @NotNull ActionUpdateThread getActionUpdateThread() {
            return ActionUpdateThread.EDT;
          }
        })

        .disableUpDownActions()
        .createPanel());

    myEditButton = ToolbarDecorator.findEditButton(myTreePanel);
    myRemoveButton = ToolbarDecorator.findRemoveButton(myTreePanel);

    AnActionButton addButton = ToolbarDecorator.findAddButton(myTreePanel);
    assert addButton != null;
    dumbService.makeDumbAware(addButton.getContextComponent(), this);
    dumbService.makeDumbAware(myEditButton.getContextComponent(), this);
  }