Skip to content
PermissionsService.java 4.17 KiB
Newer Older
package it.inaf.ia2.gms.service;

import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.persistence.PermissionsDAO;
Sonia Zorba's avatar
Sonia Zorba committed
import static it.inaf.ia2.gms.persistence.model.ActionType.*;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PermissionsService {

    private final PermissionsDAO permissionsDAO;
    private final LoggingDAO loggingDAO;
    public PermissionsService(PermissionsDAO permissionsDAO, LoggingDAO loggingDAO) {
        this.permissionsDAO = permissionsDAO;
        this.loggingDAO = loggingDAO;
    public List<PermissionEntity> getGroupPermissions(GroupEntity group) {
        return permissionsDAO.getGroupsPermissions(group.getId());
Sonia Zorba's avatar
Sonia Zorba committed
    public List<PermissionEntity> findUserPermissions(String userId) {
        return permissionsDAO.findUserPermissions(userId);
    }

    public List<PermissionEntity> findUserPermissions(GroupEntity group, String userId) {
        return permissionsDAO.findUserPermissions(userId, group.getPath());
    public void removePermission(GroupEntity group, String userId) {
        permissionsDAO.deletePermission(group.getId(), userId);
Sonia Zorba's avatar
Sonia Zorba committed
        loggingDAO.logAction(PERMISSION_REMOVED, "Removed permission for " + userId + " in group " + group.getId());
    public PermissionEntity addPermission(GroupEntity group, String userId, Permission permission, String setBy) {
        Optional<PermissionEntity> existingPermissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId);

        PermissionEntity permissionEntity;
        if (existingPermissionEntity.isPresent()) {
            permissionEntity = existingPermissionEntity.get();
            Permission resultingPermission = Permission.addPermission(permissionEntity.getPermission(), permission);
            if (resultingPermission == permissionEntity.getPermission()) {
                return permissionEntity;
            } else {
                permissionEntity.setPermission(resultingPermission);
            }
        } else {
            permissionEntity = new PermissionEntity();
            permissionEntity.setGroupId(group.getId());
            permissionEntity.setUserId(userId);
            permissionEntity.setPermission(permission);
            permissionEntity.setGroupPath(group.getPath());
        permissionEntity = permissionsDAO.createOrUpdatePermission(permissionEntity);
Sonia Zorba's avatar
Sonia Zorba committed
        loggingDAO.logAction(PERMISSION_ADDED, "Added " + permission + " permission for " + userId + " in group " + group.getId());
    public PermissionEntity createOrUpdatePermission(GroupEntity group, String userId, Permission permission, String setBy) {

        PermissionEntity permissionEntity = new PermissionEntity();
        permissionEntity.setGroupId(group.getId());
        permissionEntity.setUserId(userId);
        permissionEntity.setPermission(permission);
        permissionEntity.setGroupPath(group.getPath());
Sonia Zorba's avatar
Sonia Zorba committed
        permissionEntity = permissionsDAO.createOrUpdatePermission(permissionEntity);
        loggingDAO.logAction(PERMISSION_ADDED, "Added " + permission + " permission for " + userId + " in group " + group.getId());

        return permissionEntity;
    public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission, String setBy) {

        PermissionEntity permissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId)
                .orElseThrow(() -> new IllegalArgumentException("Specified permission not found"));

        permissionEntity.setSetBy(setBy);
        permissionEntity.setPermission(permission);

Sonia Zorba's avatar
Sonia Zorba committed
        permissionEntity = permissionsDAO.updatePermission(permissionEntity);
        loggingDAO.logAction(PERMISSION_UPDATED, "Updated permission for " + userId + " in group " + group.getId() + " to " + permission);

        return permissionEntity;