package com.hubspot.blazar.visitor.repositorybuild;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
import com.google.common.eventbus.EventBus;
import com.hubspot.blazar.base.RepositoryBuild;
import com.hubspot.blazar.base.visitor.RepositoryBuildVisitor;
import com.hubspot.blazar.data.service.RepositoryBuildService;
import com.hubspot.blazar.data.util.BuildNumbers;
@Singleton
public class CompletedRepositoryBuildVisitor implements RepositoryBuildVisitor {
private static final Logger LOG = LoggerFactory.getLogger(CompletedRepositoryBuildVisitor.class);
private final RepositoryBuildService repositoryBuildService;
private final EventBus eventBus;
@Inject
public CompletedRepositoryBuildVisitor(RepositoryBuildService repositoryBuildService,
EventBus eventBus) {
this.repositoryBuildService = repositoryBuildService;
this.eventBus = eventBus;
}
@Override
public void visit(RepositoryBuild build) throws Exception {
if (build.getState().isComplete()) {
launchPendingBuild(build);
}
}
private void launchPendingBuild(RepositoryBuild build) throws Exception {
BuildNumbers buildNumbers = repositoryBuildService.getBuildNumbers(build.getBranchId());
Optional<Long> pendingBuildId = buildNumbers.getPendingBuildId();
if (pendingBuildId.isPresent()) {
LOG.info("Posting event for pending build {} for branch {}", pendingBuildId.get(), build.getBranchId());
RepositoryBuild toLaunch = repositoryBuildService.get(pendingBuildId.get()).get();
eventBus.post(toLaunch);
} else {
LOG.info("No pending build for branch {}", build.getBranchId());
}
}
}