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.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 ProcessEventImpl extends ProcessEvent
{
    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 ProcessEventState
    {
        NOT_ACCEPTED,
        ACCEPTED,
        FINNISH_TRANSITATED,
        FINNISH_CLOSED
    }

    public static enum AccessLevel
    {
        ALL_IN_PROCESS,
        ALL_EXCEPT_STARTER,
        ONLY_STARTER, //Owner is included
        OWNER, //ONLY the owner of the event
        FORWARD_EVENTS, //Owner is included
        BACKWARD_EVENTS, //Owner is included
        DEFINED_USERS_IDS, //Owner is included
        DEFINED_ROLES_IDS //Owner is included
    }

    @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 setNotesAccessLevelEnum(AccessLevel notesAccessLevel) {
        super.setNotesAccessLevel(notesAccessLevel.name());
    }

    public AccessLevel getNotesAccessLevelEnum()
    {
        for(AccessLevel al : AccessLevel.values())
        {
            if(al.name().equals(getNotesAccessLevel()))
            {
                return al;
            }
        }
        return AccessLevel.OWNER;
    }

    public void setNowStateEnum(ProcessEventState state)
    {
        super.setNowState(state.name());
    }


    public ProcessEventState getNowStateEnum()
    {

        for(ProcessEventState ps : ProcessEventState.values())
        {
            if(ps.name().equals(getNowState()))
            {
                return ps;
            }
        }
        return ProcessEventState.NOT_ACCEPTED;
    }

    public boolean isInNextEvents(User u)
    {
        if(isOwnedBy(u))
            return true;
        ProcessEvent next = getNextEvent();
        while(next != null)
        {
            if(next.isOwnedBy(u))
                return true;
            next = next.getNextEvent();
        }
        return false;
    }

    public boolean isInPreviousEvents(User u)
    {
        if(isOwnedBy(u))
            return true;
        ProcessEvent next = getPreviousEvent();
        while(next != null)
        {
            if(next.isOwnedBy(u))
                return true;
            next = next.getPreviousEvent();
        }
        return false;
    }

    public boolean canSeeNotes(User user)
    {
        if(user.isSuperuser())
            return true;
        switch(getNotesAccessLevelEnum())
        {
            case ALL_IN_PROCESS:
                return ((ProcessImpl)getProcess()).isInProcess(user);
            case ALL_EXCEPT_STARTER:
                return ((ProcessImpl)getProcess()).isInProcess(user)
                        &&
                        !getProcess().isOwnedBy(user);
            case ONLY_STARTER:
                return  isOwnedBy(user) ||
                        getProcess().isOwnedBy(user);
            case OWNER:
                return isOwnedBy(user);
            case FORWARD_EVENTS:
                return isOwnedBy(user) ||
                        isInNextEvents(user);
            case BACKWARD_EVENTS:
                return isOwnedBy(user) ||
                        isInPreviousEvents(user);
            case DEFINED_USERS_IDS:
                if(getNotesAccessIdentifiers() == null || getNotesAccessIdentifiers().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(getNotesAccessIdentifiers(),";");
                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(getNotesAccessRoles() == null || getNotesAccessRoles().trim().length() == 0)
                {
                    logger.error("Atention event: " +getId() + " has no roles and defined access is DEFINED_ROLES_IDS");
                    return false;
                }
               return isOwnedBy(user) ||
                        user.hasRole(RoleManager.getRolesFromSerial(getNotesAccessRoles()));
        }
        logger.error("Access Level not found in process event " + getId());
        return false;
    }

    public boolean isTarget(User user)
    {
        if(getOwner() != null && getOwner().getId() == user.getId() )
            return true;
        else if(getOwner() != null)
            return false;
        if(user.hasRole(getDestinationRole()))
        {
            return true;
        }
        return false;
    }



    @1.5.0/docs/api/java/lang/Override.html">Override
    public 1.5.0/docs/api/java/lang/String.html">String toString() {
        return "ProcessEvent{" +
                "id=" + getId() +
                ", updateDate=" + getUpdateDate() +
                ", openDate=" + getOpenDate() +
                ", acceptedDate=" + getAcceptedDate() +
                ", dispatchedDate=" + getDispatchedDate() +
                ", lastChangeDate=" + getLastChangeDate() +
                ", closeDate=" + getCloseDate() +
                ", nowState='" + getNowState() + '\'' +
                ", accepted=" + isAccepted() +
                ", destinationRole='" + getDestinationRole() + '\'' +
                ", notes='" + getNotes() + '\'' +
                ", notesAccessLevel='" + getNotesAccessLevel() + '\'' +
                ", notesAccessIdentifiers='" + getNotesAccessIdentifiers() + '\'' +
                ", notesAccessRoles='" + getNotesAccessRoles() + '\'' +
                ", notesToStarter='" + getNotesToStarter() + '\'' +
                ", process=" + getProcess().getId() +
                ", previousEvent=" + getPreviousEvent().getId() +
                ", nextEvent=" +
                ", owner=" + getOwner().getUsername() +
                ", files=" + getFiles() +
                '}';
    }



}