Subversion Repositories bacoAlunos

Rev

Rev 1310 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.domain;

import java.util.List;

/**
 * @author Jorge Machado
 * @date 2/Mar/2008
 * @time 10:56:46
 * @see pt.estgp.estgweb.domain
 */

public abstract class OwnedDomainObject extends DomainSerializableObject implements IOwned
{

    /**
     * can be override in proper classes
     * @return generic user owner of object
     */

    public abstract GenericUser getOwner();

    /**
     * can be override in proper classes
     * @return List of Strings that correpond to owner roles of object
     */

    public abstract List<String> getOwnerRoles();


    public boolean checkIsOwnedBy(GenericUser u)
    {
        return checkIsOwnedBy(u, false);
    }

    /**
     * Check if this object is owned by this user or
     * if this user is in group of owners or
     * if user has some owner role
     *
     * @param u user to check
     * @return true if user is owner
     */

    public boolean checkIsOwnedBy(GenericUser u, boolean transaction)
    {

        if(u == null || getOwner() == null && getOwnerRoles() == null)
            return false;
        if(getOwner() != null)
        {
            if(getOwner() instanceof UserImpl && u instanceof UserImpl && u.getId() == getOwner().getId())
            {
                return true;
            }
            else if(getOwner() instanceof UserImpl && u instanceof GroupImpl)
            {
                return false;
            }
            else if(getOwner() instanceof GroupImpl && u instanceof GroupImpl && getOwner().getId() == u.getId())
            {
                return true;
            }
            else if(getOwner() instanceof GroupImpl && u instanceof UserImpl)
            {
                if(((UserImpl)u).hasGroup((1.5.0/docs/api/java/security/acl/Group.html">Group) getOwner()))
                    return true;
            }
        }
        if(getOwnerRoles() != null)
        {
            if(u instanceof GenericUserImpl)
            {
                if(((GenericUserImpl)u).hasRole(getOwnerRoles()))
                    return true;
            }
        }
        return false;
    }
}