use of com.blackducksoftware.bdio2.model.Component in project blackduck-common by blackducksoftware.
the class Bdio2UploadRecipeTest method uploadBdio2.
@Test
void uploadBdio2() throws IOException, IntegrationException, InterruptedException {
Bdio2Factory bdio2Factory = new Bdio2Factory();
// create the bdio2 metadata
ZonedDateTime now = Instant.now().atZone(ZoneId.of("EST5EDT"));
ProjectInfo projectInfo = new ProjectInfo(PROJECT, GROUP_NAME, // TODO: What is this supposed to look like? Only used for chunking? JM-04/2022
null, new GitInfo(new URL("https://github.com/blackducksoftware/blackduck-common"), "4a1f431d7aa4ac15f755edd5de004f07d36ae89a", "master"));
BdioMetadata bdio2Metadata = bdio2Factory.createBdioMetadata(CODE_LOCATION_NAME, projectInfo, now);
// create a graph of one dependency
Dependency projectDependency = Dependency.FACTORY.createMavenDependency(GROUP_NAME, PROJECT.getName(), PROJECT.getVersion());
Dependency dependency = Dependency.FACTORY.createMavenDependency("org.apache.commons", "commons-lang3", "3.11");
ProjectDependencyGraph dependencyGraph = new ProjectDependencyGraph(projectDependency);
dependencyGraph.addDirectDependency(dependency);
// now, with metadata, a project, and a graph, we can create a bdio2 document and write out the file
Bdio2Document bdio2Document = bdio2Factory.createBdio2Document(bdio2Metadata, dependencyGraph);
File bdio2File = File.createTempFile("test_bdio2", ".bdio");
bdio2File.createNewFile();
bdio2File.deleteOnExit();
Bdio2Writer bdio2Writer = new Bdio2Writer();
bdio2Writer.writeBdioDocument(new FileOutputStream(bdio2File), bdio2Document);
// using the file and the previously set values, we create the UploadBatch for uploading to Black Duck
UploadBatch uploadBatch = new UploadBatch();
uploadBatch.addUploadTarget(UploadTarget.createDefault(PROJECT, CODE_LOCATION_NAME, bdio2File));
// now all the setup is done, we can upload the bdio2 file
UploadBatchOutput uploadBatchOutput = bdio2UploadService.uploadBdioAndWait(uploadBatch, 120);
assertFalse(uploadBatchOutput.hasAnyFailures());
Optional<ProjectVersionWrapper> projectVersionWrapper = projectService.getProjectVersion(PROJECT);
assertTrue(projectVersionWrapper.isPresent());
// Verify project headers are being set correctly
String projectName = projectVersionWrapper.get().getProjectView().getName();
String projectVersionName = projectVersionWrapper.get().getProjectVersionView().getVersionName();
assertEquals(PROJECT, new NameVersion(projectName, projectVersionName));
assertEquals(PROJECT.getName(), bdio2Document.getBdioMetadata().get(Bdio.DataProperty.project.toString()));
assertEquals(PROJECT.getVersion(), bdio2Document.getBdioMetadata().get(Bdio.DataProperty.projectVersion.toString()));
assertEquals(GROUP_NAME, bdio2Document.getBdioMetadata().get(Bdio.DataProperty.projectGroup.toString()));
// verify that we now have a bom with 1 component
List<ProjectVersionComponentVersionView> bomComponents = projectBomService.getComponentsForProjectVersion(projectVersionWrapper.get().getProjectVersionView());
assertEquals(1, bomComponents.size());
}
use of com.blackducksoftware.bdio2.model.Component in project blackduck-common by blackducksoftware.
the class Bdio2Factory method createAndLinkComponentsFromGraph.
private Pair<List<Project>, List<Component>> createAndLinkComponentsFromGraph(DependencyGraph dependencyGraph, @Nullable SubProjectFunction linkProjectDependency, DependencyFunction linkComponentDependency, Set<Dependency> dependencies, Map<ExternalId, Project> existingSubprojects, Map<ExternalId, Component> existingComponents) {
List<Project> addedSubprojects = new ArrayList<>();
List<Component> addedComponents = new ArrayList<>();
for (Dependency dependency : dependencies) {
if (dependency instanceof ProjectDependency) {
if (linkProjectDependency == null) {
// Subprojects cannot be dependencies of components
// TODO is there a better way to handle this?
// passing subProjectFunction: component::dependency on line 124 might look better (but be more nonsensical?)
String subprojectExternalId = dependency.getExternalId().toString();
logger.warn("Sipping subproject {}. Failed to add the subproject to the graph because subprojects cannot be dependencies of components. Please contact Synopsys support.", subprojectExternalId);
continue;
// Jake's maybe better way for now? Exposed a few issues with graph building. See IDETECT-3243
// throw new UnsupportedOperationException("Subprojects cannot be dependencies of components. The graph was incorrectly built.");
}
Project subproject = projectFromDependency(dependency);
linkProjectDependency.subProject(new Project(subproject.id()).subproject(subproject));
if (!existingSubprojects.containsKey(dependency.getExternalId())) {
addedSubprojects.add(subproject);
existingSubprojects.put(dependency.getExternalId(), subproject);
Pair<List<Project>, List<Component>> children = createAndLinkComponentsFromGraph(dependencyGraph, subproject::subproject, subproject::dependency, dependencyGraph.getChildrenForParent(dependency), existingSubprojects, existingComponents);
addedSubprojects.addAll(children.getLeft());
addedComponents.addAll(children.getRight());
}
} else {
Component component = componentFromDependency(dependency);
linkComponentDependency.dependency(new com.blackducksoftware.bdio2.model.Dependency().dependsOn(component));
if (!existingComponents.containsKey(dependency.getExternalId())) {
addedComponents.add(component);
existingComponents.put(dependency.getExternalId(), component);
Pair<List<Project>, List<Component>> children = createAndLinkComponentsFromGraph(dependencyGraph, null, component::dependency, dependencyGraph.getChildrenForParent(dependency), existingSubprojects, existingComponents);
addedSubprojects.addAll(children.getLeft());
addedComponents.addAll(children.getRight());
}
}
}
return Pair.of(addedSubprojects, addedComponents);
}
Aggregations