All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.openapi.vcs.checkin.CheckinHandler Maven / Gradle / Ivy

/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.intellij.openapi.vcs.checkin;

import com.intellij.openapi.Disposable;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.CommitExecutor;
import com.intellij.openapi.vcs.changes.LocalCommitExecutor;
import com.intellij.openapi.vcs.ui.RefreshableOnComponent;
import com.intellij.util.PairConsumer;
import org.jetbrains.annotations.Nullable;

import java.util.List;

/**
 * A callback which can be used to extend the user interface of the Checkin Project/Checkin File
 * dialogs and to perform actions before commit, on successful commit and on failed commit.
 *
 * @author lesya
 * @since 5.1
 * @see BaseCheckinHandlerFactory#createHandler(com.intellij.openapi.vcs.CheckinProjectPanel, CommitContext)
 * @see CodeAnalysisBeforeCheckinHandler
 */
public abstract class CheckinHandler {
  /**
   * you can return this handler if your handler shouldn't be created (for instance, your VCS is not active)
   */
  public static final CheckinHandler DUMMY = new CheckinHandler() {
  };

  public enum ReturnResult {
    COMMIT, CANCEL, CLOSE_WINDOW
  }

  /**
   * Returns the panel which is inserted in the "Before Check In" group box of the Checkin Project
   * or Checkin File dialogs.
   *
   * @return the panel instance, or null if the handler does not provide any options to show in the
   * "Before Check In" group.
   */
  @Nullable
  public RefreshableOnComponent getBeforeCheckinConfigurationPanel() {
    return null;
  }

  /**
   * Returns the panel which is inserted in the "After Check In" group box of the Checkin Project
   * or Checkin File dialogs.
   *
   * @return the panel instance, or null if the handler does not provide any options to show in the
   * "After Check In" group.
   * @param parentDisposable
   */
  @Nullable
  public RefreshableOnComponent getAfterCheckinConfigurationPanel(final Disposable parentDisposable) {
    return null;
  }

  /**
   * Performs the before check-in processing when a custom commit executor is used. The method can use the
   * {@link com.intellij.openapi.vcs.CheckinProjectPanel} instance passed to
   * {@link BaseCheckinHandlerFactory#createHandler(com.intellij.openapi.vcs.CheckinProjectPanel, CommitContext)} to
   * get information about the files to be checked in.
   *
   * @param executor the commit executor, or null if the standard commit operation is executed.
   * @param additionalDataConsumer
   * @return the code indicating whether the check-in operation should be performed or aborted.
   */
  public ReturnResult beforeCheckin(@Nullable CommitExecutor executor, PairConsumer additionalDataConsumer) {
    return beforeCheckin();
  }

  /**
   * Performs the before check-in processing. The method can use the
   * {@link com.intellij.openapi.vcs.CheckinProjectPanel} instance passed to
   * {@link BaseCheckinHandlerFactory#createHandler(com.intellij.openapi.vcs.CheckinProjectPanel, CommitContext)} to
   * get information about the files to be checked in.
   *
   * @return the code indicating whether the check-in operation should be performed or aborted.
   */
  public ReturnResult beforeCheckin() {
    return ReturnResult.COMMIT;
  }

  /**
   * Performs the processing on successful check-in. The method can use the
   * {@link com.intellij.openapi.vcs.CheckinProjectPanel} instance passed to
   * {@link BaseCheckinHandlerFactory#createHandler(com.intellij.openapi.vcs.CheckinProjectPanel, CommitContext)} to
   * get information about the checked in files.
   */
  public void checkinSuccessful() {

  }

  /**
   * Performs the processing on failed check-in. The method can use the
   * {@link com.intellij.openapi.vcs.CheckinProjectPanel} instance passed to
   * {@link BaseCheckinHandlerFactory#createHandler(com.intellij.openapi.vcs.CheckinProjectPanel, CommitContext)} to
   * get information about the checked in files.
   *
   * @param exception the list of VCS exceptions identifying the problems that occurred during the
   * commit operation.
   */
  public void checkinFailed(List exception) {

  }

  /**
   * Called to notify handler that user has included/excluded some changes to/from commit
   */
  public void includedChangesChanged() {
  }

  /**
   * allows to skip before checkin steps when is not applicable. E.g. there should be no check for todos before shelf/create patch 
   * @param executor current operation (null for commit)
   * @return true if handler should be skipped
   */
  public boolean acceptExecutor(CommitExecutor executor) {
    return executor == null || !(executor instanceof LocalCommitExecutor);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy