/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.pullrequest.client;
import org.eclipse.che.plugin.pullrequest.client.parts.contribute.StagesProvider;
import org.eclipse.che.plugin.pullrequest.client.steps.CommitWorkingTreeStep;
import org.eclipse.che.plugin.pullrequest.client.steps.CreateForkStep;
import org.eclipse.che.plugin.pullrequest.client.steps.DetectPullRequestStep;
import org.eclipse.che.plugin.pullrequest.client.steps.IssuePullRequestStep;
import org.eclipse.che.plugin.pullrequest.client.steps.PushBranchOnForkStep;
import org.eclipse.che.plugin.pullrequest.client.steps.PushBranchOnOriginStep;
import org.eclipse.che.plugin.pullrequest.client.steps.UpdatePullRequestStep;
import org.eclipse.che.plugin.pullrequest.client.workflow.Context;
import org.eclipse.che.plugin.pullrequest.client.workflow.Step;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
import java.util.Set;
import static java.util.Arrays.asList;
/**
* Provides displayed stages for GitHub contribution workflow.
*
* @author Yevhenii Voevodin
*/
@Singleton
public class GithubStagesProvider implements StagesProvider {
private static final Set<Class<? extends Step>> UPDATE_ORIGIN_STEP_DONE_TYPES;
private static final Set<Class<? extends Step>> UPDATE_FORK_STEP_DONE_TYPES;
private static final Set<Class<? extends Step>> CREATION_ORIGIN_STEP_DONE_TYPES;
private static final Set<Class<? extends Step>> CREATION_FORK_STEP_DONE_TYPES;
static {
UPDATE_FORK_STEP_DONE_TYPES = ImmutableSet.of(PushBranchOnForkStep.class,
UpdatePullRequestStep.class);
UPDATE_ORIGIN_STEP_DONE_TYPES = ImmutableSet.of(PushBranchOnOriginStep.class,
UpdatePullRequestStep.class);
CREATION_FORK_STEP_DONE_TYPES = ImmutableSet.of(CreateForkStep.class,
PushBranchOnForkStep.class,
IssuePullRequestStep.class);
CREATION_ORIGIN_STEP_DONE_TYPES = ImmutableSet.of(PushBranchOnOriginStep.class,
IssuePullRequestStep.class);
}
private final ContributeMessages messages;
@Inject
public GithubStagesProvider(final ContributeMessages messages) {
this.messages = messages;
}
@Override
public List<String> getStages(final Context context) {
if (context.isUpdateMode()) {
return asList(messages.contributePartStatusSectionNewCommitsPushedStepLabel(),
messages.contributePartStatusSectionPullRequestUpdatedStepLabel());
}
if (context.isForkAvailable()) {
return asList(messages.contributePartStatusSectionForkCreatedStepLabel(),
messages.contributePartStatusSectionBranchPushedForkStepLabel(),
messages.contributePartStatusSectionPullRequestIssuedStepLabel());
} else {
return asList(messages.contributePartStatusSectionBranchPushedOriginStepLabel(),
messages.contributePartStatusSectionPullRequestIssuedStepLabel());
}
}
@Override
public Set<Class<? extends Step>> getStepDoneTypes(Context context) {
if (context.isUpdateMode()) {
return context.isForkAvailable() ? UPDATE_FORK_STEP_DONE_TYPES : UPDATE_ORIGIN_STEP_DONE_TYPES;
}
return context.isForkAvailable() ? CREATION_FORK_STEP_DONE_TYPES : CREATION_ORIGIN_STEP_DONE_TYPES;
}
@Override
public Set<Class<? extends Step>> getStepErrorTypes(Context context) {
return getStepDoneTypes(context);
}
@Override
public Class<? extends Step> getDisplayStagesType(Context context) {
return context.isUpdateMode() ? CommitWorkingTreeStep.class : DetectPullRequestStep.class;
}
}