public CheckInPoliciesForm()

in src/org/jetbrains/tfsIntegration/ui/CheckInPoliciesForm.java [127:309]


  public CheckInPoliciesForm(Project project, Map<String, ManageWorkspacesForm.ProjectEntry> projectToDescriptors) {
    myProject = project;
    myProjectToDescriptors = new HashMap<>(projectToDescriptors.size());
    for (Map.Entry<String, ManageWorkspacesForm.ProjectEntry> e : projectToDescriptors.entrySet()) {
      myProjectToDescriptors.put(e.getKey(), new ModifyableProjectEntry(new ModifyableProjectEntry(e.getValue())));
    }

    myProjectCombo.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(final ActionEvent e) {
        updateTable();
        updateCheckboxes();
      }
    });

    myPoliciesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
      @Override
      public void valueChanged(ListSelectionEvent e) {
        updateButtons();
      }
    });

    List<String> projects = new ArrayList<>(myProjectToDescriptors.keySet());
    Collections.sort(projects, (s1, s2) -> s1.compareTo(s2));

    myProjectCombo.setModel(new DefaultComboBoxModel(ArrayUtilRt.toStringArray(projects)));
    myProjectCombo.setRenderer(new DefaultListCellRenderer() {
      @Override
      public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        JLabel component = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        String path = (String)value;
        component.setText(VersionControlPath.getTeamProject(path));
        return component;
      }
    });

    myPoliciesTable.setModelAndUpdateColumns(new ListTableModel<>(COLUMNS));

    myEditButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        final StatefulPolicyDescriptor descriptor = getSelectedDescriptor();
        editPolicy(descriptor);
      }
    });

    myRemoveButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        final StatefulPolicyDescriptor descriptor = getSelectedDescriptor();
        final String message = MessageFormat.format("Are you sure to remove checkin policy ''{0}''?", descriptor.getType().getName());
        if (Messages.showOkCancelDialog(myProject, message, "Remove Checkin Policy", Messages.getQuestionIcon()) == Messages.OK) {
          final ModifyableProjectEntry projectEntry = myProjectToDescriptors.get(getSelectedProject());
          projectEntry.descriptors.remove(descriptor);
          projectEntry.isModified = true;
          updateTable();
          updateButtons();
        }
      }
    });

    myAddButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        final ModifyableProjectEntry projectEntry = myProjectToDescriptors.get(getSelectedProject());

        List<PolicyBase> policies = new ArrayList<>();
        try {
          // do not allow to add the same unconfigurable policy several times
          main_loop:
          for (PolicyBase installed : CheckinPoliciesManager.getInstalledPolicies()) {
            if (!installed.canEdit()) {
              for (StatefulPolicyDescriptor descriptor : projectEntry.descriptors) {
                if (descriptor.getType().equals(installed.getPolicyType())) {
                  continue main_loop;
                }
              }
            }
            policies.add(installed);
          }
        }
        catch (DuplicatePolicyIdException ex) {
          final String message = MessageFormat
            .format("Several checkin policies with the same id found: ''{0}''.\nPlease review your extensions.", ex.getDuplicateId());
          Messages.showErrorDialog(myProject, message, "Add Checkin Policy");
          return;
        }

        ChooseCheckinPolicyDialog d = new ChooseCheckinPolicyDialog(myProject, policies);
        if (!d.showAndGet()) {
          return;
        }

        PolicyBase policy = d.getSelectedPolicy();
        StatefulPolicyDescriptor newDescriptor =
          new StatefulPolicyDescriptor(policy.getPolicyType(), true, StatefulPolicyParser.createEmptyConfiguration(),
                                       Collections.emptyList(), StatefulPolicyDescriptor.DEFAULT_PRIORITY, null);

        if (!editPolicy(newDescriptor)) {
          return;
        }

        projectEntry.descriptors.add(newDescriptor);
        projectEntry.isModified = true;
        updateTable();
        int index = projectEntry.descriptors.size() - 1;
        myPoliciesTable.getSelectionModel().setSelectionInterval(index, index);
        updateButtons();
      }
    });

    new DoubleClickListener() {
      @Override
      protected boolean onDoubleClick(MouseEvent e) {
        final StatefulPolicyDescriptor descriptor = getSelectedDescriptor();
        if (descriptor != null) {
          editPolicy(descriptor);
        }
        return true;
      }
    }.installOn(myPoliciesTable);


    myTeampriseCheckBox.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        ModifyableProjectEntry entry = myProjectToDescriptors.get(getSelectedProject());
        entry.policiesCompatibilityOverride.teamprise = myTeampriseCheckBox.isSelected();
        entry.isModified = true;
      }
    });

    myTeamExplorerCheckBox.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        ModifyableProjectEntry entry = myProjectToDescriptors.get(getSelectedProject());
        entry.policiesCompatibilityOverride.teamExplorer = myTeamExplorerCheckBox.isSelected();
        entry.isModified = true;
      }
    });

    myNonInstalledPoliciesCheckBox.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        ModifyableProjectEntry entry = myProjectToDescriptors.get(getSelectedProject());
        entry.policiesCompatibilityOverride.nonInstalled = myNonInstalledPoliciesCheckBox.isSelected();
        entry.isModified = true;
      }
    });

    myOverrideCheckBox.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        ModifyableProjectEntry entry = myProjectToDescriptors.get(getSelectedProject());
        if (myOverrideCheckBox.isSelected()) {
          entry.policiesCompatibilityOverride = new TfsCheckinPoliciesCompatibility(false, false, false);
        }
        else {
          entry.policiesCompatibilityOverride = null;
        }
        updateCheckboxes();
        entry.isModified = true;
      }
    });

    ActionListener l = new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        boolean b = myTeamExplorerCheckBox.isSelected() || myTeampriseCheckBox.isSelected();
        myNonInstalledPoliciesCheckBox.setEnabled(b);
        if (!b) {
          myNonInstalledPoliciesCheckBox.setSelected(false);
          myProjectToDescriptors.get(getSelectedProject()).policiesCompatibilityOverride.nonInstalled = false;
        }
      }
    };
    myTeamExplorerCheckBox.addActionListener(l);
    myTeampriseCheckBox.addActionListener(l);

    updateTable();
    updateCheckboxes();
    updateButtons();
  }