package com.hubspot.blazar.visitor.repositorybuild;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.hubspot.blazar.base.InterProjectBuildMapping;
import com.hubspot.blazar.base.ModuleBuild;
import com.hubspot.blazar.base.RepositoryBuild;
import com.hubspot.blazar.base.visitor.AbstractRepositoryBuildVisitor;
import com.hubspot.blazar.data.service.InterProjectBuildMappingService;
import com.hubspot.blazar.data.service.ModuleBuildService;
public class InterProjectRepositoryBuildVisitor extends AbstractRepositoryBuildVisitor {
private static final Logger LOG = LoggerFactory.getLogger(InterProjectRepositoryBuildVisitor.class);
private final ModuleBuildService moduleBuildService;
private final InterProjectBuildMappingService interProjectBuildMappingService;
@Inject
public InterProjectRepositoryBuildVisitor(ModuleBuildService moduleBuildService,
InterProjectBuildMappingService interProjectBuildMappingService) {
this.moduleBuildService = moduleBuildService;
this.interProjectBuildMappingService = interProjectBuildMappingService;
}
@Override
protected void visitLaunching(RepositoryBuild build) throws Exception {
Set<InterProjectBuildMapping> mappings = interProjectBuildMappingService.getByRepoBuildId(build.getId().get());
if (mappings.isEmpty()) {
return;
}
long ipbId = mappings.stream().findAny().get().getInterProjectBuildId();
LOG.info("Repo Build {} is part of InterProjectBuild {} creating mappings for triggered modules", build, ipbId);
Set<ModuleBuild> moduleBuildsTriggered = moduleBuildService.getByRepositoryBuild(build.getId().get());
for (InterProjectBuildMapping mapping : mappings) {
for (ModuleBuild moduleBuild : moduleBuildsTriggered) {
if (mapping.getModuleId() == moduleBuild.getModuleId()) {
LOG.debug("RepoBuild {} -> IPB {} -> ModuleBuild -> {}", build, ipbId, moduleBuild.getId().get());
interProjectBuildMappingService.updateBuilds(mapping.withModuleBuildId(moduleBuild.getId().get()));
}
}
}
}
}