ActionLogBean.java 5.5 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.enums.ActionLogMessageState;
import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.facade.ActionLogFacade;
import fi.codecrew.moya.facade.ActionLogMessageTagFacade;
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
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public void createActionLogEvent(String message, boolean isTask) {
		ArrayList<ActionLogMessageTag> almts = resolveTags(message);

		ActionLogMessage alm = new ActionLogMessage();
		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());
		alm.setTags(almts);

		actionLogFacade.saveToActionLog(alm);
	}

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

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public List<ActionLogMessage> getAllActionLogEventsByFilter(List<ActionLogMessageTag> filterTags) {
		if (filterTags.size() == 0)
			return actionLogFacade.getAllSortedByTimestamp(permissionBean.getCurrentUser().getEvent());
		else
			return actionLogFacade.getAllSortedByTimestampFiltered(permissionBean.getCurrentUser().getEvent(), filterTags);
	}

	@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);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public List<ActionLogMessageTag> getAllTags() {
		return actionLogMessageTagFacade.getAllTags(eventBean.getCurrentEvent());
	}

	@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;
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
	public 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);

			actionLogMessageTagFacade.create(almt);
			System.out.println("creating tag: " + s);
			return almt;
		} else {
			System.out.println("re-using tag: " + s);
			return almt;
		}
	}
}