protected CheckinHandler createVcsHandler()

in src/org/jetbrains/tfsIntegration/core/TFSCheckinHandlerFactory.java [46:122]


  protected CheckinHandler createVcsHandler(final CheckinProjectPanel panel) {
    return new CheckinHandler() {
      @Override
      public ReturnResult beforeCheckin(@Nullable CommitExecutor executor, PairConsumer<Object, Object> additionalDataConsumer) {
        if (executor != null) {
          return ReturnResult.COMMIT;
        }

        if (!panel.vcsIsAffected(TFSVcs.TFS_NAME)) {
          return ReturnResult.COMMIT;
        }

        boolean reallyAffected = false;
        for (File file : panel.getFiles()) {
          if (TFSVcs.isUnderTFS(VcsUtil.getFilePath(file), panel.getProject())) {
            reallyAffected = true;
            break;
          }
        }

        if (!reallyAffected) {
          return ReturnResult.COMMIT;
        }

        final TFSVcs vcs = TFSVcs.getInstance(panel.getProject());

        final CheckinParameters parameters = vcs.getCheckinData().parameters;
        if (parameters == null) {
          Messages.showErrorDialog(panel.getProject(), "Validation must be performed before checking in", "Checkin");
          return ReturnResult.CLOSE_WINDOW;
        }

        @Nullable Pair<String, CheckinParameters.Severity> msg = parameters.getValidationMessage(CheckinParameters.Severity.ERROR);
        if (msg != null) {
          Messages.showErrorDialog(panel.getProject(), msg.first, "Checkin: Validation Failed");
          return ReturnResult.CANCEL;
        }

        try {
          CheckinPoliciesManager.getInstalledPolicies();
        }
        catch (DuplicatePolicyIdException e) {
          String message = MessageFormat
            .format("Found multiple checkin policies with the same id: ''{0}''.\nPlease review your extensions.", e.getDuplicateId());
          Messages.showErrorDialog(panel.getProject(), message, "Checkin Policies Evaluation");
          vcs.getCheckinData().parameters = null;
          return ReturnResult.CLOSE_WINDOW;
        }

        // need to evaluate policies again since comment and checkboxes state may change since last validation
        // remove when commit dialog state change listener is provided
        boolean completed = ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
          final ProgressIndicator pi = ProgressManager.getInstance().getProgressIndicator();
          pi.setIndeterminate(true);
          parameters.evaluatePolicies(pi);
        }, "Evaluating Checkin Policies", true, panel.getProject());
        if (!completed) {
          TFSCheckinEnvironment.updateMessage(vcs.getCheckinData());
          return ReturnResult.CANCEL;
        }

        msg = parameters.getValidationMessage(CheckinParameters.Severity.WARNING);
        if (msg == null) {
          return ReturnResult.COMMIT;
        }

        OverridePolicyWarningsDialog d = new OverridePolicyWarningsDialog(panel.getProject(), parameters.getAllFailures());
        if (d.showAndGet()) {
          parameters.setOverrideReason(d.getReason());
          return ReturnResult.COMMIT;
        }
        else {
          return ReturnResult.CANCEL;
        }
      }
    };
  }