/**
     * Verifies if the file (which is currently selected) can be replaced with the document to be
     * saved.
     *
     * @return <code>JOptionPane.YES_OPTION</code> if the file is not Read-Only, not opened or can
     *     be replaced, <code>JOptionPane.NO_OPTION</code> if the document can't be saved because
     *     the selected file is Read-Only or the user said no to replace it, or <code>
     *     <code>JOptionPane.NO_OPTION</code></code> if the user does not want to replace the file
     *     and canceled the confirm dialog
     */
    private int canReplaceExistingFile() {
      File file = getSelectedFile();
      String applicationName =
          workbenchContext.getApplicationContext().getApplication().getShortProductName();

      // The file is actually opened
      if (isDocumentOpened(file)) {
        String message =
            resourceRepository()
                .getString("SAVE_AS_DIALOG_ALREADY_OPENED", applicationName, file, StringTools.CR);
        LabelArea label = new LabelArea(message);
        label.setPreferredWidth(800);

        JOptionPane.showMessageDialog(
            workbenchContext.getCurrentWindow(),
            label,
            applicationName,
            JOptionPane.WARNING_MESSAGE);

        return JOptionPane.NO_OPTION;
      }

      // The file exist but is marked as Read-Only, show we can't save it
      if (file.exists() && !file.canWrite()) {
        String message = resourceRepository().getString("SAVE_AS_DIALOG_CANT_SAVE", file);
        LabelArea label = new LabelArea(message);
        label.setPreferredWidth(800);

        JOptionPane.showMessageDialog(
            workbenchContext.getCurrentWindow(),
            label,
            applicationName,
            JOptionPane.WARNING_MESSAGE);

        return JOptionPane.NO_OPTION;
      }

      // The file exist and is not the file to save, ask to replace it
      if (file.exists() && !topLinkSessions().getPath().equals(file)) {
        String message =
            resourceRepository().getString("SAVE_AS_DIALOG_REPLACE", getSelectedFile().getPath());
        LabelArea label = new LabelArea(message);
        label.setPreferredWidth(800);

        return JOptionPane.showConfirmDialog(
            workbenchContext.getCurrentWindow(),
            label,
            applicationName,
            JOptionPane.YES_NO_CANCEL_OPTION);
      }

      return JOptionPane.YES_OPTION;
    }
  private void intializeLayout() {
    GridBagConstraints constraints = new GridBagConstraints();

    JPanel scrollPaneView = new JPanel(new GridBagLayout());

    JScrollPane scrollPane = new JScrollPane(scrollPaneView);
    scrollPane.getVerticalScrollBar().setBlockIncrement(20);
    scrollPane.setBorder(null);
    scrollPane.setViewportBorder(null);
    add(scrollPane, BorderLayout.CENTER);

    JPanel container = new JPanel(new GridBagLayout());
    container.setBorder(
        BorderFactory.createCompoundBorder(
            buildTitledBorder("PREFERENCES.MAPPINGS.CLASS.MAINTAIN_ZERO_ARGUMENT_CONSTRUCTOR"),
            BorderFactory.createEmptyBorder(0, 5, 5, 5)));

    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.PAGE_START;
    constraints.insets = new Insets(5, 5, 5, 5);
    scrollPaneView.add(container, constraints);

    // Message area
    LabelArea label =
        new LabelArea(
            resourceRepository()
                .getString(
                    "PREFERENCES.MAPPINGS.CLASS.MAINTAIN_ZERO_ARGUMENT_CONSTRUCTOR_EXPLANATION"));
    label.setScrollable(true);

    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.PAGE_START;
    constraints.insets = new Insets(0, 5, 0, 5);
    container.add(label, constraints);

    JRadioButton yesRadioButton =
        buildRadioButton(
            "PREFERENCES.MAPPINGS.CLASS.MAINTAIN_ZERO_ARGUMENT_CONSTRUCTOR_YES",
            buildRadioButtonModel(ZeroArgConstructorPreference.YES));
    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(5, 5, 0, 5);
    container.add(yesRadioButton, constraints);

    JRadioButton noRadioButton =
        buildRadioButton(
            "PREFERENCES.MAPPINGS.CLASS.MAINTAIN_ZERO_ARGUMENT_CONSTRUCTOR_NO",
            buildRadioButtonModel(ZeroArgConstructorPreference.NO));
    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 5, 0, 5);
    container.add(noRadioButton, constraints);

    JRadioButton promptRadioButton =
        buildRadioButton(
            "PREFERENCES.MAPPINGS.CLASS.MAINTAIN_ZERO_ARGUMENT_CONSTRUCTOR_PROMPT",
            buildRadioButtonModel(ZeroArgConstructorPreference.PROMPT));
    constraints.gridx = 0;
    constraints.gridy = 3;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 5, 5, 5);
    container.add(promptRadioButton, constraints);

    // last refresh
    JCheckBox lastRefreshCheckBox =
        this.buildCheckBox(
            "PREFERENCES.MAPPINGS.CLASS.PERSIST_LAST_REFRESH_TIMESTAMP",
            this.buildPersistLastRefreshModel());
    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 0, 0, 0);
    add(lastRefreshCheckBox, BorderLayout.NORTH);

    addHelpTopicId(this, "preferences.class");
  }