Subversion Repositories bacoAlunos

Rev

Rev 1306 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.domain;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.RoleManager;
import pt.estgp.estgweb.utils.StringsUtils;

import java.io.Serializable;
import java.util.List;

/**
 * Created by jorgemachado on 10/01/14.
 */

public class ProcessEventFileImpl extends ProcessEventFile
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(ProcessEventImpl.class);


    public static enum AccessLevel
    {
        ALL_IN_PROCESS,
        ALL_EXCEPT_STARTER,
        ONLY_STARTER,
        OWNER,
        FORWARD_EVENTS,
        BACKWARD_EVENTS,
        DEFINED_USERS_IDS,
        DEFINED_ROLES_IDS
    }

    @1.5.0/docs/api/java/lang/Override.html">Override
    public List<String> getOwnerRoles() {
        return null;
    }

    @1.5.0/docs/api/java/lang/Override.html">Override
    public 1.5.0/docs/api/java/lang/String.html">String getChoosedOwnerRole() {
        return null;
    }

    @1.5.0/docs/api/java/lang/Override.html">Override
    public 1.5.0/docs/api/java/io/Serializable.html">Serializable getSerializable() {
        return getId();
    }

    public void setFileAccessLevelEnum(AccessLevel fileAccessLevel) {
        super.setFileAccessLevel(fileAccessLevel.name());
    }

    public AccessLevel getFileAccessLevelEnum()
    {
        1.5.0/docs/api/java/lang/System.html">System.out.println("File Level:" + getFileAccessLevel());
        if(getFileAccessLevel() == null)
            return AccessLevel.OWNER;
        for(AccessLevel al : AccessLevel.values())
        {
            if(al.name().equals(getFileAccessLevel()))
            {
                return al;
            }
        }
        return AccessLevel.OWNER;
    }

    public boolean canSeeFile(User user)
    {
        if(user.isSuperuser() || user.hasRole(Globals.ROLE_PROCESSES_ADMIN))
            return true;
        if(isOwnedBy(user))
            return true;

        switch(getFileAccessLevelEnum())
        {
            case ALL_IN_PROCESS:
                return ((ProcessImpl)getProcessEvent().getProcess()).isInProcess(user);
            case ALL_EXCEPT_STARTER:
                return ((ProcessImpl)getProcessEvent().getProcess()).isInProcess(user)
                        &&
                        !getProcessEvent().getProcess().isOwnedBy(user);
            case ONLY_STARTER:
                return  isOwnedBy(user) ||
                        getProcessEvent().getProcess().isOwnedBy(user);
            case OWNER:
                return isOwnedBy(user);
            case FORWARD_EVENTS:
                return isOwnedBy(user) ||
                        ((ProcessEventImpl)getProcessEvent()).isInNextEvents(user);
            case BACKWARD_EVENTS:
                return isOwnedBy(user) ||
                        ((ProcessEventImpl)getProcessEvent()).isInPreviousEvents(user);
            case DEFINED_USERS_IDS:
                if(getFileAccessIdentifiers() == null || getFileAccessIdentifiers().trim().length() == 0)
                {
                    logger.error("Atention event: " +getId() + " has no target ids and defined access is DEFINED_USERS_IDS");
                    return false;
                }
                if(isOwnedBy(user)) return true;
                List<String> ids = StringsUtils.getStringsFromSerial(getFileAccessIdentifiers(), ";");
                for(1.5.0/docs/api/java/lang/String.html">String idstr: ids)
                {
                    if(user.getId() == 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(idstr))
                        return true;
                }
                return false;
            case DEFINED_ROLES_IDS:
                if(getFileAccessRoles() == null || getFileAccessRoles().trim().length() == 0)
                {
                    logger.error("Atention event file: " +getId() + " has no roles and defined access is DEFINED_ROLES_IDS");
                    return false;
                }
                return isOwnedBy(user) ||
                        user.hasRole(RoleManager.getRolesFromSerial(getFileAccessRoles()));
        }
        logger.error("Access Level not found in process event file " + getId());
        return false;
    }

    public boolean canOpenCloseGhost(User user)
    {
        return (isOwnedBy(user) && getProcessEvent().getCloseDate() == null && getProcessEvent().getNextEvent() == null)
                || user.isSuperuser() || user.hasRole(Globals.ROLE_PROCESSES_ADMIN);
    }
}