Skip to content

Commit 210053c

Browse files
committed
fix(Rest): new endpoint will help to get the package details by projectId.
Signed-off-by: Nikesh kumar <kumar.nikesh@siemens.com>
1 parent c1fbd1b commit 210053c

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

rest/resource-server/src/docs/asciidoc/projects.adoc

+15-1
Original file line numberDiff line numberDiff line change
@@ -1251,4 +1251,18 @@ include::{snippets}/should_document_get_projects_by_advance_search/curl-request.
12511251
include::{snippets}/should_document_get_projects_by_advance_search/http-response.adoc[]
12521252

12531253
===== Links
1254-
include::{snippets}/should_document_get_projects_by_advance_search/links.adoc[]
1254+
include::{snippets}/should_document_get_projects_by_advance_search/links.adoc[]
1255+
1256+
[[resources-package-get-by-project]]
1257+
==== Get Package by ProjectId
1258+
1259+
A GET request is used to retrieve a package using a given projectId.
1260+
1261+
===== Request parameter
1262+
include::{snippets}/should_document_get_package_by_project_id/request-parameters.adoc[]
1263+
1264+
===== Example request
1265+
include::{snippets}/should_document_get_package_by_project_id-id/curl-request.adoc[]
1266+
1267+
===== Example response
1268+
include::{snippets}/should_document_get_package_by_project_id-id/http-response.adoc[]

rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java

+53
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@
7878
import org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatVariant;
7979
import org.eclipse.sw360.datahandler.thrift.licenses.License;
8080
import org.eclipse.sw360.datahandler.thrift.projects.*;
81+
import org.eclipse.sw360.datahandler.thrift.packages.Package;
82+
import org.eclipse.sw360.datahandler.thrift.projects.ObligationList;
83+
import org.eclipse.sw360.datahandler.thrift.projects.ObligationStatusInfo;
84+
import org.eclipse.sw360.datahandler.thrift.projects.Project;
85+
import org.eclipse.sw360.datahandler.thrift.projects.ProjectClearingState;
86+
import org.eclipse.sw360.datahandler.thrift.projects.ProjectLink;
87+
import org.eclipse.sw360.datahandler.thrift.projects.ProjectProjectRelationship;
88+
import org.eclipse.sw360.datahandler.thrift.projects.ProjectRelationship;
89+
import org.eclipse.sw360.datahandler.thrift.projects.ProjectDTO;
90+
import org.eclipse.sw360.datahandler.thrift.projects.ClearingRequest;
8191
import org.eclipse.sw360.datahandler.thrift.users.User;
8292
import org.eclipse.sw360.datahandler.thrift.users.UserGroup;
8393
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
@@ -484,6 +494,49 @@ public ResponseEntity<EntityModel<Project>> getProject(
484494
return new ResponseEntity<>(userHalResource, HttpStatus.OK);
485495
}
486496

497+
@Operation(
498+
description = "Get a package with project id.",
499+
tags = {"Projects"}
500+
)
501+
@RequestMapping(value = PROJECTS_URL + "/{id}/packages", method = RequestMethod.GET)
502+
public ResponseEntity<List<HalResource<Project>>> getPackagesByProjectId(
503+
@Parameter(description = "Project ID", example = "376576")
504+
@PathVariable("id") String id) throws TException {
505+
506+
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
507+
Project sw360Project = projectService.getProjectForUserById(id, sw360User);
508+
List<HalResource<Package>> halPackages = new ArrayList<>();
509+
if (sw360Project.getPackageIdsSize() > 0) {
510+
for (String packageId : sw360Project.getPackageIds()) {
511+
Package sw360Package = packageService.getPackageForUserById(packageId);
512+
HalResource<Package> halPackage = createHalPackage(sw360Package, sw360User);
513+
halPackages.add(halPackage);
514+
}
515+
}
516+
return new ResponseEntity(halPackages, HttpStatus.OK);
517+
}
518+
519+
private HalResource<Package> createHalPackage(Package sw360Package, User sw360User) throws TException {
520+
HalResource<Package> halPackage = new HalResource<>(sw360Package);
521+
User packageCreator = restControllerHelper.getUserByEmail(sw360Package.getCreatedBy());
522+
String linkedRelease = sw360Package.getReleaseId();
523+
524+
restControllerHelper.addEmbeddedUser(halPackage, packageCreator, "createdBy");
525+
if (CommonUtils.isNotNullEmptyOrWhitespace(linkedRelease)) {
526+
Release release = releaseService.getReleaseForUserById(linkedRelease, sw360User);
527+
528+
if (release != null) {
529+
restControllerHelper.addEmbeddedSingleRelease(halPackage, release);
530+
} else {
531+
log.warn("Release not found for ID: {}", linkedRelease);
532+
}
533+
}
534+
if (sw360Package.getModifiedBy() != null) {
535+
restControllerHelper.addEmbeddedModifiedBy(halPackage, sw360User, "modifiedBy");
536+
}
537+
return halPackage;
538+
}
539+
487540
@Operation(
488541
description = "Get linked projects of a single project.",
489542
tags = {"Projects"}

rest/resource-server/src/test/java/org/eclipse/sw360/rest/resourceserver/restdocs/ProjectSpecTest.java

+32
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ public void before() throws TException, IOException {
275275
project.setSpecialRisks3rdParty("Lorem Ipsum");
276276
project.setLicenseInfoHeaderText("Lorem Ipsum");
277277
project.setDeliveryChannels("Lorem Ipsum");
278+
project.setPackageIds(new HashSet<>(Arrays.asList("pkg-001", "pkg-002", "pkg-003")));
278279
project.setVendor(new Vendor());
279280
project.setRemarksAdditionalRequirements("Lorem Ipsum");
280281
ReleaseClearingStateSummary clearingCount = new ReleaseClearingStateSummary();
@@ -3242,4 +3243,35 @@ public void should_document_get_projects_by_advance_search() throws Exception {
32423243
fieldWithPath("page.number").description("Number of the current page")
32433244
)));
32443245
}
3246+
3247+
@Test
3248+
public void should_document_get_package_by_project_id() throws Exception {
3249+
Set<String> licenseIds = new HashSet<>();
3250+
licenseIds.add("MIT");
3251+
licenseIds.add("GPL");
3252+
3253+
Package packages = new Package("angular-sanitize", "1.8.2", "pkg:npm/angular-sanitize@1.8.2",
3254+
CycloneDxComponentType.FRAMEWORK)
3255+
.setId("122357345")
3256+
.setCreatedBy("admin@sw360.org")
3257+
.setCreatedOn("2023-01-02")
3258+
.setVcs("git+https://github.com/angular/angular.js.git")
3259+
.setHomepageUrl("http://angularjs.org")
3260+
.setLicenseIds(licenseIds)
3261+
.setReleaseId("12345678")
3262+
.setPackageManager(PackageManager.NPM)
3263+
.setDescription("Sanitizes an html string by stripping all potentially dangerous tokens.");
3264+
3265+
given(this.packageServiceMock.getPackageForUserById(eq(packages.getId()))).willReturn(packages);
3266+
3267+
Project sw360Project = new Project();
3268+
sw360Project.setId(project.getId());
3269+
sw360Project.setPackageIds(new HashSet<>(Collections.singleton("122357345")));
3270+
3271+
given(this.projectServiceMock.getProjectForUserById(eq(project.getId()), any())).willReturn(sw360Project);
3272+
3273+
mockMvc.perform(get("/api/projects/" + project.getId() + "/packages")
3274+
.header("Authorization", TestHelper.generateAuthHeader(testUserId, testUserPassword))
3275+
.accept(MediaTypes.HAL_JSON)).andExpect(status().isOk());
3276+
}
32453277
}

0 commit comments

Comments
 (0)