Commit 0479a621 authored by Sonia Zorba's avatar Sonia Zorba Committed by zonia3000
Browse files

Added web service controller logic and tests

parent 04115082
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -82,7 +82,13 @@ public class GroupsController {
    @DeleteMapping(value = "/group/{groupId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<?> deleteGroup(@PathVariable("groupId") String groupId, PaginatedModelRequest request) {

        GroupEntity parent = groupsService.deleteGroup(groupId, session.getUserId());
        GroupEntity group = groupsService.getGroupById(groupId);

        if (permissionsService.getGroupPermission(group, session.getUserId()) != Permission.ADMIN) {
            throw new UnauthorizedException("Missing admin privileges");
        }

        GroupEntity parent = groupsService.deleteGroup(group);

        PaginatedData<GroupNode> groupsPanel = getGroupsPanel(parent.getId(), request);

+64 −8
Original line number Diff line number Diff line
package it.inaf.ia2.gms.controller;

import it.inaf.ia2.gms.exception.BadRequestException;
import it.inaf.ia2.gms.model.AddPermissionWsRequest;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.PrepareToJoinRequest;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.MembershipEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.MembersService;
import it.inaf.ia2.gms.service.PermissionsService;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@@ -19,11 +32,17 @@ public class WebServiceController {
    @Autowired
    private GroupsService groupsService;

    @Autowired
    private MembersService membersService;

    @Autowired
    private PermissionsService permissionsService;

    /**
     * Creates a group and its ancestors if they are missing. It doesn't fail if
     * the last group already exists.
     */
    @PostMapping("/group")
    @PostMapping(value = "/group", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<GroupEntity> createGroup(@RequestBody List<String> names) {

        GroupEntity group = groupsService.getRoot();
@@ -40,27 +59,64 @@ public class WebServiceController {
        return new ResponseEntity<>(group, HttpStatus.CREATED);
    }

    public void deleteGroup() {
    @DeleteMapping("/group")
    public ResponseEntity<?> deleteGroupByPath(@RequestParam("names") String[] names) {

    }
        GroupEntity groupToDelete = getGroupByNames(Arrays.asList(names));

        groupsService.deleteGroup(groupToDelete);

    public void addMember() {
        return ResponseEntity.noContent().build();
    }

    @PostMapping(value = "/member", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<MembershipEntity> addMember(@RequestBody MembershipEntity request) {
        MembershipEntity membership = membersService.addMember(request.getGroupId(), request.getUserId());
        return new ResponseEntity<>(membership, HttpStatus.CREATED);
    }

    public void removeMember() {
    @DeleteMapping("/member")
    public ResponseEntity<?> removeMember(@RequestParam("names") String[] names, @RequestParam("userId") String userId) {

        GroupEntity group = getGroupByNames(Arrays.asList(names));

        membersService.removeMember(group.getId(), userId);

        return ResponseEntity.noContent().build();
    }

    public void addPrivilege() {
    @PostMapping(value = "/permission", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<PermissionEntity> addPermission(@Valid @RequestBody AddPermissionWsRequest request) {

        GroupEntity group = getGroupByNames(request.getNames());

        PermissionEntity newPermission = permissionsService.addPermission(group, request.getUserId(), request.getPermission());

        return new ResponseEntity<>(newPermission, HttpStatus.CREATED);
    }

    public void deletePrivilege() {
    @DeleteMapping("/permission")
    public ResponseEntity<?> deletePermission(@RequestParam("names") String[] names,
            @RequestParam("userId") String userId, @RequestParam("permission") Permission permission) {

        GroupEntity group = getGroupByNames(Arrays.asList(names));

        permissionsService.deletePermission(group, userId, permission);

        return ResponseEntity.noContent().build();
    }

    public void prepareToJoin() {
    @PostMapping(value = "/prepare-join", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<?> prepareToJoin(@Valid @RequestBody PrepareToJoinRequest request) {

        permissionsService.movePermissions(request.getFromUserId(), request.getToUserId());
        membersService.moveMemberships(request.getFromUserId(), request.getToUserId());

        return ResponseEntity.ok().build();
    }

    private GroupEntity getGroupByNames(List<String> names) {
        return groupsService.findGroupByNames(names)
                .orElseThrow(() -> new BadRequestException("Unable to find requested group"));
    }
}
+27 −0
Original line number Diff line number Diff line
package it.inaf.ia2.gms.model;

import javax.validation.constraints.NotEmpty;

public class AddMemberRequest extends PaginatedModelRequest {

    @NotEmpty
    private String groupId;
    @NotEmpty
    private String userId;

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}
+39 −0
Original line number Diff line number Diff line
package it.inaf.ia2.gms.model;

import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class AddPermissionWsRequest {

    @NotNull
    private List<String> names;
    @NotEmpty
    private String userId;
    @NotNull
    private Permission permission;

    public List<String> getNames() {
        return names;
    }

    public void setNames(List<String> names) {
        this.names = names;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public Permission getPermission() {
        return permission;
    }

    public void setPermission(Permission permission) {
        this.permission = permission;
    }
}
+4 −0
Original line number Diff line number Diff line
package it.inaf.ia2.gms.model;

import javax.validation.constraints.NotEmpty;

public class CreateGroupRequest extends PaginatedModelRequest {

    @NotEmpty
    private String parentGroupId;
    @NotEmpty
    private String newGroupName;

    public String getNewGroupName() {
Loading