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
() +
'}';
}
}