public Queue<PipelineConfigQueueEntry> buildQueue() { Queue<PipelineConfigQueueEntry> configQueue = new LinkedList<>(); Queue<PipelineConfigDependencyEntry> tmp = new LinkedList<>(); tmp.add(new PipelineConfigDependencyEntry(this, new ArrayList<>())); while (true) { PipelineConfigDependencyEntry currentHead = tmp.poll(); if (currentHead == null) { break; } PipelineConfigDependencyGraph current = currentHead.getNode(); List<PipelineConfig> currentPath = currentHead.getPath(); currentPath.add(current.getCurrent()); configQueue.add(new PipelineConfigQueueEntry(current.getCurrent(), new ArrayList<>(currentPath))); for (PipelineConfigDependencyGraph upstream : current.getUpstreamDependencies()) { List<PipelineConfig> parentsPath = new ArrayList<>(currentPath); tmp.add(new PipelineConfigDependencyEntry(upstream, parentsPath)); } } return removeHead(configQueue); }
private void populateRevisionsUsingUpstream(MaterialRevisions actualRevisions, MaterialRevisions newRevisions, DependencyMaterialRevision dmr, PipelineConfigDependencyGraph.PipelineConfigQueueEntry configQueueEntry) { if (!configQueueEntry.containsPipelineInPath(dmr.getPipelineName())) { return; } for (MaterialRevision materialRevision : actualRevisions) { Material material = materialRevision.getMaterial(); if (currentPipelineHasMaterial(configQueueEntry, material) && !alreadyAdded(newRevisions, material)) { List<PipelineConfig> paths = removePathHead(configQueueEntry); if (!paths.isEmpty()) { MaterialRevision revision = getRevisionFor(paths, dmr, material); //revision is null when an upstream is both parent and grandparent if (revision != null) { materialRevision.replaceModifications(revision.getModifications()); newRevisions.addRevision(materialRevision); } } } } }
private boolean currentPipelineHasMaterial(PipelineConfigDependencyGraph.PipelineConfigQueueEntry configQueueEntry, Material material) { return configQueueEntry.getNode().hasMaterial(material.config()); }
private List<PipelineConfig> removePathHead(PipelineConfigDependencyGraph.PipelineConfigQueueEntry configQueueEntry) { return configQueueEntry.pathWithoutHead(); }
private boolean existsOnAnyOfPipelinesIn(List<PipelineConfigQueueEntry> queue, MaterialConfig materialConfig) { for (PipelineConfigQueueEntry pipelineConfigQueueEntry : queue) { if (pipelineConfigQueueEntry.hasMaterial(materialConfig)) { return true; } } return false; }
private boolean isThisMaterialIgnored(List<PipelineConfigQueueEntry> queue, MaterialRevision revision, MaterialConfig materialConfig) { for (PipelineConfigQueueEntry pipelineConfigQueueEntry : queue) { if (pipelineConfigQueueEntry.hasMaterial(materialConfig)) { if (!pipelineConfigQueueEntry.shouldIgnore(revision)) { return false; } } } return true; }