All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.agiletec.aps.system.services.role.RoleManager Maven / Gradle / Ivy

Go to download

Entando Engine: an agile, modern and user-centric open source Portal platform.

There is a newer version: 6.2.27
Show newest version
/*
 * Copyright 2015-Present Entando Inc. (http://www.entando.com) All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */
package com.agiletec.aps.system.services.role;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import com.agiletec.aps.system.common.AbstractService;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.system.services.role.cache.IPermissionCacheWrapper;
import com.agiletec.aps.system.services.role.cache.IRoleCacheWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Servizio di gestione dei ruoli.
 *
 * @author M.Diana - E.Santoboni
 */
public class RoleManager extends AbstractService implements IRoleManager {

	private static final Logger logger = LoggerFactory.getLogger(RoleManager.class);

	private IRoleDAO roleDao;
	private IPermissionDAO permissionDao;
	private IRoleCacheWrapper roleCacheWrapper;
	private IPermissionCacheWrapper permissionCacheWrapper;

	@Override
	public void init() throws Exception {
		this.getPermissionCacheWrapper().initCache(this.getPermissionDAO());
		this.getRoleCacheWrapper().initCache(this.getRoleDAO());
		logger.debug("{} : initialized", this.getClass().getName());
	}

	/**
	 * Restituisce la lista dei ruoli esistenti.
	 *
	 * @return La lista dei ruoli esistenti.
	 */
	@Override
	public List getRoles() {
		return this.getRoleCacheWrapper().getRoles();
	}

	/**
	 * Restituisce un ruolo in base al nome.
	 *
	 * @param roleName Il nome del ruolo richesto.
	 * @return Il ruolo cercato.
	 */
	@Override
	public Role getRole(String roleName) {
		return this.getRoleCacheWrapper().getRole(roleName);
	}

	/**
	 * Rimuove un ruolo dal db e dalla mappa dei ruoli.
	 *
	 * @param role Oggetto di tipo Role relativo al ruolo da rimuovere.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void removeRole(Role role) throws ApsSystemException {
		try {
			this.getRoleDAO().deleteRole(role);
			this.getRoleCacheWrapper().removeRole(role);
		} catch (Throwable t) {
			logger.error("Error while removing a role", t);
			throw new ApsSystemException("Error while removing a role", t);
		}
	}

	/**
	 * Aggiorna un ruolo sul db ed sulla mappa dei ruoli.
	 *
	 * @param role Il ruolo da aggiornare.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void updateRole(Role role) throws ApsSystemException {
		try {
			this.getRoleDAO().updateRole(role);
			this.getRoleCacheWrapper().updateRole(role);
		} catch (Throwable t) {
			logger.error("Error while updating a role", t);
			throw new ApsSystemException("Error while updating a role", t);
		}
	}

	/**
	 * Aggiunge un ruolo al db ed alla mappa dei ruoli.
	 *
	 * @param role Oggetto di tipo Role relativo al ruolo da aggiungere.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void addRole(Role role) throws ApsSystemException {
		try {
			this.getRoleDAO().addRole(role);
			this.getRoleCacheWrapper().addRole(role);
		} catch (Throwable t) {
			logger.error("Error while adding a role", t);
			throw new ApsSystemException("Error while adding a role", t);
		}
	}

	/**
	 * Restituisce la lista ordinata (secondo il nome) dei permessi di
	 * autorizzazione.
	 *
	 * @return La lista ordinata dei permessi
	 */
	@Override
	public List getPermissions() {
		List permissions = this.getPermissionCacheWrapper().getPermissions();
		Collections.sort(permissions);
		return permissions;
	}

	@Override
    public List getPermissionsCodes() {
        List permissions = this.getPermissionCacheWrapper().getPermissionsCodes();
        Collections.sort(permissions);
        return permissions;
    }

    @Override
	public Permission getPermission(String permissionName) {
		return this.getPermissionCacheWrapper().getPermission(permissionName);
	}

	/**
	 * Rimuove il permesso specificato dal db e dai ruoli.
	 *
	 * @param permissionName Il permesso da rimuovere dal ruolo.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void removePermission(String permissionName) throws ApsSystemException {
		try {
			this.getPermissionDAO().deletePermission(permissionName);
			this.getPermissionCacheWrapper().removePermission(permissionName);
			List roles = this.getRolesWithPermission(permissionName);
			Iterator roleIt = roles.iterator();
			while (roleIt.hasNext()) {
				Role role = roleIt.next();
				role.removePermission(permissionName);
				this.getRoleCacheWrapper().updateRole(role);
			}
		} catch (Throwable t) {
			logger.error("Error while deleting permission {}", permissionName, t);
			throw new ApsSystemException("Error while deleting a permission", t);
		}
	}

	/**
	 * Aggiorna un permesso di autorizzazione nel db.
	 *
	 * @param permission Il permesso da aggiornare nel db.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void updatePermission(Permission permission) throws ApsSystemException {
		try {
			this.getPermissionDAO().updatePermission(permission);
			this.getPermissionCacheWrapper().updatePermission(permission);
		} catch (Throwable t) {
			logger.error("Error updating permission", t);
			throw new ApsSystemException("Error while updating perrmission", t);
		}
	}

	/**
	 * Aggiunge un permesso di autorizzazione nel db.
	 *
	 * @param permission Il permesso da aggiungere nel db.
	 * @throws ApsSystemException in caso di errore nell'accesso al db.
	 */
	@Override
	public void addPermission(Permission permission) throws ApsSystemException {
		try {
			this.getPermissionDAO().addPermission(permission);
			this.getPermissionCacheWrapper().addPermission(permission);
		} catch (Throwable t) {
			logger.error("Error while adding a permission", t);
			throw new ApsSystemException("Error while adding a permission", t);
		}
	}

	@Override
	public List getRolesWithPermission(String permissionName) {
		List rolesWithPerm = new ArrayList();
		Iterator iter = this.getRoles().iterator();
		while (iter.hasNext()) {
			Role role = (Role) iter.next();
			if (role.hasPermission(permissionName)) {
				rolesWithPerm.add(role);
			}
		}
		return rolesWithPerm;
	}

	protected IPermissionDAO getPermissionDAO() {
		return permissionDao;
	}

	public void setPermissionDAO(IPermissionDAO permissionDao) {
		this.permissionDao = permissionDao;
	}

	protected IRoleDAO getRoleDAO() {
		return roleDao;
	}

	public void setRoleDAO(IRoleDAO roleDao) {
		this.roleDao = roleDao;
	}

	protected IRoleCacheWrapper getRoleCacheWrapper() {
		return roleCacheWrapper;
	}

	public void setRoleCacheWrapper(IRoleCacheWrapper roleCacheWrapper) {
		this.roleCacheWrapper = roleCacheWrapper;
	}

	protected IPermissionCacheWrapper getPermissionCacheWrapper() {
		return permissionCacheWrapper;
	}

	public void setPermissionCacheWrapper(IPermissionCacheWrapper permissionCacheWrapper) {
		this.permissionCacheWrapper = permissionCacheWrapper;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy