diff --git a/pom.xml b/pom.xml
index 83b2e3f3aa..607d7b6c62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -164,6 +164,33 @@
2.3.1
26.0.5
6.3.3
+ 4.0.1
+
+
+ ${session.executionRootDirectory}/deploy
+
+
+ ${base.deploy.dir}/tomcat
+
+ ${base.deploy.dir}/tomcat
+
+ ${base.deploy.dir}/tomcat
+
+ ${base.deploy.dir}/jars
+
+
+ -Dcatalina.home=${project.build.directory}/home -Xms128m -Xmx256m -XX:MaxMetaspaceSize=512m
diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/ComponentController.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/ComponentController.java
index 772b631d34..3a7c760da6 100644
--- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/ComponentController.java
+++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/ComponentController.java
@@ -40,6 +40,7 @@
import org.eclipse.sw360.datahandler.thrift.components.Release;
import org.eclipse.sw360.datahandler.thrift.components.ReleaseLink;
import org.eclipse.sw360.datahandler.thrift.projects.Project;
+import org.eclipse.sw360.datahandler.thrift.users.RequestedAction;
import org.eclipse.sw360.datahandler.thrift.users.User;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.VulnerabilityDTO;
@@ -96,6 +97,7 @@
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import static org.eclipse.sw360.datahandler.permissions.PermissionUtils.makePermission;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
@BasePathAwareController
@@ -109,6 +111,8 @@ public class ComponentController implements RepresentationModelProcessor RESPONSE_BODY_FOR_MODERATION_REQUEST = ImmutableMap.builder()
.put("message", "Moderation request is created").build();
+ private static final ImmutableMap RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT = ImmutableMap.builder()
+ .put("message", "Unauthorized user or empty commit message passed.").build();
@NonNull
private final Sw360ComponentService componentService;
@@ -346,25 +350,31 @@ public ResponseEntity> patchComponent(
@Parameter(description = "The id of the component to be updated.")
@PathVariable("id") String id,
@Parameter(description = "The component with updated fields.")
- @RequestBody ComponentDTO updateComponentDto
+ @RequestBody ComponentDTO updateComponentDto,
+ @RequestParam(value = "comment", required = false) String comment
) throws TException {
User user = restControllerHelper.getSw360UserFromAuthentication();
Component sw360Component = componentService.getComponentForUserById(id, user);
sw360Component = this.restControllerHelper.updateComponent(sw360Component, updateComponentDto);
+ user.setCommentMadeDuringModerationRequest(comment);
Set attachmentDTOS = updateComponentDto.getAttachmentDTOs();
if (!CommonUtils.isNullOrEmptyCollection(attachmentDTOS)) {
Set attachments = new HashSet<>();
- for (AttachmentDTO attachmentDTO: attachmentDTOS) {
+ for (AttachmentDTO attachmentDTO : attachmentDTOS) {
attachments.add(restControllerHelper.convertToAttachment(attachmentDTO, user));
}
sw360Component.setAttachments(attachments);
}
- RequestStatus updateComponentStatus = componentService.updateComponent(sw360Component, user);
- HalResource userHalResource = createHalComponent(sw360Component, user);
- if (updateComponentStatus == RequestStatus.SENT_TO_MODERATOR) {
- return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
+ if (!restControllerHelper.isWriteActionAllowed(sw360Component, user) && comment == null) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT, HttpStatus.FORBIDDEN);
+ } else {
+ RequestStatus updateComponentStatus = componentService.updateComponent(sw360Component, user);
+ HalResource userHalResource = createHalComponent(sw360Component, user);
+ if (updateComponentStatus == RequestStatus.SENT_TO_MODERATOR) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
+ }
+ return new ResponseEntity<>(userHalResource, HttpStatus.OK);
}
- return new ResponseEntity<>(userHalResource, HttpStatus.OK);
}
@PreAuthorize("hasAuthority('WRITE')")
@@ -484,18 +494,26 @@ public ResponseEntity> patchComponentAttachmentInfo(
@Parameter(description = "The id of the attachment.")
@PathVariable("attachmentId") String attachmentId,
@Parameter(description = "The attachment info to be updated.")
- @RequestBody Attachment attachmentData
+ @RequestBody Attachment attachmentData,
+ @RequestParam(value = "comment", required = false) String comment
+
) throws TException {
final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
final Component sw360Component = componentService.getComponentForUserById(id, sw360User);
Set attachments = sw360Component.getAttachments();
- Attachment updatedAttachment = attachmentService.updateAttachment(attachments, attachmentData, attachmentId, sw360User);
+ sw360User.setCommentMadeDuringModerationRequest(comment);
+ Attachment updatedAttachment = attachmentService.updateAttachment(attachments, attachmentData, attachmentId,
+ sw360User);
RequestStatus updateComponentStatus = componentService.updateComponent(sw360Component, sw360User);
- if (updateComponentStatus == RequestStatus.SENT_TO_MODERATOR) {
- return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
+ if (!restControllerHelper.isWriteActionAllowed(sw360Component, sw360User) && comment == null) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT, HttpStatus.FORBIDDEN);
+ } else {
+ if (updateComponentStatus == RequestStatus.SENT_TO_MODERATOR) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST, HttpStatus.ACCEPTED);
+ }
+ EntityModel attachmentResource = EntityModel.of(updatedAttachment);
+ return new ResponseEntity<>(attachmentResource, HttpStatus.OK);
}
- EntityModel attachmentResource = EntityModel.of(updatedAttachment);
- return new ResponseEntity<>(attachmentResource, HttpStatus.OK);
}
@Operation(
@@ -531,10 +549,15 @@ public ResponseEntity addAttachmentToComponent(
@Parameter(description = "The file to be uploaded.")
@RequestPart("file") MultipartFile file,
@Parameter(description = "The attachment info to be created.")
- @RequestPart("attachment") Attachment newAttachment
+ @RequestPart("attachment") Attachment newAttachment,
+ @RequestParam(value = "comment", required = false) String comment
) throws TException {
final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
final Component component = componentService.getComponentForUserById(componentId, sw360User);
+ sw360User.setCommentMadeDuringModerationRequest(comment);
+ if (!restControllerHelper.isWriteActionAllowed(component, sw360User) && comment == null) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT, HttpStatus.ACCEPTED);
+ }
Attachment attachment = null;
try {
attachment = attachmentService.uploadAttachment(file, newAttachment, sw360User);
@@ -609,10 +632,13 @@ public void downloadAttachmentBundleFromComponent(
@DeleteMapping(COMPONENTS_URL + "/{componentId}/attachments/{attachmentIds}")
public ResponseEntity> deleteAttachmentsFromComponent(
@PathVariable("componentId") String componentId,
- @PathVariable("attachmentIds") List attachmentIds) throws TException {
+ @PathVariable("attachmentIds") List attachmentIds, @RequestParam(value = "comment", required = false) String comment) throws TException {
User user = restControllerHelper.getSw360UserFromAuthentication();
Component component = componentService.getComponentForUserById(componentId, user);
-
+ user.setCommentMadeDuringModerationRequest(comment);
+ if (!restControllerHelper.isWriteActionAllowed(component, user) && comment == null) {
+ return new ResponseEntity(RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT, HttpStatus.FORBIDDEN);
+ }
Set attachmentsToDelete = attachmentService.filterAttachmentsToRemove(Source.componentId(componentId),
component.getAttachments(), attachmentIds);
if (attachmentsToDelete.isEmpty()) {
diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java
index 14c51ca90c..ebee517c08 100644
--- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java
+++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java
@@ -51,6 +51,7 @@
import org.eclipse.sw360.datahandler.thrift.projects.Project;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectService;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectDTO;
+import org.eclipse.sw360.datahandler.thrift.users.RequestedAction;
import org.eclipse.sw360.datahandler.thrift.users.User;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.*;
@@ -115,6 +116,7 @@
import java.util.stream.Collectors;
import static org.eclipse.sw360.datahandler.common.CommonUtils.isNullEmptyOrWhitespace;
+import static org.eclipse.sw360.datahandler.permissions.PermissionUtils.makePermission;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
@Service
@@ -1655,4 +1657,8 @@ public ClearingRequest updateCRSize(ClearingRequest clearingRequest, Project pro
}
return clearingRequestService.getClearingRequestById(clearingRequest.getId(), sw360User);
}
+
+ public boolean isWriteActionAllowed(Object object, User user) {
+ return makePermission(object, user).isActionAllowed(RequestedAction.WRITE);
+ }
}
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 58a96a36d2..17917a7201 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
@@ -167,6 +167,7 @@
import static org.eclipse.sw360.datahandler.common.CommonUtils.wrapThriftOptionalReplacement;
import static org.eclipse.sw360.datahandler.common.WrappedException.wrapTException;
+import static org.eclipse.sw360.datahandler.permissions.PermissionUtils.makePermission;
import static org.eclipse.sw360.rest.resourceserver.Sw360ResourceServer.REPORT_FILENAME_MAPPING;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
@@ -184,23 +185,20 @@ public class ProjectController implements RepresentationModelProcessor mapOfFieldsTobeEmbedded = ImmutableMap.builder()
- .put(Project._Fields.CLEARING_TEAM, "clearingTeam")
- .put(Project._Fields.EXTERNAL_URLS, "externalUrls")
- .put(Project._Fields.MODERATORS, "sw360:moderators")
- .put(Project._Fields.CONTRIBUTORS,"sw360:contributors")
- .put(Project._Fields.ATTACHMENTS,"sw360:attachments").build();
+ .put(Project._Fields.CLEARING_TEAM, "clearingTeam").put(Project._Fields.EXTERNAL_URLS, "externalUrls")
+ .put(Project._Fields.MODERATORS, "sw360:moderators").put(Project._Fields.CONTRIBUTORS, "sw360:contributors")
+ .put(Project._Fields.ATTACHMENTS, "sw360:attachments").build();
private static final ImmutableMap mapOfProjectFieldsToRequestBody = ImmutableMap.builder()
- .put(Project._Fields.VISBILITY, "visibility")
- .put(Project._Fields.RELEASE_ID_TO_USAGE, "linkedReleases")
+ .put(Project._Fields.VISBILITY, "visibility").put(Project._Fields.RELEASE_ID_TO_USAGE, "linkedReleases")
.put(Project._Fields.RELEASE_RELATION_NETWORK, "dependencyNetwork").build();
- private static final ImmutableMap RESPONSE_BODY_FOR_MODERATION_REQUEST = ImmutableMap.builder()
- .put("message", "Moderation request is created").build();
+ private static final ImmutableMap RESPONSE_BODY_FOR_MODERATION_REQUEST = ImmutableMap
+ .builder().put("message", "Moderation request is created").build();
+ private static final ImmutableMap RESPONSE_BODY_FOR_MODERATION_REQUEST_WITH_COMMIT = ImmutableMap
+ .builder().put("message", "Unauthorized user or empty commit message passed.").build();
private static final List enumReleaseRelationshipValues = Stream.of(ReleaseRelationship.values())
- .map(ReleaseRelationship::name)
- .collect(Collectors.toList());
+ .map(ReleaseRelationship::name).collect(Collectors.toList());
private static final List enumMainlineStateValues = Stream.of(MainlineState.values())
- .map(MainlineState::name)
- .collect(Collectors.toList());
+ .map(MainlineState::name).collect(Collectors.toList());
@NonNull
private final Sw360ProjectService projectService;
@@ -238,27 +236,18 @@ public class ProjectController implements RepresentationModelProcessor>> getProjectsForUser(
- Pageable pageable,
- @Parameter(description = "The name of the project")
- @RequestParam(value = "name", required = false) String name,
- @Parameter(description = "The type of the project")
- @RequestParam(value = "type", required = false) String projectType,
- @Parameter(description = "The group of the project")
- @RequestParam(value = "group", required = false) String group,
- @Parameter(description = "The tag of the project")
- @RequestParam(value = "tag", required = false) String tag,
- @Parameter(description = "Flag to get projects with all details.")
- @RequestParam(value = "allDetails", required = false) boolean allDetails,
- @Parameter(description = "List project by lucene search")
- @RequestParam(value = "luceneSearch", required = false) boolean luceneSearch,
- HttpServletRequest request) throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
+ public ResponseEntity>> getProjectsForUser(Pageable pageable,
+ @Parameter(description = "The name of the project") @RequestParam(value = "name", required = false) String name,
+ @Parameter(description = "The type of the project") @RequestParam(value = "type", required = false) String projectType,
+ @Parameter(description = "The group of the project") @RequestParam(value = "group", required = false) String group,
+ @Parameter(description = "The tag of the project") @RequestParam(value = "tag", required = false) String tag,
+ @Parameter(description = "Flag to get projects with all details.") @RequestParam(value = "allDetails", required = false) boolean allDetails,
+ @Parameter(description = "List project by lucene search") @RequestParam(value = "luceneSearch", required = false) boolean luceneSearch,
+ HttpServletRequest request)
+ throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Map mapOfProjects = new HashMap<>();
boolean isSearchByName = name != null && !name.isEmpty();
@@ -312,18 +301,19 @@ public ResponseEntity>> getProjectsForUser(
@NotNull
private ResponseEntity>> getProjectResponse(Pageable pageable,
- String projectType, String group, String tag, boolean allDetails, boolean luceneSearch,
- HttpServletRequest request, User sw360User, Map mapOfProjects, boolean isSearchByName,
- List sw360Projects, boolean isNoFilter) throws ResourceClassNotFoundException, PaginationParameterException, URISyntaxException, TException {
+ String projectType, String group, String tag, boolean allDetails, boolean luceneSearch,
+ HttpServletRequest request, User sw360User, Map mapOfProjects, boolean isSearchByName,
+ List sw360Projects, boolean isNoFilter)
+ throws ResourceClassNotFoundException, PaginationParameterException, URISyntaxException, TException {
sw360Projects.stream().forEach(prj -> mapOfProjects.put(prj.getId(), prj));
PaginationResult paginationResult;
if (isNoFilter) {
int totalCount = projectService.getMyAccessibleProjectCounts(sw360User);
- paginationResult = restControllerHelper.paginationResultFromPaginatedList(request, pageable,
- sw360Projects, SW360Constants.TYPE_PROJECT, totalCount);
+ paginationResult = restControllerHelper.paginationResultFromPaginatedList(request, pageable, sw360Projects,
+ SW360Constants.TYPE_PROJECT, totalCount);
} else {
- paginationResult = restControllerHelper.createPaginationResult(request, pageable,
- sw360Projects, SW360Constants.TYPE_PROJECT);
+ paginationResult = restControllerHelper.createPaginationResult(request, pageable, sw360Projects,
+ SW360Constants.TYPE_PROJECT);
}
List> projectResources = new ArrayList<>();
@@ -360,36 +350,22 @@ private ResponseEntity>> getProjectResponse
return new ResponseEntity<>(resources, status);
}
- @Operation(
- description = "List all projects associated to the user.",
- tags = {"Projects"}
- )
+ @Operation(description = "List all projects associated to the user.", tags = { "Projects" })
@RequestMapping(value = PROJECTS_URL + "/myprojects", method = RequestMethod.GET)
- public ResponseEntity>> getProjectsFilteredForUser(
- Pageable pageable,
- @Parameter(description = "Projects with current user as creator.")
- @RequestParam(value = CREATED_BY, required = false, defaultValue = "true") boolean createdBy,
- @Parameter(description = "Projects with current user as moderator.")
- @RequestParam(value = "moderator", required = false, defaultValue = "true") boolean moderator,
- @Parameter(description = "Projects with current user as contributor.")
- @RequestParam(value = "contributor", required = false, defaultValue = "true") boolean contributor,
- @Parameter(description = "Projects with current user as owner.")
- @RequestParam(value = "projectOwner", required = false, defaultValue = "true") boolean projectOwner,
- @Parameter(description = "Projects with current user as lead architect.")
- @RequestParam(value = "leadArchitect", required = false, defaultValue = "true") boolean leadArchitect,
- @Parameter(description = "Projects with current user as project responsible.")
- @RequestParam(value = "projectResponsible", required = false, defaultValue = "true") boolean projectResponsible,
- @Parameter(description = "Projects with current user as security responsible.")
- @RequestParam(value = "securityResponsible", required = false, defaultValue = "true") boolean securityResponsible,
- @Parameter(description = "Projects with state as open.")
- @RequestParam(value = "stateOpen", required = false, defaultValue = "true") boolean stateOpen,
- @Parameter(description = "Projects with state as closed.")
- @RequestParam(value = "stateClosed", required = false, defaultValue = "true") boolean stateClosed,
- @Parameter(description = "Projects with state as in progress.")
- @RequestParam(value = "stateInProgress", required = false, defaultValue = "true") boolean stateInProgress,
- @Parameter(description = "Flag to get projects with all details.")
- @RequestParam(value = "allDetails", required = false) boolean allDetails,
- HttpServletRequest request) throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
+ public ResponseEntity>> getProjectsFilteredForUser(Pageable pageable,
+ @Parameter(description = "Projects with current user as creator.") @RequestParam(value = CREATED_BY, required = false, defaultValue = "true") boolean createdBy,
+ @Parameter(description = "Projects with current user as moderator.") @RequestParam(value = "moderator", required = false, defaultValue = "true") boolean moderator,
+ @Parameter(description = "Projects with current user as contributor.") @RequestParam(value = "contributor", required = false, defaultValue = "true") boolean contributor,
+ @Parameter(description = "Projects with current user as owner.") @RequestParam(value = "projectOwner", required = false, defaultValue = "true") boolean projectOwner,
+ @Parameter(description = "Projects with current user as lead architect.") @RequestParam(value = "leadArchitect", required = false, defaultValue = "true") boolean leadArchitect,
+ @Parameter(description = "Projects with current user as project responsible.") @RequestParam(value = "projectResponsible", required = false, defaultValue = "true") boolean projectResponsible,
+ @Parameter(description = "Projects with current user as security responsible.") @RequestParam(value = "securityResponsible", required = false, defaultValue = "true") boolean securityResponsible,
+ @Parameter(description = "Projects with state as open.") @RequestParam(value = "stateOpen", required = false, defaultValue = "true") boolean stateOpen,
+ @Parameter(description = "Projects with state as closed.") @RequestParam(value = "stateClosed", required = false, defaultValue = "true") boolean stateClosed,
+ @Parameter(description = "Projects with state as in progress.") @RequestParam(value = "stateInProgress", required = false, defaultValue = "true") boolean stateInProgress,
+ @Parameter(description = "Flag to get projects with all details.") @RequestParam(value = "allDetails", required = false) boolean allDetails,
+ HttpServletRequest request)
+ throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Map mapOfProjects = new HashMap<>();
@@ -400,124 +376,108 @@ public ResponseEntity>> getProjectsFiltered
.put(Project._Fields.PROJECT_OWNER.toString(), projectOwner)
.put(Project._Fields.LEAD_ARCHITECT.toString(), leadArchitect)
.put(Project._Fields.PROJECT_RESPONSIBLE.toString(), projectResponsible)
- .put(Project._Fields.SECURITY_RESPONSIBLES.toString(), securityResponsible)
- .build();
+ .put(Project._Fields.SECURITY_RESPONSIBLES.toString(), securityResponsible).build();
ImmutableMap clearingState = ImmutableMap.builder()
.put(ProjectClearingState.OPEN.toString(), stateOpen)
.put(ProjectClearingState.CLOSED.toString(), stateClosed)
- .put(ProjectClearingState.IN_PROGRESS.toString(), stateInProgress)
- .build();
+ .put(ProjectClearingState.IN_PROGRESS.toString(), stateInProgress).build();
List sw360Projects = projectService.getMyProjects(sw360User, userRoles);
sw360Projects = projectService.getWithFilledClearingStatus(sw360Projects, clearingState);
- return getProjectResponse(pageable, null, null, null, allDetails, true, request, sw360User,
- mapOfProjects, true, sw360Projects, false);
+ return getProjectResponse(pageable, null, null, null, allDetails, true, request, sw360User, mapOfProjects, true,
+ sw360Projects, false);
}
- @Operation(
- description = "Get all releases of license clearing.",
- tags = {"Projects"}
- )
+ @Operation(description = "Get all releases of license clearing.", tags = { "Projects" })
@RequestMapping(value = PROJECTS_URL + "/{id}/licenseClearing", method = RequestMethod.GET)
public ResponseEntity licenseClearing(
- @Parameter(description = "Project ID", example = "376576")
- @PathVariable("id") String id,
- @Parameter(description = "Get the transitive releases.")
- @RequestParam(value = "transitive", required = true) boolean transitive,
- HttpServletRequest request
- ) throws TException {
+ @Parameter(description = "Project ID", example = "376576") @PathVariable("id") String id,
+ @Parameter(description = "Get the transitive releases.") @RequestParam(value = "transitive", required = true) boolean transitive,
+ HttpServletRequest request) throws TException {
- final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
- Project sw360Project = projectService.getProjectForUserById(id, sw360User);
+ final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
+ Project sw360Project = projectService.getProjectForUserById(id, sw360User);
- final Set releaseIds = projectService.getReleaseIds(id, sw360User, transitive);
- List releases = releaseIds.stream().map(relId -> wrapTException(() -> {
- final Release sw360Release = releaseService.getReleaseForUserById(relId, sw360User);
- releaseService.setComponentDependentFieldsInRelease(sw360Release, sw360User);
- return sw360Release;
- })).collect(Collectors.toList());
+ final Set releaseIds = projectService.getReleaseIds(id, sw360User, transitive);
+ List releases = releaseIds.stream().map(relId -> wrapTException(() -> {
+ final Release sw360Release = releaseService.getReleaseForUserById(relId, sw360User);
+ releaseService.setComponentDependentFieldsInRelease(sw360Release, sw360User);
+ return sw360Release;
+ })).collect(Collectors.toList());
- List> releaseList = releases.stream().map(sw360Release -> wrapTException(() -> {
- final Release embeddedRelease = restControllerHelper.convertToEmbeddedLinkedRelease(sw360Release);
- final HalResource releaseResource = restControllerHelper.addEmbeddedReleaseLinks(embeddedRelease);
- return releaseResource;
- })).collect(Collectors.toList());
+ List> releaseList = releases.stream().map(sw360Release -> wrapTException(() -> {
+ final Release embeddedRelease = restControllerHelper.convertToEmbeddedLinkedRelease(sw360Release);
+ final HalResource releaseResource = restControllerHelper.addEmbeddedReleaseLinks(embeddedRelease);
+ return releaseResource;
+ })).collect(Collectors.toList());
- HalResource userHalResource = createHalLicenseClearing(sw360Project, releaseList);
- return new ResponseEntity<>(userHalResource, HttpStatus.OK);
- }
+ HalResource userHalResource = createHalLicenseClearing(sw360Project, releaseList);
+ return new ResponseEntity<>(userHalResource, HttpStatus.OK);
+ }
- @Operation(
- description = "Get a single project.",
- tags = {"Projects"}
- )
+ @Operation(description = "Get a single project.", tags = { "Projects" })
@RequestMapping(value = PROJECTS_URL + "/{id}", method = RequestMethod.GET)
public ResponseEntity> getProject(
- @Parameter(description = "Project ID", example = "376576")
- @PathVariable("id") String id) throws TException {
+ @Parameter(description = "Project ID", example = "376576") @PathVariable("id") String id)
+ throws TException {
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Project sw360Project = projectService.getProjectForUserById(id, sw360User);
HalResource userHalResource = createHalProject(sw360Project, sw360User);
return new ResponseEntity<>(userHalResource, HttpStatus.OK);
}
- @Operation(
- description = "Get linked projects of a single project.",
- tags = {"Projects"}
- )
+ @Operation(description = "Get linked projects of a single project.", tags = { "Projects" })
@RequestMapping(value = PROJECTS_URL + "/{id}/linkedProjects", method = RequestMethod.GET)
- public ResponseEntity> getLinkedProject(Pageable pageable,
- @Parameter(description = "Project ID", example = "376576")
- @PathVariable("id") String id,@RequestParam(value = "transitive", required = false) String transitive, HttpServletRequest request)
- throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
+ public ResponseEntity> getLinkedProject(Pageable pageable,
+ @Parameter(description = "Project ID", example = "376576") @PathVariable("id") String id,
+ @RequestParam(value = "transitive", required = false) String transitive, HttpServletRequest request)
+ throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
- User sw360User = restControllerHelper.getSw360UserFromAuthentication();
- Project sw360Proj = projectService.getProjectForUserById(id, sw360User);
- final Set projectIdsInBranch = new HashSet<>();
- boolean isTransitive = Boolean.parseBoolean(transitive);
+ User sw360User = restControllerHelper.getSw360UserFromAuthentication();
+ Project sw360Proj = projectService.getProjectForUserById(id, sw360User);
+ final Set projectIdsInBranch = new HashSet<>();
+ boolean isTransitive = Boolean.parseBoolean(transitive);
- Map linkedProjects = sw360Proj.getLinkedProjects();
+ Map linkedProjects = sw360Proj.getLinkedProjects();
List keys = linkedProjects != null ? new ArrayList<>(linkedProjects.keySet()) : new ArrayList<>();
- List projects = keys.stream().map(projId -> wrapTException(() -> {
- final Project sw360Project = projectService.getProjectForUserById(projId, sw360User);
- return sw360Project;
- })).collect(Collectors.toList());
-
- PaginationResult paginationResult = restControllerHelper.createPaginationResult(request, pageable,
- projects, SW360Constants.TYPE_PROJECT);
-
- final List> projectResources = paginationResult.getResources().stream()
- .map(sw360Project -> wrapTException(() -> {
- final Project embeddedProject = restControllerHelper.convertToEmbeddedLinkedProject(sw360Project);
- final HalResource projectResource = new HalResource<>(embeddedProject);
- if (isTransitive) {
- projectService.addEmbeddedLinkedProject(sw360Project, sw360User, projectResource,
- projectIdsInBranch);
- }
- return projectResource;
- })).collect(Collectors.toList());
-
- CollectionModel resources;
- if (projectResources.size() == 0) {
- resources = restControllerHelper.emptyPageResource(Project.class, paginationResult);
- } else {
- resources = restControllerHelper.generatePagesResource(paginationResult, projectResources);
- }
-
- HttpStatus status = resources == null ? HttpStatus.NO_CONTENT : HttpStatus.OK;
- return new ResponseEntity<>(resources, status);
- }
+ List projects = keys.stream().map(projId -> wrapTException(() -> {
+ final Project sw360Project = projectService.getProjectForUserById(projId, sw360User);
+ return sw360Project;
+ })).collect(Collectors.toList());
- @Operation(
- description = "Get releases of linked projects of a single project.",
- tags = {"Projects"}
- )
+ PaginationResult paginationResult = restControllerHelper.createPaginationResult(request, pageable,
+ projects, SW360Constants.TYPE_PROJECT);
+
+ final List> projectResources = paginationResult.getResources().stream()
+ .map(sw360Project -> wrapTException(() -> {
+ final Project embeddedProject = restControllerHelper.convertToEmbeddedLinkedProject(sw360Project);
+ final HalResource projectResource = new HalResource<>(embeddedProject);
+ if (isTransitive) {
+ projectService.addEmbeddedLinkedProject(sw360Project, sw360User, projectResource,
+ projectIdsInBranch);
+ }
+ return projectResource;
+ })).collect(Collectors.toList());
+
+ CollectionModel resources;
+ if (projectResources.size() == 0) {
+ resources = restControllerHelper.emptyPageResource(Project.class, paginationResult);
+ } else {
+ resources = restControllerHelper.generatePagesResource(paginationResult, projectResources);
+ }
+
+ HttpStatus status = resources == null ? HttpStatus.NO_CONTENT : HttpStatus.OK;
+ return new ResponseEntity<>(resources, status);
+ }
+
+ @Operation(description = "Get releases of linked projects of a single project.", tags = { "Projects" })
@RequestMapping(value = PROJECTS_URL + "/{id}/linkedProjects/releases", method = RequestMethod.GET)
- public ResponseEntity>> getReleasesOfLinkedProject(@Parameter(description = "Project ID", example = "376576")
- @PathVariable("id") String id, HttpServletRequest request, Pageable pageable)
- throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
+ public ResponseEntity>> getReleasesOfLinkedProject(
+ @Parameter(description = "Project ID", example = "376576") @PathVariable("id") String id,
+ HttpServletRequest request, Pageable pageable)
+ throws TException, URISyntaxException, PaginationParameterException, ResourceClassNotFoundException {
User sw360User = restControllerHelper.getSw360UserFromAuthentication();
List