Skip to content

Commit

Permalink
Fix(package): Fix issues api for package
Browse files Browse the repository at this point in the history
- Cannot unlink orphan packages from the project
- Cannot link a package to a release without any package
- Handle message when package with same purl already exists

Signed-off-by: tuannn2 <tuan2.nguyennhu@toshiba.co.jp>
  • Loading branch information
tuannn2 committed Jan 11, 2024
1 parent 89a75f8 commit d9fce21
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,8 @@ public AddDocumentRequestSummary addPackage(Package pkg, User user) throws SW360

if (duplicatePackagesByPurl.size() > 0) {
final AddDocumentRequestSummary addDocumentRequestSummary = new AddDocumentRequestSummary()
.setRequestStatus(AddDocumentRequestStatus.DUPLICATE);
.setRequestStatus(AddDocumentRequestStatus.DUPLICATE)
.setMessage(SW360Constants.DUPLICATE_PACKAGE_BY_PURL);
if(duplicatePackagesByPurl.size() == 1){
addDocumentRequestSummary.setId(duplicatePackagesByPurl.get(0).getId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -805,7 +805,9 @@ private boolean isLinkedReleasesUpdateFromLinkedPackagesFailed(Project updatedPr
PackageService.Iface packageClient = new ThriftClients().makePackageClient();
List<Package> removedPackages = packageClient.getPackageWithReleaseByPackageIds(unlinkedPacakgeIds);

Map<String, Set<String>> releaseIdToPackageIdsMap = removedPackages.stream().map(Package::getRelease)
Map<String, Set<String>> releaseIdToPackageIdsMap = removedPackages.stream()
.filter(packageFilter -> packageFilter.getRelease() != null)
.map(Package::getRelease)
.filter(rel -> CommonUtils.isNotEmpty(rel.getPackageIds()))
.map(rel -> new AbstractMap.SimpleEntry<>(rel.getId(), rel.getPackageIds()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldVal, newVal) -> newVal));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public class SW360Constants {
public static final String NULL_STRING = "null";
public static final String PACKAGE_URL = "package-url";
public static final String PURL_ID = "purl.id";
public static final String DUPLICATE_PACKAGE_BY_PURL = "duplicatePackagesByPurl";
public static final String XML_FILE_EXTENSION = "xml";
public static final String JSON_FILE_EXTENSION = "json";
public static final String PROJECT_IDS = "projectIds";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.eclipse.sw360.datahandler.common.CommonUtils;
import org.eclipse.sw360.datahandler.common.SW360Constants;
import org.eclipse.sw360.datahandler.couchdb.lucene.LuceneAwareDatabaseConnector;
import org.eclipse.sw360.datahandler.thrift.AddDocumentRequestStatus;
import org.eclipse.sw360.datahandler.thrift.AddDocumentRequestSummary;
Expand Down Expand Up @@ -54,6 +55,9 @@ public Package createPackage(Package pkg, User sw360User) throws TException {
pkg.setId(documentRequestSummary.getId());
pkg.setCreatedBy(sw360User.getEmail());
return pkg;
} else if (documentRequestSummary.getRequestStatus() == AddDocumentRequestStatus.DUPLICATE
&& documentRequestSummary.getMessage().equals(SW360Constants.DUPLICATE_PACKAGE_BY_PURL) ) {
throw new DataIntegrityViolationException("sw360 package with same purl '" + pkg.getPurl() + "' already exists.");
} else if (documentRequestSummary.getRequestStatus() == AddDocumentRequestStatus.DUPLICATE) {
throw new DataIntegrityViolationException("sw360 package with same name and version '" + pkg.getName() + "' already exists.");
} else if (documentRequestSummary.getRequestStatus() == AddDocumentRequestStatus.INVALID_INPUT) {
Expand Down Expand Up @@ -106,6 +110,15 @@ public Package getPackageForUserById(String id) throws TException {
}
}

public boolean validatePackageIds(Set<String> packageIds) throws TException {
for (String id: packageIds) {
if (null == getPackageForUserById(id)) {
return false;
}
}
return true;
}

public List<Package> getPackagesForUser() throws TException {
PackageService.Iface sw360PackageClient = getThriftPackageClient();
return sw360PackageClient.getAllPackages();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,9 @@ public ResponseEntity<?> linkPackages(
)
@RequestBody Set<String> packagesInRequestBody
) throws URISyntaxException, TException {
if(!packageService.validatePackageIds(packagesInRequestBody)){
return new ResponseEntity<>("Package ID invalid! ", HttpStatus.NOT_FOUND);
}
RequestStatus linkPackageStatus = linkOrUnlinkPackages(id, packagesInRequestBody, true);
if (linkPackageStatus == RequestStatus.SENT_TO_MODERATOR) {
return new ResponseEntity<>(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
Expand All @@ -702,6 +705,9 @@ public ResponseEntity<?> patchPackages(
)
@RequestBody Set<String> packagesInRequestBody
) throws URISyntaxException, TException {
if(!packageService.validatePackageIds(packagesInRequestBody)){
return new ResponseEntity<>("Package ID invalid! ", HttpStatus.NOT_FOUND);
}
RequestStatus patchPackageStatus = linkOrUnlinkPackages(id, packagesInRequestBody, false);
if (patchPackageStatus == RequestStatus.SENT_TO_MODERATOR) {
return new ResponseEntity<>(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1050,6 +1050,9 @@ public ResponseEntity<?> linkPackages(
@Parameter(description = "The package IDs to be linked.")
@RequestBody Set<String> packagesInRequestBody
) throws URISyntaxException, TException {
if(!packageService.validatePackageIds(packagesInRequestBody)){
return new ResponseEntity<>("Package ID invalid! ", HttpStatus.NOT_FOUND);
}
RequestStatus linkPackageStatus = linkOrUnlinkPackages(id, packagesInRequestBody, true);
if (linkPackageStatus == RequestStatus.SENT_TO_MODERATOR) {
return new ResponseEntity<>(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
Expand Down Expand Up @@ -1088,6 +1091,9 @@ public ResponseEntity<?> unlinkPackages(
@Parameter(description = "The package IDs to be linked.")
@RequestBody Set<String> packagesInRequestBody
) throws URISyntaxException, TException {
if(!packageService.validatePackageIds(packagesInRequestBody)){
return new ResponseEntity<>("Package ID invalid! ", HttpStatus.NOT_FOUND);
}
RequestStatus unlinkPackageStatus = linkOrUnlinkPackages(id, packagesInRequestBody, false);
if (unlinkPackageStatus == RequestStatus.SENT_TO_MODERATOR) {
return new ResponseEntity<>(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
Expand Down Expand Up @@ -1275,9 +1281,11 @@ private RequestStatus linkOrUnlinkPackages(String id, Set<String> packagesInRequ
throws URISyntaxException, TException {
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Release release = releaseService.getReleaseForUserById(id, sw360User);
Set<String> packageIds = new HashSet<>();
Set<String> packageIds;
packageIds = release.getPackageIds();

if (CommonUtils.isNullOrEmptyCollection(packageIds)) {
packageIds = new HashSet<>();
}
if (link) {
packageIds.addAll(packagesInRequestBody);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ public void before() throws TException, IOException {

given(this.packageServiceMock.getPackageForUserById(eq(package1.getId()))).willReturn(package1);
given(this.packageServiceMock.getPackageForUserById(eq(package2.getId()))).willReturn(package2);
given(this.packageServiceMock.validatePackageIds(any())).willReturn(true);

Set<String> linkedPackages = new HashSet<>();
linkedPackages.add(package1.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ public void before() throws TException, IOException {
.setDescription("Sanitizes an html string by stripping all potentially dangerous tokens.");

given(this.packageServiceMock.getPackageForUserById(eq(package1.getId()))).willReturn(package1);
given(this.packageServiceMock.validatePackageIds(any())).willReturn(true);

Set<String> linkedPackages = new HashSet<>();
linkedPackages.add(package1.getId());
Expand Down

0 comments on commit d9fce21

Please sign in to comment.