private JPanel getProfilePanel()

in languagetool-gui-commons/src/main/java/org/languagetool/gui/ConfigurationDialog.java [1270:1487]


  private JPanel getProfilePanel(List<Rule> rules) {
    profileChanged = true;
    JPanel profilePanel = new JPanel();
    profilePanel.setLayout(new GridBagLayout());
    GridBagConstraints cons = new GridBagConstraints();
    cons.insets = new Insets(4, 4, 0, 8);
    cons.gridx = 0;
    cons.gridy = 0;
    cons.weightx = 1.0f;
    cons.anchor = GridBagConstraints.WEST;
    List<String> profiles = new ArrayList<>();
    String defaultOptions = messages.getString("guiDefaultOptions");
    String userOptions = messages.getString("guiUserProfile");
    profiles.addAll(config.getDefinedProfiles());
    profiles.sort(null);
    profiles.add(0, userOptions);
    String currentProfile = config.getCurrentProfile();
    JComboBox<String> profileBox = new JComboBox<>(profiles.toArray(new String[0]));
    if(currentProfile == null || currentProfile.isEmpty()) {
      profileBox.setSelectedItem(userOptions);
    } else {
      profileBox.setSelectedItem(currentProfile);
    }
    profileBox.addItemListener(e -> {
      if (e.getStateChange() == ItemEvent.SELECTED) {
        if(profileChanged) {
          try {
            //  The configuration has to be saved first to save previous changes
            config.saveConfiguration(null);
            List<String> saveProfiles = new ArrayList<>();
            saveProfiles.addAll(config.getDefinedProfiles());
            if(e.getItem().equals(userOptions)) {
              config.initOptions();
              config.loadConfiguration("");
              config.setCurrentProfile(null);
            } else {
              config.initOptions();
              config.loadConfiguration((String) e.getItem());
              config.setCurrentProfile((String) e.getItem());
            }
            config.addProfiles(saveProfiles);
            restartShow = true;
            dialog.setVisible(false);
          } catch (IOException e1) {
          }
        } else {
          profileChanged = true;
        }
      }
    });
      
    profilePanel.add(new JLabel(addColonToMessageString("guiCurrentProfile")), cons);
    cons.insets = new Insets(6, 16, 0, 8);
    cons.gridy++;
    profilePanel.add(profileBox, cons);
    
    JButton renameButton = new JButton(messages.getString("guiRenameProfile") + "...");
    renameButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions) 
        && !profileBox.getSelectedItem().equals(userOptions));
    renameButton.addActionListener(e -> {
      boolean noName = true;
      String profileName = (String) profileBox.getSelectedItem();
      while (noName) {
        profileName = JOptionPane.showInputDialog(dialog, messages.getString("guiRenameProfile") + ":", profileName);
        if (profileName == null || profileName.equals("")) {
          break;
        }
        profileName = profileName.replaceAll("[ \t=]", "_");
        noName = false;
        while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
          profileName += "_new";
          noName = true;
        }
      }
      if (profileName != null && !profileName.equals("")) {
        config.removeProfile(config.getCurrentProfile());
        config.addProfile(profileName);
        config.setCurrentProfile(profileName);
        restartShow = true;
        dialog.setVisible(false);
      }
    });
    cons.gridy++;
    profilePanel.add(renameButton, cons);
    
    JButton exportButton = new JButton(messages.getString("guiExportProfile") + "...");
    exportButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions) 
        && !profileBox.getSelectedItem().equals(userOptions));
    exportButton.addActionListener(e -> {
      JFileChooser fileChooser = new JFileChooser();
      int choose = fileChooser.showSaveDialog(dialog);
      if (choose == JFileChooser.APPROVE_OPTION) {
        try {
          config.exportProfile((String) profileBox.getSelectedItem(), fileChooser.getSelectedFile());
        } catch (IOException e1) {
        }
      }
    });
    cons.gridx++;
    profilePanel.add(exportButton, cons);
    
    JButton defaultButton = new JButton(defaultOptions);
    defaultButton.addActionListener(e -> {
      List<String> saveProfiles = new ArrayList<>();
      saveProfiles.addAll(config.getDefinedProfiles());
      String saveCurrent = config.getCurrentProfile() == null ? null : config.getCurrentProfile();
      config.initOptions();
      config.addProfiles(saveProfiles);
      config.setCurrentProfile(saveCurrent);
      restartShow = true;
      dialog.setVisible(false);
    });
    cons.gridx = 0;
    cons.gridy++;
    profilePanel.add(defaultButton, cons);
    
    JButton deleteButton = new JButton(messages.getString("guiDeleteProfile"));
    deleteButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions) 
        && !profileBox.getSelectedItem().equals(userOptions));
    deleteButton.addActionListener(e -> {
      List<String> saveProfiles = new ArrayList<>();
      saveProfiles.addAll(config.getDefinedProfiles());
      config.initOptions();
      try {
        config.loadConfiguration("");
      } catch (IOException e1) {
      }
      config.setCurrentProfile(null);
      config.addProfiles(saveProfiles);
      config.removeProfile((String)profileBox.getSelectedItem());
      restartShow = true;
      dialog.setVisible(false);
    });
    cons.gridx++;
    profilePanel.add(deleteButton, cons);
    cons.insets = new Insets(16, 4, 0, 8);
    cons.gridx = 0;
    cons.gridy++;
    profilePanel.add(new JLabel(addColonToMessageString("guiAddNewProfile")), cons);
    cons.insets = new Insets(6, 16, 0, 8);
    
    
    JButton addButton = new JButton(messages.getString("guiAddProfile") + "...");
    addButton.addActionListener(e -> {
      boolean noName = true;
      String profileName = "";
      while (noName) {
        profileName = JOptionPane.showInputDialog(dialog, messages.getString("guiAddNewProfile"), profileName);
        if (profileName == null || profileName.equals("")) {
          break;
        }
        profileName = profileName.replaceAll("[ \t=]", "_");
        noName = false;
        while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
          profileName += "_new";
          noName = true;
        }
      }
      if (profileName != null && !profileName.equals("")) {
        //  The configuration has to be saved and reloaded first to save previous changes
        try {
          config.saveConfiguration(null);
          config.initOptions();
          config.loadConfiguration(config.getCurrentProfile());
        } catch (IOException e1) {
        }
        config.addProfile(profileName);
        config.setCurrentProfile(profileName);
        profileChanged = false;
        profileBox.addItem(profileName);
        profileBox.setSelectedItem(profileName);
        deleteButton.setEnabled(true);
        renameButton.setEnabled(true);
        exportButton.setEnabled(true);
      }
    });
    cons.gridx = 0;
    cons.gridy++;
    profilePanel.add(addButton, cons);
    
    JButton importButton = new JButton(messages.getString("guiImportProfile") + "...");
    importButton.addActionListener(e -> {
      JFileChooser fileChooser = new JFileChooser();
      int choose = fileChooser.showOpenDialog(dialog);
      if (choose == JFileChooser.APPROVE_OPTION) {
        try {
          //  The configuration has to be saved and reloaded first to save previous changes
          config.saveConfiguration(null);
          config.initOptions();
          config.loadConfiguration(config.getCurrentProfile());
          List<String> saveProfiles = new ArrayList<>();
          saveProfiles.addAll(config.getDefinedProfiles());
          Configuration saveConfig = config.copy(config);
          config.initOptions();
          config.importProfile(fileChooser.getSelectedFile());
          String profileName = config.getCurrentProfile();
          if (profileName != null) {
            config.addProfiles(saveProfiles);
            profileName = profileName.replaceAll("[ \t=]", "_");
            while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
              profileName += "_new";
            }
            config.setCurrentProfile(profileName);
            config.addProfile(profileName);
            config.saveConfiguration(null);
          } else {
            config.restoreState(saveConfig);;
          }
          restartShow = true;
          dialog.setVisible(false);
        } catch (IOException e1) {
        }
      }
    });
    cons.gridx++;
    profilePanel.add(importButton, cons);
    return profilePanel;
  }