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 authored and GMishx committed Feb 5, 2025
1 parent fbea70a commit 48f9159
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 1 deletion.
16 changes: 15 additions & 1 deletion rest/resource-server/src/docs/asciidoc/projects.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1251,4 +1251,18 @@ include::{snippets}/should_document_get_projects_by_advance_search/curl-request.
include::{snippets}/should_document_get_projects_by_advance_search/http-response.adoc[]

===== Links
include::{snippets}/should_document_get_projects_by_advance_search/links.adoc[]
include::{snippets}/should_document_get_projects_by_advance_search/links.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 @@ -78,6 +78,16 @@
import org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatVariant;
import org.eclipse.sw360.datahandler.thrift.licenses.License;
import org.eclipse.sw360.datahandler.thrift.projects.*;
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;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectClearingState;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectLink;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectProjectRelationship;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectRelationship;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectDTO;
import org.eclipse.sw360.datahandler.thrift.projects.ClearingRequest;
import org.eclipse.sw360.datahandler.thrift.users.User;
import org.eclipse.sw360.datahandler.thrift.users.UserGroup;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
Expand All @@ -98,6 +108,7 @@
import org.eclipse.sw360.rest.resourceserver.release.ReleaseController;
import org.eclipse.sw360.rest.resourceserver.release.Sw360ReleaseService;
import org.eclipse.sw360.rest.resourceserver.user.Sw360UserService;
import org.eclipse.sw360.rest.resourceserver.vendor.Sw360VendorService;
import org.eclipse.sw360.rest.resourceserver.vulnerability.Sw360VulnerabilityService;
import org.eclipse.sw360.rest.resourceserver.vulnerability.VulnerabilityController;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -226,6 +237,9 @@ public class ProjectController implements RepresentationModelProcessor<Repositor
@NonNull
private final Sw360ModerationRequestService moderationRequestService;

@NonNull
private final Sw360VendorService vendorService;

@NonNull
private final com.fasterxml.jackson.databind.Module sw360Module;

Expand Down Expand Up @@ -484,6 +498,58 @@ 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");
}
if (sw360Package.getVendorId() != null) {
Vendor vendor = vendorService.getVendorById(sw360Package.getVendorId());
if (vendor != null) {
Vendor vendorHalResource = restControllerHelper.convertToEmbeddedVendor(vendor);
halPackage.addEmbeddedResource("sw360:vendors", vendorHalResource);
} else {
log.warn("Vendor not found for ID: {}", sw360Package.getVendorId());
}
}
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 @@ -276,6 +276,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 @@ -3250,4 +3251,35 @@ public void should_document_get_projects_by_advance_search() throws Exception {
fieldWithPath("page.number").description("Number of the current page")
)));
}

@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 48f9159

Please sign in to comment.