UserGroupsRestController.java

package sk.iway.iwcm.components.users.usergroups;

import java.util.List;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
import sk.iway.iwcm.users.UserDetails;
import sk.iway.iwcm.users.UserGroupsDB;
import sk.iway.iwcm.users.UsersDB;

/**
 * Skupiny pouzivatelov, udaje zapisuje do DB ale pri zmene vola
 * UserGroupsDB.getInstance(true), kedze skupiny pouzivatelov su cachovane
 */
@RestController
@Datatable
@RequestMapping("/admin/rest/user-groups")
@PreAuthorize("@WebjetSecurityService.hasPermission('user.admin.userGroups')")
public class UserGroupsRestController extends DatatableRestControllerV2<UserGroupsEntity, Long> {

    public UserGroupsRestController(UserGroupsRepository userGroupsRepository) {
        super(userGroupsRepository);
    }

    @Override
    public void afterSave(UserGroupsEntity entity, UserGroupsEntity saved) {
        UserGroupsDB.getInstance(true);
    }

    @Override
    public void afterDelete(UserGroupsEntity entity, long id) {
        UserGroupsDB.getInstance(true);
    }

    @Override
    public boolean processAction(UserGroupsEntity entity, String action) {

        if (entity.getId()!=null && entity.getId().intValue()>0) {
            int groupId = entity.getId().intValue();

            if ("addGroupToAllUsers".equals(action)) {
                List<UserDetails> users = UsersDB.getUsers();
                for (UserDetails user : users)
                {
                    user.addToGroup(groupId);
                    UsersDB.saveUser(user);
                }

                return true;
            } else if("removeGroupFromAllUsers".equals(action)) {
                List<UserDetails> users = UsersDB.getUsers();
                for (UserDetails user : users)
                {
                    user.removeFromGroup(groupId);
                    UsersDB.saveUser(user);
                }
                return true;
            } else if("deleteAllUsersOfThisGroup".equals(action)) {
                List<UserDetails> users = UsersDB.getUsersByGroup(groupId);
                for (UserDetails user : users) {
                    if (user.isInUserGroup(groupId))
					{
                        user.removeFromGroup(groupId);

						if (Tools.isEmpty(user.getUserGroupsIds()) && user.isAdmin() == false && "delete".equals(Constants.getString("dmailUnsubscribeMode"))) {
							UsersDB.deleteUser(user.getUserId());
                        } else if (Tools.isEmpty(user.getUserGroupsIds()) && user.isAdmin() == false && "disable".equals(Constants.getString("dmailUnsubscribeMode"))) {
							user.setAuthorized(false);
                            //v rezime disable ma zostat posledne nastavena user skupina pre neskorsie ucely, takze mu ju znova musime vratit
                            user.addToGroup(groupId);
                            UsersDB.saveUser(user);
                        } else if (Tools.isEmpty(user.getUserGroupsIds()) && user.isAdmin() == false && "removeGroups".equals(Constants.getString("dmailUnsubscribeMode"))) {
							user.setAuthorized(false);
                            UsersDB.saveUser(user);
                        } else {
							UsersDB.saveUser(user);
                        }
					}
                }
                return true;
            }
        }

        return false;
    }

}