Skip to content

Commit 54753a8

Browse files
committed
fix(backend): set TEA distributions if deliverables present
1 parent fb206ea commit 54753a8

File tree

1 file changed

+57
-7
lines changed

1 file changed

+57
-7
lines changed

backend/src/main/java/io/reliza/service/tea/TeaTransformerService.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.net.URI;
77
import java.time.OffsetDateTime;
88
import java.time.temporal.ChronoUnit;
9+
import java.util.Collection;
910
import java.util.LinkedHashSet;
1011
import java.util.LinkedList;
1112
import java.util.List;
@@ -22,9 +23,11 @@
2223
import io.reliza.model.ArtifactData;
2324
import io.reliza.model.ArtifactData.ArtifactType;
2425
import io.reliza.model.ArtifactData.BomFormat;
26+
import io.reliza.model.ArtifactData.DigestRecord;
2527
import io.reliza.model.ArtifactData.DigestScope;
2628
import io.reliza.model.ArtifactData.StoredIn;
2729
import io.reliza.model.ComponentData;
30+
import io.reliza.model.DeliverableData;
2831
import io.reliza.model.ComponentData.ComponentType;
2932
import io.reliza.model.ParentRelease;
3033
import io.reliza.model.ReleaseData;
@@ -43,12 +46,15 @@
4346
import io.reliza.model.tea.TeaProduct;
4447
import io.reliza.model.tea.TeaProductRelease;
4548
import io.reliza.model.tea.TeaRelease;
49+
import io.reliza.model.tea.TeaReleaseDistribution;
4650
import io.reliza.model.tea.TeaTeaServerInfo;
4751
import io.reliza.service.AcollectionService;
4852
import io.reliza.service.ArtifactService;
4953
import io.reliza.service.GetComponentService;
54+
import io.reliza.service.GetDeliverableService;
5055
import io.reliza.service.SharedReleaseService;
5156
import io.reliza.service.UserService;
57+
import io.reliza.service.VariantService;
5258
import io.reliza.ws.RelizaConfigProps;
5359
import lombok.extern.slf4j.Slf4j;
5460

@@ -68,6 +74,12 @@ public class TeaTransformerService {
6874
@Autowired
6975
private AcollectionService acollectionService;
7076

77+
@Autowired
78+
private VariantService variantService;
79+
80+
@Autowired
81+
private GetDeliverableService getDeliverableService;
82+
7183
private RelizaConfigProps relizaConfigProps;
7284

7385
@Autowired
@@ -137,9 +149,40 @@ public TeaRelease transformReleaseToTea(ReleaseData rearmRD) {
137149
ComponentData cd = getComponentService.getComponentData(rearmRD.getComponent()).get();
138150
tr.setComponent(rearmRD.getComponent());
139151
tr.setComponentName(cd.getName());
152+
var distributions = gatherDistributionsPerRelease(rearmRD);
153+
tr.setDistributions(distributions);
140154
return tr;
141155
}
142156

157+
private List<TeaReleaseDistribution> gatherDistributionsPerRelease(ReleaseData rearmRD) {
158+
List<TeaReleaseDistribution> distributions = new LinkedList<>();
159+
var vd = variantService.getBaseVariantForRelease(rearmRD);
160+
if (null != vd.getOutboundDeliverables() && !vd.getOutboundDeliverables().isEmpty()) {
161+
for (UUID delUuid : vd.getOutboundDeliverables()) {
162+
var deliverableData = getDeliverableService
163+
.getDeliverableData(delUuid)
164+
.get();
165+
var trd = transformDeliverableToTeaDistribution(deliverableData);
166+
distributions.add(trd);
167+
}
168+
}
169+
return distributions;
170+
}
171+
172+
private TeaReleaseDistribution transformDeliverableToTeaDistribution (DeliverableData dd) {
173+
TeaReleaseDistribution trd = new TeaReleaseDistribution();
174+
trd.setUrl(dd.getDisplayIdentifier());
175+
trd.setDescription(dd.getNotes());
176+
trd.setIdentifiers(dd.getIdentifiers());
177+
if (null != dd.getSoftwareMetadata()) {
178+
var tcList = transformDigestRecordToTeaChecksum(dd.getSoftwareMetadata().getDigestRecords());
179+
trd.setChecksums(tcList);
180+
}
181+
// trd.setDistributionType(dd.getSoftwareMetadata().getPackageType()); TODO + refer to https://github.com/CycloneDX/transparency-exchange-api/issues/198
182+
// trd.setSignatureUrl(); // TODO
183+
return trd;
184+
}
185+
143186
public TeaComponentReleaseWithCollection transformComponentReleaseWithCollectionToTea(ReleaseData rearmRD) {
144187
TeaComponentReleaseWithCollection tcr = new TeaComponentReleaseWithCollection();
145188
TeaRelease tr = transformReleaseToTea(rearmRD);
@@ -262,6 +305,19 @@ private String resolveMediaType(BomFormat bomFormat, String initialType) {
262305
return resolvedType;
263306
}
264307

308+
private List<TeaChecksum> transformDigestRecordToTeaChecksum (Collection<DigestRecord> digestRecords) {
309+
List<TeaChecksum> tcList = new LinkedList<>();
310+
if (null != digestRecords && !digestRecords.isEmpty()) {
311+
digestRecords.stream().filter(d -> d.scope() == DigestScope.ORIGINAL_FILE).forEach(d -> {
312+
TeaChecksum tc = new TeaChecksum();
313+
tc.setAlgType(d.algo());
314+
tc.setAlgValue(d.digest());
315+
tcList.add(tc);
316+
});
317+
}
318+
return tcList;
319+
}
320+
265321
public TeaArtifact transformArtifactToTea(ArtifactData rearmAD) {
266322
TeaArtifact ta = new TeaArtifact();
267323
ta.setUuid(rearmAD.getUuid());
@@ -282,13 +338,7 @@ public TeaArtifact transformArtifactToTea(ArtifactData rearmAD) {
282338
if (optSignatureAD.isPresent()) {
283339
taf.setSignatureUrl(relizaConfigProps.getBaseuri() + "/downloadArtifact/raw/" + optSignatureAD.get().getUuid());
284340
} else taf.setSignatureUrl(null);
285-
List<TeaChecksum> tcList = new LinkedList<>();
286-
rearmAD.getDigestRecords().stream().filter(d -> d.scope() == DigestScope.ORIGINAL_FILE).forEach(d -> {
287-
TeaChecksum tc = new TeaChecksum();
288-
tc.setAlgType(d.algo());
289-
tc.setAlgValue(d.digest());
290-
tcList.add(tc);
291-
});
341+
var tcList = transformDigestRecordToTeaChecksum(rearmAD.getDigestRecords());
292342
taf.setChecksums(tcList);
293343
tafList.add(taf);
294344

0 commit comments

Comments
 (0)