use of org.jboss.pnc.dto.Build in project pnc by project-ncl.
the class BuildProviderImplTest method testGetBuilds.
@Test
public void testGetBuilds() {
// Prepare
// hit
mockBuildRecord();
// hit
mockBuildTask();
// hit
mockBuildRecord();
// hit
mockBuildTask();
// hit
mockBuildRecord();
// hit
mockBuildTask();
// hit
BuildRecord build2 = mockBuildRecord();
// hit
BuildTask build1 = mockBuildTask();
// When
BuildPageInfo pageInfo = new BuildPageInfo(0, 2, "", "", false, false, "");
Page<Build> builds = provider.getBuilds(pageInfo);
// Verify
assertEquals(8, builds.getTotalHits());
assertEquals(2, builds.getContent().size());
Iterator<Build> it = builds.getContent().iterator();
assertEquals(build1.getId(), it.next().getId());
assertEquals(BuildMapper.idMapper.toDto(build2.getId()), it.next().getId());
}
use of org.jboss.pnc.dto.Build in project pnc by project-ncl.
the class BuildProviderImpl method getDependencyGraph.
@Override
public Graph<Build> getDependencyGraph(String buildId) {
Build specific = getSpecific(buildId);
if (specific == null) {
throw new EmptyEntityException("there is no record for given buildId.");
}
org.jboss.util.graph.Graph<BuildWithDependencies> buildGraph = createBuildDependencyGraph(buildId);
GraphDtoBuilder<BuildWithDependencies, Build> graphBuilder = new GraphDtoBuilder();
return graphBuilder.from(buildGraph, Build.class, vertex -> vertex.getData().getBuild());
}
use of org.jboss.pnc.dto.Build in project pnc by project-ncl.
the class BuildProviderImpl method setBuiltArtifacts.
@RolesAllowed(SYSTEM_USER)
@Override
public void setBuiltArtifacts(String buildId, List<String> artifactIds) {
Set<Integer> ids = artifactIds.stream().map(Integer::valueOf).collect(Collectors.toSet());
List<Artifact> artifacts = artifactRepository.queryWithPredicates(withIds(ids));
if (ids.size() != artifacts.size()) {
artifacts.stream().map(Artifact::getId).forEach(ids::remove);
throw new InvalidEntityException("Artifacts not found, missing ids: " + ids);
}
final Base32LongID id = parseId(buildId);
BuildRecord buildRecord = repository.queryById(id);
for (Artifact artifact : artifacts) {
if (artifact.getBuildRecord() != null && !id.equals(artifact.getBuildRecord().getId())) {
throw new ConflictedEntryException("Artifact " + artifact.getId() + " is already marked as built by different build.", BuildRecord.class, BuildMapper.idMapper.toDto(artifact.getBuildRecord().getId()));
}
artifact.setBuildRecord(buildRecord);
}
HashSet<Artifact> oldBuiltArtifacts = new HashSet<>(buildRecord.getBuiltArtifacts());
oldBuiltArtifacts.stream().filter(a -> !ids.contains(a.getId())).forEach(a -> a.setBuildRecord(null));
}
use of org.jboss.pnc.dto.Build in project pnc by project-ncl.
the class BuildProviderImpl method getBuildGraphForGroupBuild.
@Override
public Graph<Build> getBuildGraphForGroupBuild(String groupBuildId) {
BuildConfigSetRecord buildConfigSetRecord = buildConfigSetRecordRepository.queryById(Integer.valueOf(groupBuildId));
if (buildConfigSetRecord == null) {
throw new EmptyEntityException("Build group " + groupBuildId + " does not exists.");
}
List<String> runningAndStoredIds = getBuildIdsInTheGroup(buildConfigSetRecord);
org.jboss.util.graph.Graph<BuildWithDependencies> buildGraph = new org.jboss.util.graph.Graph<>();
for (String buildId : runningAndStoredIds) {
org.jboss.util.graph.Graph<BuildWithDependencies> dependencyGraph = createBuildDependencyGraph(buildId);
GraphUtils.merge(buildGraph, dependencyGraph);
logger.trace("Merged graph from buildRecordId {} to BuildConfigSetRecordGraph {}; Edges {},", buildId, buildGraph, buildGraph.getEdges());
}
GraphDtoBuilder<BuildWithDependencies, Build> graphBuilder = new GraphDtoBuilder();
Graph<Build> graphDto = graphBuilder.from(buildGraph, Build.class, vertex -> vertex.getData().getBuild());
return graphDto;
}
use of org.jboss.pnc.dto.Build in project pnc by project-ncl.
the class BuildProviderImpl method getBuilds.
/**
* Returns the page of builds (running or finished) filtered by given BuildPageInfo and predicate.
*/
private Page<Build> getBuilds(BuildPageInfo pageInfo, java.util.function.Predicate<BuildTask> predicate, Predicate<BuildRecord> dbPredicate) {
List<Build> runningBuilds = readRunningBuilds(pageInfo, predicate);
int firstPossibleDBIndex = pageInfo.getPageIndex() * pageInfo.getPageSize() - runningBuilds.size();
int lastPossibleDBIndex = (pageInfo.getPageIndex() + 1) * pageInfo.getPageSize() - 1;
int toSkip = min(runningBuilds.size(), pageInfo.getPageIndex() * pageInfo.getPageSize());
Predicate<BuildRecord>[] predicates = preparePredicates(dbPredicate, pageInfo.getQ(), pageInfo.getBuildConfigName());
Comparator<Build> comparing = Comparator.comparing(Build::getSubmitTime).reversed();
if (!StringUtils.isEmpty(pageInfo.getSort())) {
comparing = rsqlPredicateProducer.getComparator(pageInfo.getSort());
}
SortInfo sortInfo = rsqlPredicateProducer.getSortInfo(type, pageInfo.getSort());
MergeIterator<Build> builds = new MergeIterator(runningBuilds.iterator(), new BuildIterator(firstPossibleDBIndex, lastPossibleDBIndex, pageInfo.getPageSize(), sortInfo, predicates), comparing);
List<Build> resultList = StreamSupport.stream(Spliterators.spliteratorUnknownSize(builds, Spliterator.ORDERED | Spliterator.SORTED), false).skip(toSkip).limit(pageInfo.getPageSize()).collect(Collectors.toList());
int hits = repository.count(predicates) + runningBuilds.size();
return new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize(), (int) Math.ceil((double) hits / pageInfo.getPageSize()), hits, resultList);
}
Aggregations