
com.hubspot.blazar.discovery.CompositeModuleDiscovery Maven / Gradle / Ivy
The newest version!
package com.hubspot.blazar.discovery;
import com.google.common.collect.ImmutableSet;
import com.hubspot.blazar.base.CommitInfo;
import com.hubspot.blazar.base.DiscoveredModule;
import com.hubspot.blazar.base.DiscoveryResult;
import com.hubspot.blazar.base.GitInfo;
import com.hubspot.blazar.base.MalformedFile;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Singleton
public class CompositeModuleDiscovery implements ModuleDiscovery {
private final Set delegates;
private final BlazarConfigModuleDiscovery configDiscovery;
@Inject
public CompositeModuleDiscovery(Set delegates, BlazarConfigModuleDiscovery configDiscovery) {
this.delegates = delegates;
this.configDiscovery = configDiscovery;
}
@Override
public boolean shouldRediscover(GitInfo gitInfo, CommitInfo commitInfo) throws IOException {
for (ModuleDiscovery delegate : delegates) {
if (delegate.shouldRediscover(gitInfo, commitInfo)) {
return true;
}
}
return configDiscovery.shouldRediscover(gitInfo, commitInfo);
}
@Override
public DiscoveryResult discover(GitInfo gitInfo) throws IOException {
Map> modulesByPath = new HashMap<>();
Set malformedFiles = new HashSet<>();
for (ModuleDiscovery delegate : delegates) {
DiscoveryResult result = delegate.discover(gitInfo);
malformedFiles.addAll(result.getMalformedFiles());
for (DiscoveredModule module : result.getModules()) {
String folder = module.getFolder();
Set modules = modulesByPath.get(folder);
if (modules == null) {
modules = new HashSet<>();
modulesByPath.put(folder, modules);
}
modules.add(module);
}
}
DiscoveryResult result = configDiscovery.discover(gitInfo);
malformedFiles.addAll(result.getMalformedFiles());
for (DiscoveredModule module : result.getModules()) {
String folder = module.getFolder();
if (!module.isActive()) {
modulesByPath.remove(folder);
} else if (!modulesByPath.containsKey(folder)) {
modulesByPath.put(folder, ImmutableSet.of(module));
}
}
Set modules = new HashSet<>();
for (Set folderModules : modulesByPath.values()) {
modules.addAll(folderModules);
}
return new DiscoveryResult(modules, malformedFiles);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy