Skip to content

Commit 2c48356

Browse files
committed
Removed setAuthors, moved manufacurer to component section
Signed-off-by: Björn Kornefalk <[email protected]>
1 parent 3aebea0 commit 2c48356

File tree

5 files changed

+191
-44
lines changed

5 files changed

+191
-44
lines changed

src/main/java/org/cyclonedx/maven/BaseCycloneDxMojo.java

+30-30
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.cyclonedx.maven;
2020

21+
import java.util.stream.Collectors;
2122
import org.apache.commons.io.FileUtils;
2223
import org.apache.maven.artifact.Artifact;
2324
import org.apache.maven.model.Developer;
@@ -355,26 +356,28 @@ public void execute() throws MojoExecutionException {
355356
if (detectUnusedForOptionalScope) {
356357
metadata.addProperty(newProperty("maven.optional.unused", Boolean.toString(detectUnusedForOptionalScope)));
357358
}
358-
359-
List<Developer> developers = project.getDevelopers();
360-
Organization organization = project.getOrganization();
361-
if (organization != null || (developers != null && !developers.isEmpty())) {
362-
metadata.setManufacturer(createManufacturer(organization, developers));
363-
}
364-
if ((developers != null && !developers.isEmpty())) {
365-
metadata.setAuthors(createListOfAuthors(null, developers));
366-
}
367359
}
368360

369361
final Component rootComponent = metadata.getComponent();
370362
componentMap.remove(rootComponent.getPurl());
363+
setManufacturer(project, rootComponent);
371364

372365
projectDependenciesConverter.cleanupBomDependencies(metadata, componentMap, dependencyMap);
373366

374367
generateBom(analysis, metadata, new ArrayList<>(componentMap.values()), new ArrayList<>(dependencyMap.values()));
375368
}
376369
}
377370

371+
protected void setManufacturer(MavenProject mavenProject, Component projectBomComponent) {
372+
getLog().debug("setManufacturer for " + mavenProject.getGroupId() + ":" +
373+
mavenProject.getArtifactId() + ":" + mavenProject.getVersion());
374+
List<Developer> developers = mavenProject.getDevelopers();
375+
Organization organization = mavenProject.getOrganization();
376+
if (organization != null || (developers != null && !developers.isEmpty())) {
377+
projectBomComponent.setManufacturer(createManufacturer(organization, developers));
378+
}
379+
}
380+
378381
OrganizationalEntity createManufacturer(Organization organization, List<Developer> developers) {
379382
OrganizationalEntity manufacturer = new OrganizationalEntity();
380383
if (organization != null) {
@@ -386,13 +389,23 @@ OrganizationalEntity createManufacturer(Organization organization, List<Develope
386389
}
387390
}
388391
if (developers != null) {
389-
addContacts(manufacturer, developers);
392+
DeveloperInformation information = createListOfContacts(developers);
393+
if (!information.getContacts().isEmpty()) {
394+
manufacturer.setContacts(information.getContacts());
395+
}
396+
if (manufacturer.getName() == null) {
397+
manufacturer.setName(information.getOrganization());
398+
}
399+
for (String url : information.getUrls()) {
400+
addUrl(manufacturer, url);
401+
}
390402
}
403+
getLog().debug("Set manufacturer information name=" + manufacturer.getName());
391404
return manufacturer;
392405
}
393406

394-
List<OrganizationalContact> createListOfAuthors(OrganizationalEntity manufacturer, List<Developer> developers) {
395-
List<OrganizationalContact> list = new ArrayList<>();
407+
DeveloperInformation createListOfContacts(List<Developer> developers) {
408+
DeveloperInformation developerInformation = new DeveloperInformation();
396409
for (Developer developer : developers) {
397410
OrganizationalContact contact = new OrganizationalContact();
398411
if (isNotNullOrEmpty(developer.getName())) {
@@ -401,25 +414,12 @@ List<OrganizationalContact> createListOfAuthors(OrganizationalEntity manufacture
401414
if (isNotNullOrEmpty(developer.getEmail())) {
402415
contact.setEmail(developer.getEmail());
403416
}
404-
if (manufacturer != null) {
405-
if (isNullOrEmpty(manufacturer.getName()) && isNotNullOrEmpty(developer.getOrganization())) {
406-
manufacturer.setName(developer.getOrganization());
407-
}
408-
if (isNotNullOrEmpty(developer.getOrganizationUrl())) {
409-
addUrl(manufacturer, developer.getOrganizationUrl());
410-
}
411-
if (isNotNullOrEmpty(developer.getUrl())) {
412-
addUrl(manufacturer, developer.getUrl());
413-
}
414-
}
415-
list.add(contact);
417+
developerInformation.addOrganizationalContact(contact);
418+
developerInformation.setOrganization(developer.getOrganization());
419+
developerInformation.addUrl(developer.getOrganizationUrl());
420+
developerInformation.addUrl(developer.getUrl());
416421
}
417-
return list;
418-
}
419-
420-
421-
void addContacts(OrganizationalEntity manufacturer, List<Developer> developers) {
422-
manufacturer.setContacts(createListOfAuthors(manufacturer, developers));
422+
return developerInformation;
423423
}
424424

425425
void addUrl(OrganizationalEntity manufacturer, String url) {

src/main/java/org/cyclonedx/maven/CycloneDxAggregateMojo.java

+1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ protected String extractComponentsAndDependencies(final Set<String> topLevelComp
129129
final Map<String, Dependency> projectDependencies = bomDependencies.getDependencies();
130130

131131
final Component projectBomComponent = convertMavenDependency(mavenProject.getArtifact());
132+
setManufacturer(mavenProject, projectBomComponent);
132133
components.put(projectBomComponent.getPurl(), projectBomComponent);
133134
topLevelComponents.add(projectBomComponent.getPurl());
134135

src/main/java/org/cyclonedx/maven/CycloneDxPackageMojo.java

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ protected String extractComponentsAndDependencies(Set<String> topLevelComponents
6868

6969
final Component projectBomComponent = convertMavenDependency(mavenProject.getArtifact());
7070
components.put(projectBomComponent.getPurl(), projectBomComponent);
71+
setManufacturer(mavenProject, projectBomComponent);
7172
topLevelComponents.add(projectBomComponent.getPurl());
7273

7374
populateComponents(topLevelComponents, components, bomDependencies.getArtifacts(), null);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) Giesecke+Devrient Mobile Security GmbH 2018-2024
3+
*/
4+
package org.cyclonedx.maven;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import org.cyclonedx.model.OrganizationalContact;
9+
10+
/**
11+
* Help class for parse a list of developers
12+
*/
13+
class DeveloperInformation {
14+
15+
private final List<OrganizationalContact> contacts = new ArrayList<>();
16+
private String organization;
17+
private final List<String> urls = new ArrayList<>();
18+
19+
/**
20+
* Add contact information
21+
*
22+
* @param contact The contact
23+
*/
24+
void addOrganizationalContact(OrganizationalContact contact) {
25+
contacts.add(contact);
26+
}
27+
28+
/**
29+
* If Maven section "<organization>" is missing, see if we can find any organization information from
30+
* a developers section
31+
* @param organization The organization name
32+
*/
33+
void setOrganization(String organization) {
34+
if (this.organization == null && organization != null) {
35+
this.organization = organization;
36+
}
37+
}
38+
39+
/**
40+
* Add a defined url
41+
* @param url The url
42+
*/
43+
void addUrl(String url) {
44+
if (url != null) {
45+
urls.add(url);
46+
}
47+
}
48+
49+
/**
50+
* @return List of contacts
51+
*/
52+
public List<OrganizationalContact> getContacts() {
53+
return contacts;
54+
}
55+
56+
/**
57+
* @return First organization name if found
58+
*/
59+
public String getOrganization() {
60+
return organization;
61+
}
62+
63+
/**
64+
* @return List of configured urls
65+
*/
66+
public List<String> getUrls() {
67+
return urls;
68+
}
69+
}

src/test/java/org/cyclonedx/maven/BaseCycloneDxMojoTest.java

+90-14
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.util.Map;
88
import java.util.Set;
99
import org.apache.maven.model.Developer;
10+
import org.apache.maven.model.Organization;
11+
import org.apache.maven.project.MavenProject;
1012
import org.cyclonedx.model.Component;
1113
import org.cyclonedx.model.Dependency;
1214
import org.cyclonedx.model.OrganizationalContact;
@@ -30,10 +32,9 @@ protected String extractComponentsAndDependencies(Set<String> topLevelComponents
3032
}
3133

3234
@Test
33-
@DisplayName("")
34-
void createListOfAuthors() {
35+
@DisplayName("Using developers information only")
36+
void setManufacturer1() {
3537
BaseCycloneDxMojoImpl mojo = new BaseCycloneDxMojoImpl();
36-
OrganizationalEntity manufacturer = new OrganizationalEntity();
3738
List<Developer> developers = new ArrayList<>();
3839
Developer developer = new Developer();
3940
developer.setName("Developer");
@@ -47,21 +48,96 @@ void createListOfAuthors() {
4748
developer = new Developer();
4849
developer.setOrganizationUrl("http://foo.com");
4950
developers.add(developer);
50-
List<OrganizationalContact> listOfAuthors = mojo.createListOfAuthors(manufacturer, developers);
51-
assertNotNull(listOfAuthors);
52-
assertEquals(4, listOfAuthors.size());
53-
assertEquals("Developer", listOfAuthors.get(0).getName());
51+
Component projectBomComponent = new Component();
52+
MavenProject mavenProject = new MavenProject();
53+
mavenProject.setDevelopers(developers);
54+
mojo.setManufacturer(mavenProject, projectBomComponent);
55+
OrganizationalEntity manufacturer = projectBomComponent.getManufacturer();
56+
assertNotNull(manufacturer);
57+
assertEquals(4, manufacturer.getContacts().size());
58+
assertEquals("Developer", manufacturer.getContacts().get(0).getName());
59+
assertEquals("My Organization", manufacturer.getName());
5460
}
5561

5662
@Test
57-
@DisplayName("Verify addContacts")
58-
void addContacts() {
63+
@DisplayName("Using developers information with empty organization")
64+
void setManufacturer2() {
5965
BaseCycloneDxMojoImpl mojo = new BaseCycloneDxMojoImpl();
60-
OrganizationalEntity manufacturer = new OrganizationalEntity();
61-
List<Developer > developers = new ArrayList<>();
62-
mojo.addContacts(manufacturer, developers);
63-
assertNotNull(manufacturer.getContacts());
64-
assertTrue(manufacturer.getContacts().isEmpty());
66+
List<Developer> developers = new ArrayList<>();
67+
Developer developer = new Developer();
68+
developer.setName("Developer");
69+
developers.add(developer);
70+
developer = new Developer();
71+
developer.setEmail("[email protected]");
72+
developers.add(developer);
73+
developer = new Developer();
74+
developer.setOrganization("My Organization");
75+
developers.add(developer);
76+
developer = new Developer();
77+
developer.setOrganizationUrl("http://foo.com");
78+
developers.add(developer);
79+
Component projectBomComponent = new Component();
80+
MavenProject mavenProject = new MavenProject();
81+
mavenProject.setDevelopers(developers);
82+
mavenProject.setOrganization(new Organization());
83+
mojo.setManufacturer(mavenProject, projectBomComponent);
84+
OrganizationalEntity manufacturer = projectBomComponent.getManufacturer();
85+
assertNotNull(manufacturer);
86+
assertEquals(4, manufacturer.getContacts().size());
87+
assertEquals("Developer", manufacturer.getContacts().get(0).getName());
88+
assertEquals("My Organization", manufacturer.getName());
89+
}
90+
91+
@Test
92+
@DisplayName("Using developers and organization information")
93+
void setManufacturer3() {
94+
BaseCycloneDxMojoImpl mojo = new BaseCycloneDxMojoImpl();
95+
96+
MavenProject mavenProject = new MavenProject();
97+
List<Developer> developers = new ArrayList<>();
98+
Developer developer = new Developer();
99+
developer.setName("Developer 2");
100+
developer.setEmail("[email protected]");
101+
developer.setOrganization("My Organization");
102+
developer.setOrganizationUrl("http://foo.com");
103+
developers.add(developer);
104+
mavenProject.setDevelopers(developers);
105+
106+
Organization organization = new Organization();
107+
organization.setName("My Company");
108+
organization.setUrl("http://example.com");
109+
mavenProject.setOrganization(organization);
110+
111+
Component projectBomComponent = new Component();
112+
mojo.setManufacturer(mavenProject, projectBomComponent);
113+
OrganizationalEntity manufacturer = projectBomComponent.getManufacturer();
114+
assertNotNull(manufacturer);
115+
assertEquals(1, manufacturer.getContacts().size());
116+
assertEquals("Developer 2", manufacturer.getContacts().get(0).getName());
117+
assertEquals("My Company", manufacturer.getName());
118+
}
119+
120+
@Test
121+
@DisplayName("Using organization information only")
122+
void setManufacturer4() {
123+
BaseCycloneDxMojoImpl mojo = new BaseCycloneDxMojoImpl();
124+
125+
MavenProject mavenProject = new MavenProject();
126+
List<Developer> developers = new ArrayList<>();
127+
Organization organization = new Organization();
128+
organization.setName("My Organization");
129+
organization.setUrl("http://example.org");
130+
mavenProject.setOrganization(organization);
131+
132+
mavenProject.setDevelopers(developers);
133+
mavenProject.setOrganization(organization);
134+
135+
Component projectBomComponent = new Component();
136+
mojo.setManufacturer(mavenProject, projectBomComponent);
137+
OrganizationalEntity manufacturer = projectBomComponent.getManufacturer();
138+
assertNotNull(manufacturer);
139+
assertNull(manufacturer.getContacts());
140+
assertEquals("My Organization", manufacturer.getName());
65141
}
66142

67143
@Test

0 commit comments

Comments
 (0)