Skip to content

Commit

Permalink
fix(Rest): new endpoint will help to get the package details by proje…
Browse files Browse the repository at this point in the history
…ctId.

Signed-off-by: Nikesh kumar <[email protected]>
  • Loading branch information
nikkuma7 committed Jan 30, 2025
1 parent 975e30f commit 021356c
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 0 deletions.
14 changes: 14 additions & 0 deletions rest/resource-server/src/docs/asciidoc/projects.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1233,3 +1233,17 @@ include::{snippets}/should_document_get_export_project_create_clearing_request/c

===== Example response
include::{snippets}/should_document_get_export_project_create_clearing_request/http-response.adoc[]

[[resources-package-get-by-project]]
==== Get Package by ProjectId

A GET request is used to retrieve a package using a given projectId.

===== Request parameter
include::{snippets}/should_document_get_package_by_project_id/request-parameters.adoc[]

===== Example request
include::{snippets}/should_document_get_package_by_project_id-id/curl-request.adoc[]

===== Example response
include::{snippets}/should_document_get_package_by_project_id-id/http-response.adoc[]
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
import org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatInfo;
import org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatVariant;
import org.eclipse.sw360.datahandler.thrift.licenses.License;
import org.eclipse.sw360.datahandler.thrift.packages.Package;
import org.eclipse.sw360.datahandler.thrift.projects.ObligationList;
import org.eclipse.sw360.datahandler.thrift.projects.ObligationStatusInfo;
import org.eclipse.sw360.datahandler.thrift.projects.Project;
Expand Down Expand Up @@ -466,6 +467,49 @@ public ResponseEntity<EntityModel<Project>> getProject(
return new ResponseEntity<>(userHalResource, HttpStatus.OK);
}

@Operation(
description = "Get a package with project id.",
tags = {"Projects"}
)
@RequestMapping(value = PROJECTS_URL + "/{id}/packages", method = RequestMethod.GET)
public ResponseEntity<List<HalResource<Project>>> getPackagesByProjectId(
@Parameter(description = "Project ID", example = "376576")
@PathVariable("id") String id) throws TException {

User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Project sw360Project = projectService.getProjectForUserById(id, sw360User);
List<HalResource<Package>> halPackages = new ArrayList<>();
if (sw360Project.getPackageIdsSize() > 0) {
for (String packageId : sw360Project.getPackageIds()) {
Package sw360Package = packageService.getPackageForUserById(packageId);
HalResource<Package> halPackage = createHalPackage(sw360Package, sw360User);
halPackages.add(halPackage);
}
}
return new ResponseEntity(halPackages, HttpStatus.OK);
}

private HalResource<Package> createHalPackage(Package sw360Package, User sw360User) throws TException {
HalResource<Package> halPackage = new HalResource<>(sw360Package);
User packageCreator = restControllerHelper.getUserByEmail(sw360Package.getCreatedBy());
String linkedRelease = sw360Package.getReleaseId();

restControllerHelper.addEmbeddedUser(halPackage, packageCreator, "createdBy");
if (CommonUtils.isNotNullEmptyOrWhitespace(linkedRelease)) {
Release release = releaseService.getReleaseForUserById(linkedRelease, sw360User);

if (release != null) {
restControllerHelper.addEmbeddedSingleRelease(halPackage, release);
} else {
log.warn("Release not found for ID: {}", linkedRelease);
}
}
if (sw360Package.getModifiedBy() != null) {
restControllerHelper.addEmbeddedModifiedBy(halPackage, sw360User, "modifiedBy");
}
return halPackage;
}

@Operation(
description = "Get linked projects of a single project.",
tags = {"Projects"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ public void before() throws TException, IOException {
project.setSpecialRisks3rdParty("Lorem Ipsum");
project.setLicenseInfoHeaderText("Lorem Ipsum");
project.setDeliveryChannels("Lorem Ipsum");
project.setPackageIds(new HashSet<>(Arrays.asList("pkg-001", "pkg-002", "pkg-003")));
project.setVendor(new Vendor());
project.setRemarksAdditionalRequirements("Lorem Ipsum");
ReleaseClearingStateSummary clearingCount = new ReleaseClearingStateSummary();
Expand Down Expand Up @@ -3200,4 +3201,35 @@ public void should_document_get_project_release_with_ecc_spreadsheet() throws Ex
parameterWithName("projectId").description("Id of a project"))
));
}

@Test
public void should_document_get_package_by_project_id() throws Exception {
Set<String> licenseIds = new HashSet<>();
licenseIds.add("MIT");
licenseIds.add("GPL");

Package packages = new Package("angular-sanitize", "1.8.2", "pkg:npm/[email protected]",
CycloneDxComponentType.FRAMEWORK)
.setId("122357345")
.setCreatedBy("[email protected]")
.setCreatedOn("2023-01-02")
.setVcs("git+https://github.com/angular/angular.js.git")
.setHomepageUrl("http://angularjs.org")
.setLicenseIds(licenseIds)
.setReleaseId("12345678")
.setPackageManager(PackageManager.NPM)
.setDescription("Sanitizes an html string by stripping all potentially dangerous tokens.");

given(this.packageServiceMock.getPackageForUserById(eq(packages.getId()))).willReturn(packages);

Project sw360Project = new Project();
sw360Project.setId(project.getId());
sw360Project.setPackageIds(new HashSet<>(Collections.singleton("122357345")));

given(this.projectServiceMock.getProjectForUserById(eq(project.getId()), any())).willReturn(sw360Project);

mockMvc.perform(get("/api/projects/" + project.getId() + "/packages")
.header("Authorization", TestHelper.generateAuthHeader(testUserId, testUserPassword))
.accept(MediaTypes.HAL_JSON)).andExpect(status().isOk());
}
}

0 comments on commit 021356c

Please sign in to comment.