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);
}