ActionLogBean.java 4.95 KB
package fi.codecrew.moya.beans;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

import fi.codecrew.moya.facade.ActionLogFacade;
import fi.codecrew.moya.facade.ActionLogMessageTagFacade;
import fi.codecrew.moya.beans.ActionLogBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.RoleBeanLocal;
import fi.codecrew.moya.enums.ActionLogMessageState;
import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.model.ActionLogMessage;
import fi.codecrew.moya.model.ActionLogMessageResponse;
import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.model.Role;

/**
 * Session Bean implementation class ActionLogBean eventin - luominen -
 * editointi - deletointi
 */
@Stateless
@DeclareRoles(ContentPermission.S_MANAGE_ACTIONLOG)
public class ActionLogBean implements ActionLogBeanLocal {
	// TODO: Permissions

	@EJB
	private ActionLogFacade actionLogFacade;

	@EJB
	private RoleBeanLocal roleBean;

	@EJB
	private PermissionBeanLocal permissionBean;
	
	@EJB
	private ActionLogMessageTagFacade actionLogMessageTagFacade;
	
	@EJB
	private EventBean eventBean;

	public ActionLogBean() {
		// TODO Auto-generated constructor stub
	}

	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public void createActionLogEvent(String message, Role crew, boolean isTask) {
		ArrayList<ActionLogMessageTag> almts = resolveTags(message);
		
		ActionLogMessage alm = new ActionLogMessage();
		alm.setCrew(crew);
		if (isTask) {
			alm.setState(ActionLogMessageState.NEW);
		} else {
			alm.setState(null);
		}
		alm.setTime(new Date());
		alm.setMessage(message);
		alm.setUser(permissionBean.getCurrentUser());
		alm.setLanEvent(permissionBean.getCurrentUser().getEvent());

		actionLogFacade.saveToActionLog(alm);
	}

	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public List<ActionLogMessage> getAllActionLogEvents() {
		return actionLogFacade.getAllSortedByTimestamp(permissionBean.getCurrentUser().getEvent());
	}

	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public List<Role> getAssignableRoles() {
		return roleBean.listRoles();
	}

	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage alm) {
		if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return null;
		return actionLogFacade.getActionLogMessageResponses(alm);
	}

	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) {
		if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return;
		
		if (alm.getState() != state && state != null) {
			alm = actionLogFacade.merge(alm);
			alm.setState(state);
		}

		ActionLogMessageResponse almr = new ActionLogMessageResponse();
		almr.setMessage(message);
		almr.setActionLogMessage(alm);
		almr.setStateChange(state);
		almr.setUser(permissionBean.getCurrentUser());

		actionLogFacade.saveActionLogResponse(almr);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public ActionLogMessage find(Integer id) {
		ActionLogMessage alm = actionLogFacade.find(id);
		if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return null;
		else return alm;
	}
	
	private ArrayList<ActionLogMessageTag> resolveTags(String message) {
		ArrayList<ActionLogMessageTag> almts = new ArrayList<>();
		StringBuilder sb = null;
		boolean rflag = false;
		char ch;
		
		for(int i=0; i < message.length(); i++) {
			if(rflag) {
				if((ch = message.charAt(i)) != ' ') {
					sb.append(ch);
				} else {
					if(sb.length() > 0) {
						ActionLogMessageTag almt = getActionLogMessageTagByString(sb.toString());
						if(!almts.contains(almt)) {
							almts.add(almt);
						}
					}
					
					rflag = false;
					sb = null;
				}
			} else if(!rflag) {
				if(message.charAt(i) == '#') {
					rflag=true;
					sb=new StringBuilder();
				}
			}
		}
		
		if(sb != null && sb.length() > 0) {
			ActionLogMessageTag almt = getActionLogMessageTagByString(sb.toString());
			if(!almts.contains(almt)) {
				almts.add(almt);
			}
		}
		
		return almts;
	}
	
	private ActionLogMessageTag getActionLogMessageTagByString(String s) {
		s = s.toLowerCase();
		
		ActionLogMessageTag almt = null; 
		if((almt = actionLogMessageTagFacade.findByTagStringInEvent(s, eventBean.getCurrentEvent())) == null) {
			almt = new ActionLogMessageTag();
			almt.setEvent(eventBean.getCurrentEvent());
			almt.setTag(s);
			
			almt = actionLogMessageTagFacade.create(almt);
			System.out.println("creating tag: "+s);
			return almt;
		} else {
			System.out.println("re-using tag: "+s);
			return almt;
		}
	}
}