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

com.hubspot.blazar.cctray.CCTrayProjectFactory Maven / Gradle / Ivy

The newest version!
package com.hubspot.blazar.cctray;

import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.hubspot.blazar.base.GitInfo;
import com.hubspot.blazar.base.RepositoryBuild;
import com.hubspot.blazar.base.RepositoryBuild.State;
import com.hubspot.blazar.base.RepositoryState;
import com.hubspot.blazar.cctray.CCTrayProject.CCTrayActivity;
import com.hubspot.blazar.cctray.CCTrayProject.CCTrayStatus;
import com.hubspot.blazar.util.BlazarUrlHelper;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;

import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
public class CCTrayProjectFactory implements Function> {
  private static final DateTimeFormatter DATE_FORMATTER = ISODateTimeFormat.dateTimeNoMillis();

  private final BlazarUrlHelper urlHelper;

  @Inject
  public CCTrayProjectFactory(BlazarUrlHelper urlHelper) {
    this.urlHelper = urlHelper;
  }


  @Override
  public Optional apply(@Nullable RepositoryState repositoryState) {
    if (repositoryState == null || !repositoryState.getGitInfo().isActive() || !repositoryState.getLastBuild().isPresent()) {
      return Optional.absent();
    }

    RepositoryBuild lastBuild = repositoryState.getLastBuild().get();

    String name = computeCCTrayName(repositoryState.getGitInfo());
    CCTrayActivity activity = computeCCTrayActivity(repositoryState.getInProgressBuild());
    CCTrayStatus lastBuildState = computeLastBuildState(lastBuild);
    String lastBuildLabel = computeLastBuildLabel(lastBuild);
    String lastBuildTime = computeLastBuildTime(lastBuild);
    String webUrl = computeWebUrl(repositoryState.getGitInfo());


    return Optional.of(new CCTrayProject(name, activity, lastBuildState, lastBuildLabel, lastBuildTime, webUrl));
  }

  private String computeCCTrayName(GitInfo gitInfo) {
    return gitInfo.getRepository() + '/' + gitInfo.getBranch();
  }

  private CCTrayActivity computeCCTrayActivity(Optional inProgressBuild) {
    if (inProgressBuild.isPresent()) {
      if (inProgressBuild.get().getState() == State.LAUNCHING) {
        return CCTrayActivity.CHECKING_MODIFICATIONS;
      } else {
        return CCTrayActivity.BUILDING;
      }
    } else {
      return CCTrayActivity.SLEEPING;
    }
  }

  private CCTrayStatus computeLastBuildState(RepositoryBuild lastBuild) {
    switch (lastBuild.getState()) {
      case SUCCEEDED:
        return CCTrayStatus.SUCCESS;
      case CANCELLED:
        return CCTrayStatus.UNKNOWN;
      case FAILED:
      case UNSTABLE:
        return CCTrayStatus.FAILURE;
      default:
        return CCTrayStatus.UNKNOWN;
    }
  }

  private String computeLastBuildLabel(RepositoryBuild lastBuild) {
    return String.valueOf(lastBuild.getBuildNumber());
  }

  private String computeLastBuildTime(RepositoryBuild lastBuild) {
    return DATE_FORMATTER.print(lastBuild.getStartTimestamp().or(0L));
  }

  private String computeWebUrl(GitInfo gitInfo) {
    return urlHelper.getBlazarUiLink(gitInfo).toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy