Skip to content

Commit 23afb5c

Browse files
committed
Fix component properties not being cloned
Signed-off-by: nscuro <[email protected]>
1 parent 965e09c commit 23afb5c

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.dependencytrack.model.AnalysisComment;
4646
import org.dependencytrack.model.Classifier;
4747
import org.dependencytrack.model.Component;
48+
import org.dependencytrack.model.ComponentProperty;
4849
import org.dependencytrack.model.ConfigPropertyConstants;
4950
import org.dependencytrack.model.FindingAttribution;
5051
import org.dependencytrack.model.PolicyViolation;
@@ -745,6 +746,24 @@ public Project clone(
745746
if (sourceComponents != null) {
746747
for (final Component sourceComponent : sourceComponents) {
747748
final Component clonedComponent = cloneComponent(sourceComponent, project, false);
749+
750+
if (sourceComponent.getProperties() != null && !sourceComponent.getProperties().isEmpty()) {
751+
final var clonedProperties = new ArrayList<ComponentProperty>(sourceComponent.getProperties().size());
752+
for (final ComponentProperty sourceProperty : sourceComponent.getProperties()) {
753+
final ComponentProperty clonedProperty = new ComponentProperty();
754+
clonedProperty.setComponent(clonedComponent);
755+
clonedProperty.setPropertyType(sourceProperty.getPropertyType());
756+
clonedProperty.setGroupName(sourceProperty.getGroupName());
757+
clonedProperty.setPropertyName(sourceProperty.getPropertyName());
758+
clonedProperty.setPropertyValue(sourceProperty.getPropertyValue());
759+
clonedProperty.setDescription(sourceProperty.getDescription());
760+
clonedProperties.add(clonedProperty);
761+
}
762+
763+
persist(clonedProperties);
764+
clonedComponent.setProperties(clonedProperties);
765+
}
766+
748767
// Add vulnerabilties and finding attribution from the source component to the cloned component
749768
for (Vulnerability vuln : sourceComponent.getVulnerabilities()) {
750769
final FindingAttribution sourceAttribution = this.getFindingAttribution(vuln, sourceComponent);

src/test/java/org/dependencytrack/resources/v1/ProjectResourceTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.dependencytrack.model.AnalysisState;
4040
import org.dependencytrack.model.Component;
4141
import org.dependencytrack.model.ComponentIdentity;
42+
import org.dependencytrack.model.ComponentProperty;
4243
import org.dependencytrack.model.ConfigPropertyConstants;
4344
import org.dependencytrack.model.ExternalReference;
4445
import org.dependencytrack.model.OrganizationalContact;
@@ -1919,6 +1920,14 @@ public void cloneProjectTest() {
19191920
componentA.setSupplier(componentSupplier);
19201921
qm.persist(componentA);
19211922

1923+
final var componentProperty = new ComponentProperty();
1924+
componentProperty.setComponent(componentA);
1925+
componentProperty.setGroupName("groupName");
1926+
componentProperty.setPropertyName("propertyName");
1927+
componentProperty.setPropertyValue("propertyValue");
1928+
componentProperty.setPropertyType(PropertyType.STRING);
1929+
qm.persist(componentProperty);
1930+
19221931
final var componentB = new Component();
19231932
componentB.setProject(project);
19241933
componentB.setName("acme-lib-b");
@@ -2032,6 +2041,13 @@ public void cloneProjectTest() {
20322041
]
20332042
""");
20342043

2044+
assertThat(clonedComponent.getProperties()).satisfiesExactly(property -> {
2045+
assertThat(property.getGroupName()).isEqualTo("groupName");
2046+
assertThat(property.getPropertyName()).isEqualTo("propertyName");
2047+
assertThat(property.getPropertyValue()).isEqualTo("propertyValue");
2048+
assertThat(property.getPropertyType()).isEqualTo(PropertyType.STRING);
2049+
});
2050+
20352051
assertThat(qm.getAllVulnerabilities(clonedComponent)).containsOnly(vuln);
20362052

20372053
assertThat(qm.getAnalysis(clonedComponent, vuln)).satisfies(clonedAnalysis -> {

0 commit comments

Comments
 (0)