private JPanel getOfficeTechnicalElements()

in languagetool-gui-commons/src/main/java/org/languagetool/gui/ConfigurationDialog.java [741:1018]


  private JPanel getOfficeTechnicalElements() {
    // technical settings
    JPanel portPanel = new JPanel();
    portPanel.setLayout(new GridBagLayout());
    GridBagConstraints cons = new GridBagConstraints();
    cons.insets = new Insets(0, SHIFT1, 0, 0);
    cons.gridx = 0;
    cons.gridy = 0;
    cons.anchor = GridBagConstraints.WEST;
    cons.fill = GridBagConstraints.NONE;
    cons.weightx = 0.0f;
    JCheckBox saveCacheBox = new JCheckBox(Tools.getLabel(messages.getString("guiSaveCacheToFile")));
    JTextField otherServerNameField = new JTextField(config.getServerUrl() ==  null ? "" : config.getServerUrl(), 25);
    otherServerNameField.setMinimumSize(new Dimension(100, 25));
    otherServerNameField.getDocument().addDocumentListener(new DocumentListener() {
      @Override
      public void insertUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void removeUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void changedUpdate(DocumentEvent e) {
        String serverName = otherServerNameField.getText();
        serverName = serverName.trim();
        if(serverName.isEmpty()) {
          serverName = null;
        }
        if (config.isValidServerUrl(serverName)) {
          otherServerNameField.setForeground(Color.BLACK);
          config.setOtherServerUrl(serverName);
        } else {
          otherServerNameField.setForeground(Color.RED);
        }
      }
    });

    JCheckBox useServerBox = new JCheckBox(Tools.getLabel(messages.getString("guiUseServer")) + " ");
    useServerBox.setSelected(config.useOtherServer());
    useServerBox.addItemListener(e -> {
      int select = JOptionPane.OK_OPTION;
      boolean selected = useServerBox.isSelected();
      if(selected && firstSelection) {
        select = showRemoteServerHint(useServerBox, true);
        firstSelection = false;
      } else {
        firstSelection = true;
      }
      if(select == JOptionPane.OK_OPTION) {
        useServerBox.setSelected(selected);
        config.setUseOtherServer(useServerBox.isSelected());
        otherServerNameField.setEnabled(useServerBox.isSelected());
      } else {
        useServerBox.setSelected(false);
        firstSelection = true;
      }
    });

    JLabel usernameLabel = new JLabel(Tools.getLabel(messages.getString("guiPremiumUsername")));

    JTextField usernameField = new JTextField(config.getRemoteUsername() ==  null ? "" : config.getRemoteUsername(), 25);
    usernameField.setMinimumSize(new Dimension(100, 25));
    usernameField.getDocument().addDocumentListener(new DocumentListener() {
      @Override
      public void insertUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void removeUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void changedUpdate(DocumentEvent e) {
        String username = usernameField.getText();
        username = username.trim();
        if(username.isEmpty()) {
          username = null;
        }
        if (username != null) {
          config.setRemoteUsername(username);
        }
      }
    });

    JLabel apiKeyLabel = new JLabel(Tools.getLabel(messages.getString("guiPremiumApiKey")));

    JTextField apiKeyField = new JTextField(config.getRemoteApiKey() ==  null ? "" : config.getRemoteApiKey(), 25);
    apiKeyField.setMinimumSize(new Dimension(100, 25));
    apiKeyField.getDocument().addDocumentListener(new DocumentListener() {
      @Override
      public void insertUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void removeUpdate(DocumentEvent e) {
        changedUpdate(e);
      }
      @Override
      public void changedUpdate(DocumentEvent e) {
        String apiKey = apiKeyField.getText();
        apiKey = apiKey.trim();
        if(apiKey.isEmpty()) {
          apiKey = null;
        }
        if (apiKey != null) {
          config.setRemoteApiKey(apiKey);
        }
      }
    });

    JCheckBox isPremiumBox = new JCheckBox(Tools.getLabel(messages.getString("guiUsePremiumAccount")) + " ");
    isPremiumBox.setSelected(config.isPremium());
    isPremiumBox.addItemListener(e -> {
      boolean selected = isPremiumBox.isSelected();
      config.setPremium(selected);
      usernameLabel.setEnabled(selected);
      usernameField.setEnabled(selected);
      apiKeyLabel.setEnabled(selected);
      apiKeyField.setEnabled(selected);
    });
    
    JRadioButton[] typeOfCheckButtons = new JRadioButton[3];
    ButtonGroup typeOfCheckGroup = new ButtonGroup();
    typeOfCheckButtons[0] = new JRadioButton(Tools.getLabel(messages.getString("guiOneThread")));
    typeOfCheckButtons[0].addActionListener(e -> {
      otherServerNameField.setEnabled(false);
      useServerBox.setEnabled(false);
      usernameLabel.setEnabled(false);
      usernameField.setEnabled(false);
      apiKeyLabel.setEnabled(false);
      apiKeyField.setEnabled(false);
      isPremiumBox.setEnabled(false);
      config.setMultiThreadLO(false);
      config.setRemoteCheck(false);
    });
    typeOfCheckButtons[1] = new JRadioButton(Tools.getLabel(messages.getString("guiIsMultiThread")));
    typeOfCheckButtons[1].addActionListener(e -> {
      otherServerNameField.setEnabled(false);
      useServerBox.setEnabled(false);
      usernameLabel.setEnabled(false);
      usernameField.setEnabled(false);
      apiKeyLabel.setEnabled(false);
      apiKeyField.setEnabled(false);
      isPremiumBox.setEnabled(false);
      config.setMultiThreadLO(true);
      config.setRemoteCheck(false);
    });
    typeOfCheckButtons[2] = new JRadioButton(Tools.getLabel(messages.getString("guiUseRemoteServer")));
    typeOfCheckButtons[2].addActionListener(e -> {
      int select = JOptionPane.OK_OPTION;
      boolean selected = typeOfCheckButtons[2].isSelected();
      if(selected && firstSelection) {
        select = showRemoteServerHint(typeOfCheckButtons[2], false);
        firstSelection = false;
      } else {
        firstSelection = true;
      }
      if(select == JOptionPane.OK_OPTION) {
//        typeOfCheckButtons[2].setSelected(selected);
        otherServerNameField.setEnabled(useServerBox.isSelected());
        useServerBox.setEnabled(true);
        usernameLabel.setEnabled(isPremiumBox.isSelected());
        usernameField.setEnabled(isPremiumBox.isSelected());
        apiKeyLabel.setEnabled(isPremiumBox.isSelected());
        apiKeyField.setEnabled(isPremiumBox.isSelected());
        isPremiumBox.setEnabled(true);
        config.setMultiThreadLO(false);
        config.setRemoteCheck(true);
      } else {
        if (config.isMultiThread()) {
          typeOfCheckButtons[1].setSelected(true);
        } else {
          typeOfCheckButtons[0].setSelected(true);
        }
        firstSelection = true;
      }
    });
    for (int i = 0; i < 3; i++) {
      typeOfCheckGroup.add(typeOfCheckButtons[i]);
    }
    if (config.doRemoteCheck()) {
      typeOfCheckButtons[2].setSelected(true);
      otherServerNameField.setEnabled(useServerBox.isSelected());
      useServerBox.setEnabled(true);
      usernameLabel.setEnabled(isPremiumBox.isSelected());
      usernameField.setEnabled(isPremiumBox.isSelected());
      apiKeyLabel.setEnabled(isPremiumBox.isSelected());
      apiKeyField.setEnabled(isPremiumBox.isSelected());
      isPremiumBox.setEnabled(true);
      config.setMultiThreadLO(false);
      config.setRemoteCheck(true);
    } else if (config.isMultiThread()) {
      typeOfCheckButtons[1].setSelected(true);
      otherServerNameField.setEnabled(false);
      useServerBox.setEnabled(false);
      usernameLabel.setEnabled(false);
      usernameField.setEnabled(false);
      apiKeyLabel.setEnabled(false);
      apiKeyField.setEnabled(false);
      isPremiumBox.setEnabled(false);
      config.setMultiThreadLO(true);
      config.setRemoteCheck(false);
    } else {
      typeOfCheckButtons[0].setSelected(true);
      otherServerNameField.setEnabled(false);
      useServerBox.setEnabled(false);
      usernameLabel.setEnabled(false);
      usernameField.setEnabled(false);
      apiKeyLabel.setEnabled(false);
      apiKeyField.setEnabled(false);
      isPremiumBox.setEnabled(false);
      config.setMultiThreadLO(false);
      config.setRemoteCheck(false);
    }
    cons.gridy++;
    cons.insets = new Insets(0, SHIFT2, 0, 0);
    for (int i = 0; i < 3; i++) {
      portPanel.add(typeOfCheckButtons[i], cons);
      if (i < 3) cons.gridy++;
    }

    JPanel serverPanel = new JPanel();
    serverPanel.setLayout(new GridBagLayout());
    GridBagConstraints cons1 = new GridBagConstraints();
    cons1.insets = new Insets(0, SHIFT2, 0, 0);
    cons1.gridx = 0;
    cons1.gridy = 0;
    cons1.anchor = GridBagConstraints.WEST;
    cons1.fill = GridBagConstraints.NONE;
    cons1.weightx = 0.0f;
    serverPanel.add(useServerBox, cons1);
    cons1.gridx++;
    serverPanel.add(otherServerNameField, cons1);
    JLabel serverExampleLabel = new JLabel(" " + Tools.getLabel(messages.getString("guiUseServerExample")));
    serverExampleLabel.setEnabled(false);
    cons1.gridy++;
    serverPanel.add(serverExampleLabel, cons1);
    cons.gridx = 0;
    cons.gridy++;
    portPanel.add(serverPanel, cons);

    JPanel premiumPanel = new JPanel();
    premiumPanel.setLayout(new GridBagLayout());
    cons1 = new GridBagConstraints();
    cons1.insets = new Insets(0, SHIFT2, 0, 0);
    cons1.gridx = 0;
    cons1.gridy = 0;
    cons1.anchor = GridBagConstraints.WEST;
    cons1.fill = GridBagConstraints.NONE;
    cons1.weightx = 0.0f;
    premiumPanel.add(isPremiumBox, cons1);
    cons1.insets = new Insets(0, SHIFT3, 0, 0);
    cons1.gridy++;
    premiumPanel.add(usernameLabel, cons1);
    cons1.gridy++;
    premiumPanel.add(usernameField, cons1);
    cons1.gridy++;
    premiumPanel.add(apiKeyLabel, cons1);
    cons1.gridy++;
    premiumPanel.add(apiKeyField, cons1);
    cons.gridx = 0;
    cons.gridy++;
    portPanel.add(premiumPanel, cons);
    saveCacheBox.setSelected(config.saveLoCache());
    saveCacheBox.addItemListener(e1 -> {
      config.setSaveLoCache(saveCacheBox.isSelected());
    });
    cons.insets = new Insets(0, SHIFT2, 0, 0);
    cons.gridx = 0;
    cons.gridy++;
    portPanel.add(saveCacheBox, cons);

    cons.gridy++;
    portPanel.add(getNgramPanel(), cons);
    return portPanel;
  }