LectureUserView.java 5.77 KB
package fi.codecrew.moya.web.lecture;

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

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.event.SelectEvent;
import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.DefaultScheduleModel;
import org.primefaces.model.ScheduleModel;

import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.user.UserView;

@Named
@ConversationScoped
public class LectureUserView extends GenericCDIView {

	private static final long serialVersionUID = 1L;

	@Inject
	UserView userView;

	@EJB
	LectureBeanLocal lectureBean;

	@EJB
	EventBeanLocal eventBean;

	ListDataModel<LectureGroup> lectureGroups = null;
	ListDataModel<Lecture> lectures = null;
	ListDataModel<Lecture> participatedLectures = null;

	LectureGroup currentLectureGroup;

	ScheduleModel coursesCalendar = null;

	Date curDate = null;

	public void initView() {
		if (super.requirePermissions(LecturePermission.VIEW)) {
			super.beginConversation();
		}
	}

	public boolean isLectureGroupsVisible() {
		if (lectureBean.getLectureGroups().size() <= 1)
			return false;
		return true;
	}

	public boolean isParticipateActive() {
		return lectureBean.isUserCanParticipate(userView.getCurrentUser());
	}

	public ListDataModel<LectureGroup> getLectureGroups() {
		lectureGroups = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups());

		return lectureGroups;
	}

	public void selectCurrentLectureGroup() {
		if (lectureGroups != null && lectureGroups.isRowAvailable()) {
			currentLectureGroup = lectureGroups.getRowData();

			lectures = null;
		}
	}

	public LectureGroup getCurrentLectureGroup() {
		List<LectureGroup> groups = lectureBean.getLectureGroups();
		if (currentLectureGroup == null && groups.size() > 0) {
			currentLectureGroup = groups.get(0);
		}

		return currentLectureGroup;
	}

	public ListDataModel<Lecture> getLectures() {

		if (currentLectureGroup == null)
			return new ListDataModel<Lecture>();

		if (lectures == null)
			lectures = new ListDataModel<Lecture>(lectureBean.findAvailableLectures(getCurrentLectureGroup(), userView.getCurrentUser()));

		return lectures;
	}

	public ListDataModel<Lecture> getParticipatedLectures() {
		participatedLectures = new ListDataModel<Lecture>(lectureBean.getParticipatedLectures(userView.getCurrentUser()));

		return participatedLectures;
	}

	public ScheduleModel getCoursesCalendar() {

		if (coursesCalendar == null) {
			coursesCalendar = new DefaultScheduleModel();
			for (Lecture lecture : lectureBean.findAvailableLectures(getCurrentLectureGroup(), userView.getCurrentUser())) {
				String altinfo = "\n" + lecture.getDescription() + "\n";

				if (lecture.isFull())
					altinfo += "\n" + I18n.get("lecture.full");

				if (isCurrentGroupFull())
					altinfo += "\n" + I18n.get("lecture.groupFull");

				DefaultScheduleEvent event = new DefaultScheduleEvent(lecture.getName() + altinfo, lecture.getStartTime(), lecture.getEndTime(), lecture);
				event.setDescription(lecture.getDescription());

				if (lecture.isFull() || isCurrentGroupFull()) {
					event.setStyleClass("lectureCalendarDisabled");
				} else {
					event.setStyleClass("lectureCalendar");
				}

				coursesCalendar.addEvent(event);
			}

			for (Lecture lecture : lectureBean.getParticipatedLectures(userView.getCurrentUser())) {

				String altinfo = "\n" + lecture.getDescription() + "\n\n" + I18n.get("lecture.participating");

				DefaultScheduleEvent event = new DefaultScheduleEvent(lecture.getName() + altinfo, lecture.getStartTime(), lecture.getEndTime(), lecture);
				event.setDescription(lecture.getDescription());
				event.setStyleClass("lectureCalendarParticipating");
				coursesCalendar.addEvent(event);
			}
		}

		return coursesCalendar;
	}

	public void onLecureCalendarEventSelect(SelectEvent selectEvent) {
		
		if (!isParticipateActive()) {
			return;
		}

		Lecture lecture = (Lecture) ((DefaultScheduleEvent) selectEvent.getObject()).getData();

		lectureBean.participate(userView.getCurrentUser(), lecture);

	//	super.addFaceMessage("lecture.participated");

		curDate = lecture.getStartTime();
		
		this.lectures = null;
		this.coursesCalendar = null;
	}
	
	public void onLecureCalendarDateSelect(SelectEvent selectEvent) {
		
	}

	public Date getScheduleInitDate() {

		if (curDate != null)
			return curDate;
		
		Lecture lecture = lectureBean.getFirstLecture();

		if (lecture == null)
			return null;

		return lecture.getStartTime();

	}

	public void participateCurrent() {
		if (!isParticipateActive()) {
			return;
		}

		if (lectures != null && lectures.isRowAvailable()) {
			Lecture lecture = lectures.getRowData();

			lectureBean.participate(userView.getCurrentUser(), lecture);

			super.addFaceMessage("lecture.participated");

			this.lectures = null;
			this.coursesCalendar = null;
		}
	}

	public void unParticipateCurrent() {

		if (participatedLectures != null && participatedLectures.isRowAvailable()) {
			Lecture lecture = participatedLectures.getRowData();

			lectureBean.unparticipate(userView.getCurrentUser(), lecture);

			super.addFaceMessage("lecture.unparticipated");

			this.lectures = null;
			this.coursesCalendar = null;
		}
	}

	public boolean isCurrentGroupFull() {
		return (lectureBean.userLectureSelectsLeft(getCurrentLectureGroup(), userView.getCurrentUser()) <= 0);
	}

	public int getCurrentGroupParticipateCount() {
		return lectureBean.userLectureSelects(getCurrentLectureGroup(), userView.getCurrentUser());
	}

}