From a2e50ff6f79d61b6fc454ef93d6cabccdb9321c7 Mon Sep 17 00:00:00 2001 From: Nikesh kumar Date: Fri, 14 Jun 2024 10:03:54 +0530 Subject: [PATCH] fix(rest): Added code to get obligation releaseView data in project. Signed-off-by: Nikesh kumar --- .../project/ProjectController.java | 33 ++++++---- .../project/Sw360ProjectService.java | 64 +++++++++++++++++++ 2 files changed, 85 insertions(+), 12 deletions(-) diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java index 3b4e739abd..c10c2b1101 100644 --- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java +++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java @@ -2284,13 +2284,15 @@ private Map createPaginationMetadata(Pageable pageable, Map getLicenseObligations(Pageable pageable, - @Parameter(description = "Project ID.") @PathVariable("id") String id) + public ResponseEntity getLicenseObligations(Pageable pageable, + @Parameter(description = "Project ID.") @PathVariable("id") String id, + @RequestParam(value = "view", defaultValue = "false") boolean releaseView) throws TException { final User sw360User = restControllerHelper.getSw360UserFromAuthentication(); final Project sw360Project = projectService.getProjectForUserById(id, sw360User); final Map releaseIdToAcceptedCLI = Maps.newHashMap(); - List releases = new ArrayList<>();; + List releases = new ArrayList<>(); + ; ObligationList obligation = new ObligationList(); Map obligationStatusMap = Maps.newHashMap(); List releaseIds = new ArrayList<>(sw360Project.getReleaseIdToUsage().keySet()); @@ -2305,17 +2307,24 @@ public ResponseEntity getLicenseObligations(Pageable pageable, obligationStatusMap = CommonUtils.nullToEmptyMap(obligation.getLinkedObligationStatus()); releaseIdToAcceptedCLI.putAll(SW360Utils.getReleaseIdtoAcceptedCLIMappings(obligationStatusMap)); } + if (releaseView) { + final List licenseInfoWithObligations = new ArrayList<>(); + List processedLicenses = projectService.processLicenseInfoWithObligations(licenseInfoWithObligations, releaseIdToAcceptedCLI, releases, sw360User); + return new ResponseEntity<>(processedLicenses, HttpStatus.OK); + } else { + obligationStatusMap = projectService.setLicenseInfoWithObligations(obligationStatusMap, + releaseIdToAcceptedCLI, releases, sw360User); + for (Map.Entry entry : obligationStatusMap.entrySet()) { + ObligationStatusInfo statusInfo = entry.getValue(); + Set limitedSet = releaseService + .getReleasesForUserByIds(statusInfo.getReleaseIdToAcceptedCLI().keySet()); + statusInfo.setReleases(limitedSet); + } - obligationStatusMap = projectService.setLicenseInfoWithObligations(obligationStatusMap, releaseIdToAcceptedCLI, releases, sw360User); - for (Map.Entry entry : obligationStatusMap.entrySet()) { - ObligationStatusInfo statusInfo = entry.getValue(); - Set limitedSet = releaseService.getReleasesForUserByIds(statusInfo.getReleaseIdToAcceptedCLI().keySet()); - statusInfo.setReleases(limitedSet); + Map responseBody = createPaginationMetadata(pageable, obligationStatusMap); + HalResource> halObligation = new HalResource<>(responseBody); + return new ResponseEntity<>(halObligation, HttpStatus.OK); } - - Map responseBody = createPaginationMetadata(pageable, obligationStatusMap); - HalResource> halObligation = new HalResource<>(responseBody); - return new ResponseEntity<>(halObligation, HttpStatus.OK); } @PreAuthorize("hasAuthority('WRITE')") diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java index 547abc8e89..d2ba0fb84f 100644 --- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java +++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java @@ -43,6 +43,7 @@ import org.eclipse.sw360.datahandler.thrift.components.ReleaseLink; import org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult; import org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoService; +import org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseNameWithText; import org.eclipse.sw360.datahandler.thrift.licenses.LicenseService; import org.eclipse.sw360.datahandler.thrift.licenses.License; import org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseObligationsStatusInfo; @@ -84,6 +85,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -905,5 +907,67 @@ public Integer loadPreferredClearingDateLimit() { // returning default value 7 (days) if variable is not set return limit < 1 ? 7 : limit; } + + public List processLicenseInfoWithObligations( List licenseInfoWithObligations, Map releaseIdToAcceptedCLI, List releases, User user) throws TException { + ThriftClients thriftClients = new ThriftClients(); + LicenseInfoService.Iface licenseClient = thriftClients.makeLicenseInfoClient(); + + for (Release release : releases) { + List approvedCliAttachments = SW360Utils.getApprovedClxAttachmentForRelease(release); + if (approvedCliAttachments.isEmpty()) { + approvedCliAttachments = SW360Utils.getClxAttachmentForRelease(release); + } + final String releaseId = release.getId(); + + if (approvedCliAttachments.size() == 1) { + final Attachment filteredAttachment = approvedCliAttachments.get(0); + final String attachmentContentId = filteredAttachment.getAttachmentContentId(); + + if (releaseIdToAcceptedCLI.containsKey(releaseId) + && releaseIdToAcceptedCLI.get(releaseId).equals(attachmentContentId)) { + releaseIdToAcceptedCLI.remove(releaseId); + } + + try { + List licenseResults = licenseClient.getLicenseInfoForAttachment(release, + attachmentContentId, false, user); + List obligationResults = licenseClient.getObligationsForAttachment(release, + attachmentContentId, user); + + if (CommonUtils.allAreNotEmpty(licenseResults, obligationResults) + && obligationResults.get(0).getObligationsAtProjectSize() > 0) { + licenseInfoWithObligations.add(licenseClient + .createLicenseToObligationMapping(licenseResults.get(0), obligationResults.get(0))); + } + } catch (TException exception) { + log.error(String.format("Error fetching license Information for attachment: %s in release: %s", + filteredAttachment.getFilename(), releaseId), exception); + } + } + } + Predicate filterLicense = license -> (license.isSetObligationsAtProject() + && !(SW360Constants.LICENSE_NAME_UNKNOWN.equals(license.getLicenseName()) + || SW360Constants.NA.equalsIgnoreCase(license.getLicenseName()))); + + licenseInfoWithObligations.stream() + .sorted(Comparator.comparing(LicenseInfoParsingResult::getName, String.CASE_INSENSITIVE_ORDER)) + .forEach(e -> { + Set updatedLicenses = e.getLicenseInfo().getLicenseNamesWithTexts().stream() + .filter(filterLicense).map(license -> { + if (SW360Constants.LICENSE_TYPE_GLOBAL.equalsIgnoreCase(license.getType())) { + license.setType(SW360Constants.LICENSE_TYPE_GLOBAL); + } else { + license.setType(SW360Constants.LICENSE_TYPE_OTHERS); + } + return license; + }) + .sorted(Comparator.comparing(LicenseNameWithText::getType, String.CASE_INSENSITIVE_ORDER) + .thenComparing(LicenseNameWithText::getLicenseName, String.CASE_INSENSITIVE_ORDER)) + .collect(Collectors.toCollection(LinkedHashSet::new)); + e.getLicenseInfo().setLicenseNamesWithTexts(updatedLicenses); + }); + + return licenseInfoWithObligations; + } }