private Getter showOptionsDialog()

in web/jscs/src/main/java/com/intellij/lang/javascript/linter/jscs/importer/JscsSchemeImporter.java [70:156]


    private Getter<CodeStyleScheme> showOptionsDialog(Project project,
                                                      final CodeStyleScheme currentScheme,
                                                      final SchemeFactory<CodeStyleScheme> schemeFactory) {
      final ComponentWithBrowseButton<ComboBox> presets = JscsView.createPresetWithHelpButton();

      final JEditorPane
        presetHintComp = JSLinterUtil.createHtmlViewer(JscsBundle.message("jscs.configurable.preset.hint.text"), UIUtil.getTitledBorderFont());
      final JPanel presetHint = SwingHelper.wrapWithHorizontalStretch(presetHintComp);

      final FormBuilder formBuilder = FormBuilder.createFormBuilder();
      final JBTextField schemeName = new JBTextField("JSCS");
      final JBRadioButton useCurrent;
      if (currentScheme.isDefault()) {
        useCurrent = null;
        formBuilder.addLabeledComponent(JscsBundle.message("label.create.new.scheme"), schemeName);
      } else {
        useCurrent = new JBRadioButton(JscsBundle.message("radio.update.current.scheme", currentScheme.getName()));
        final JBRadioButton createNew = new JBRadioButton(JscsBundle.message("radio.create.new.scheme"));
        final ButtonGroup group = new ButtonGroup();
        group.add(useCurrent);
        group.add(createNew);
        createNew.setSelected(true);
        formBuilder.addComponent(useCurrent)
          .addLabeledComponent(createNew, schemeName)
          .setFormLeftIndent(0)
          .addVerticalGap(5);
      }
      final JscsConfiguration jscsConfiguration = JscsConfiguration.getInstance(project);
      final NodeJsInterpreterRef nodePath = jscsConfiguration.getExtendedState().getState().getInterpreterRef();
      final NodeModuleConfigurationView configurationView = new NodeModuleConfigurationView(project, "jscs", nodePath);
      final NodeJsInterpreterField nodeField = configurationView.getNodeInterpreterField();
      final NodePackageField packageField = configurationView.getPackageField();
      final NodePackage jscs = NodePackage.findDefaultPackage(project, "jscs", nodePath.resolve(project));
      if (jscs != null) packageField.setSelected(jscs);
      configurationView.setPreferredWidthToComponents();

      formBuilder.addLabeledComponent(NodeJsInterpreterField.getLabelTextForComponent(), nodeField)
        .addLabeledComponent(JscsBundle.message("jscs.configurable.label.package.path"), packageField);

      formBuilder.addLabeledComponent(JscsBundle.message("jscs.configurable.label.preset.label.text"), presets)
        .addLabeledComponent("", presetHint);

      final DialogBuilder builder = new DialogBuilder();
      builder.setTitle(JscsBundle.message("dialog.title.import.from.jscs.config"));
      builder.setNorthPanel(formBuilder.getPanel());
      builder.setDimensionServiceKey(JscsSchemeImportWorker.class.getName());
      builder.setPreferredFocusComponent(schemeName);

      final Alarm alarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
      try {
        final Runnable validation = new Runnable() {
          @Override
          public void run() {
            final DialogWrapper dialogWrapper = builder.getDialogWrapper();
            try {
              if (dialogWrapper == null) return;
              if (presets.getChildComponent().getSelectedItem() != null &&
                  (StringUtil.isEmptyOrSpaces(packageField.getSelected().getSystemDependentPath()))) {
                builder.okActionEnabled(false);
                builder.setErrorText(JscsBundle.message("dialog.message.jscs.package.field.should.be.filled.if.preset.selected"), presets);
              } else {
                builder.okActionEnabled(true);
                builder.setErrorText(null);
              }
            } finally {
              if (!alarm.isDisposed()) {
                alarm.addRequest(this, 200, true);
              }
            }
          }
        };
        alarm.addRequest(validation, 200, ModalityState.any());
        if (!builder.showAndGet()) return null;
      } finally {
        alarm.cancelAllRequests();
        Disposer.dispose(alarm);
      }

      myPreset = (JscsPreset)presets.getChildComponent().getSelectedItem();
      myPackagePath = packageField.getSelected().getSystemDependentPath();

      return () -> {
        if (useCurrent != null && useCurrent.isSelected()) return currentScheme;
        final String text = schemeName.getText();
        return schemeFactory.createNewScheme(StringUtil.isEmptyOrSpaces(text) ? null : text);
      };
    }