package com.ese.ils.beta.beans; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.event.ValueChangeEvent; import javax.faces.model.SelectItem; import com.ese.ils.beta.model.Favorite; import com.ese.ils.beta.model.Module; import com.ese.ils.beta.model.Question; import com.ese.ils.beta.service.FavoriteLocalServiceUtil; import com.ese.ils.beta.service.ModuleLocalServiceUtil; import com.ese.ils.beta.service.QuestionLocalServiceUtil; import com.ese.ils.beta.service.SlideLocalServiceUtil; import com.ese.ils.beta.util.DeComposer; import com.icesoft.faces.async.render.SessionRenderer; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; /** * Zentrale Backing Bean fuer die "Erweiterte Vorlesung" * Hat Zugriff auf diverse Model, Navigation und Backing Beans * @author eduard walter * */ @ManagedBean @ViewScoped public class ModuleBackingBean implements Serializable { private static final long serialVersionUID = -4683364854542035247L; List<SelectItem> moduleItems; List<SelectItem> favoriteItems; List<SelectItem> questionItems; private String currentFav; private String currentQuest; private boolean disableFunctions=false; @ManagedProperty(value="#{navigationBackingBean}") private transient NavigationBackingBean navigationBackingBean; @ManagedProperty(value="#{groupNavigationBean}") private transient GroupNavigationBean groupNavigationBean; @ManagedProperty(value="#{moduleModelBean}") private transient ModuleModelBean moduleModelBean; @ManagedProperty(value="#{questionModelBean}") private transient QuestionModelBean questionModelBean; @ManagedProperty(value="#{slideBackingBean}") private transient SlideBackingBean slideBackingBean; @ManagedProperty(value="#{countQuestionBean}") private transient CountQuestionBean countQuestionBean; @ManagedProperty(value = "#{voteNavigationBean}") private transient VoteNavigationBean voteNavigationBean; @ManagedProperty(value="#{slideModelBean}") private transient SlideModelBean slideModelBean; /** * Navigationsmethode mit Ziel moduleSelection.xhtml * Laedt verfuegbare Module als SelectItems fuer die spaetere Auswahl vor * @param event */ public void moveToModuleSelection(ActionEvent event){ try { moduleItems = new ArrayList<SelectItem>(); for (Module module : ModuleLocalServiceUtil.fetchItemsByUser(getCurrentUserId())) { moduleItems.add(new SelectItem(module.getModuleId(),module.getModuleTitle())); } } catch (Exception e) { e.printStackTrace(); } navigationBackingBean.setHomeStatus(false); navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setModuleSelectionStatus(true); } /** * Navigationsmethode mit Ziel home.xhtml * Der Button, der diese Methode ausloest, ist in jeder Sicht vertreten * Alle verfuegbaren Sichten werden deaktiviert und nur der Startbildschirm angezeigt * @param event */ public void moveToHome(ActionEvent event){ navigationBackingBean.setHomeStatus(true); navigationBackingBean.setModuleSelectionStatus(false); navigationBackingBean.setSlideViewerStatus(false); navigationBackingBean.setModuleInfoStatus(false); navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setFavoriteSelectionStatus(false); navigationBackingBean.setQuestionSelectionStatus(false); navigationBackingBean.setQuestionEditorStatus(false); navigationBackingBean.setQuestionViewerStatus(false); groupNavigationBean.setGroupModeSelectionStatus(false); groupNavigationBean.setGroupLoginStatus(false); groupNavigationBean.setGroupContentSelectionStatus(false); groupNavigationBean.setGroupContentViewerStatus(false); groupNavigationBean.setGroupCreateSessionStatus(false); groupNavigationBean.setGroupSessionCreatedStatus(false); voteNavigationBean.setVoteHomeStatus(false); voteNavigationBean.setVoteShowStatus(false); voteNavigationBean.setVoteCreateStatus(false); voteNavigationBean.setVoteResultsStatus(false); } /** * Navigationsmethode mit Ziel moduleHome.xhtml * Laedt einzelnes Modul, um dessen Informationen und Titelfolie anzuzeigen * @param event */ public void moveToModuleHome(ActionEvent event){ navigationBackingBean.setModuleSelectionStatus(false); navigationBackingBean.setModuleHomeStatus(true); navigationBackingBean.setSlideViewerStatus(false); navigationBackingBean.setModuleInfoStatus(false); navigationBackingBean.setFavoriteSelectionStatus(false); navigationBackingBean.setQuestionSelectionStatus(false); fetchModule(Long.valueOf(moduleModelBean.getModuleId())); slideBackingBean.showSlides(Long.valueOf(moduleModelBean.getModuleId()),0); } /** * Laedt ein einzelnes Modul aus der Datenbank und belegt die ModuleModelBean * @param moduleId */ public void fetchModule(long moduleId){ try { Module module = ModuleLocalServiceUtil.getModule(moduleId); moduleModelBean.setLecturerUserId(module.getLecturerUserId()); moduleModelBean.setModuleTitle(module.getModuleTitle()); moduleModelBean.setDate(module.getCreateDate()); moduleModelBean.setAdditionalInfo(module.getAdditionalInfo()); } catch (NumberFormatException e) { System.out.println("Beim fetchen eines Moduls " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (PortalException e) { System.out.println("Beim fetchen eines Moduls " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (SystemException e) { System.out.println("Beim fetchen eines Moduls " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } } /** * Navigationsmethode mit Ziel slideViewer.xhtml * Zeigt die erste Folie eines Sets an * @param event */ public void moveToSlideViewer(ActionEvent event){ navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setSlideViewerStatus(true); slideBackingBean.showSlides(Long.valueOf(moduleModelBean.getModuleId()),0); } /** * Navigationsmethode mit Ziel moduleInfo.xhtml * @param event */ public void moveToModuleInfo(ActionEvent event){ navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setModuleInfoStatus(true); } /** * Navigationsmethode mit Ziel favoriteSelection.xhtml * Favorite werden aus DB geladen und als SelectItems angezeigt * @param event */ public void moveToFavoriteSelection(ActionEvent event){ navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setFavoriteSelectionStatus(true); favoriteItems = new ArrayList<SelectItem>(); for (Favorite favorite : FavoriteLocalServiceUtil.fetchModuleFavorites(getCurrentUserId(), Long.valueOf(moduleModelBean.getModuleId()))){ favoriteItems.add(new SelectItem(favorite.getFavoriteId(),"Folie Nr.: "+DeComposer.slideIdToSlideNr(""+favorite.getSlideId()))); } } /** * Verfolgt Aenderungen in der Favoriten-Auswahl * Fuer die aktuelle Auswahl wird eine Vorschau angezeigt * @param vcEvent */ public void favoritePreviewListener(ValueChangeEvent vcEvent){ try { slideBackingBean.showPreview(SlideLocalServiceUtil.getSlide(FavoriteLocalServiceUtil.getFavorite(Long.valueOf(vcEvent.getNewValue().toString())).getSlideId()).getIndex()); } catch (NumberFormatException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } } /** * Zeigt den aktuellen Favoriten als Folie im slideViewer an * @param event */ public void moveToFavorite(ActionEvent event){ navigationBackingBean.setFavoriteSelectionStatus(false); navigationBackingBean.setSlideViewerStatus(true); try { slideBackingBean.showSlide(""+FavoriteLocalServiceUtil.getFavorite(Long.valueOf(currentFav)).getSlideId()); } catch (NumberFormatException e) { System.out.println("Beim navigieren zu einem Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (PortalException e) { System.out.println("Beim navigieren zu einem Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (SystemException e) { System.out.println("Beim navigieren zu einem Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } } /** * Entfernt einen Favoriten aus der DB * @param event */ public void deleteFavorite(ActionEvent event){ try { FavoriteLocalServiceUtil.deleteFavorite(Long.valueOf(currentFav)); } catch (NumberFormatException e) { System.out.println("Beim l�schen eines Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (PortalException e) { System.out.println("Beim l�schen eines Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } catch (SystemException e) { System.out.println("Beim l�schen eines Favoriten " + "ist ein Fehler aufgetreten!"); e.printStackTrace(); } moveToFavoriteSelection(event); } /** * Navigationsmethode mit Ziel questionSelection.xhtml * Aktuelle Fragen werden aus DB geladen und als SelectItems angezeigt * @param event */ public void moveToQuestionSelection(ActionEvent event){ navigationBackingBean.setModuleHomeStatus(false); navigationBackingBean.setQuestionEditorStatus(false); navigationBackingBean.setQuestionViewerStatus(false); navigationBackingBean.setQuestionSelectionStatus(true); questionItems = new ArrayList<SelectItem>(); for (Question question : QuestionLocalServiceUtil.fetchQuestionItems(Long.valueOf(moduleModelBean.getModuleId()))){ questionItems.add(new SelectItem(question.getQuestionId(),question.getQuestionText())); } } /** * Navigationsmethode mit Ziel questionEditor.xhtml * Parameter der questionModelBean werden zurueckgesetzt * @param event */ public void moveToQuestionEditor(ActionEvent event){ navigationBackingBean.setQuestionSelectionStatus(false); navigationBackingBean.setSlideViewerStatus(false); navigationBackingBean.setQuestionEditorStatus(true); questionModelBean.setQuestionText(" "); questionModelBean.setSlideId(0); } /** * Navigationsmethode mit Ziel questionEditor.xhtml * aequialent zu moveToQuestionEditor, jedoch mit Angabe der aktuellen Folie * @param event */ public void moveFromSlideToQuestionEditor(ActionEvent event){ navigationBackingBean.setQuestionSelectionStatus(false); navigationBackingBean.setSlideViewerStatus(false); navigationBackingBean.setQuestionEditorStatus(true); questionModelBean.setQuestionText(" "); } /** * Legt die aktuelle Frage in der DB an und loest ein Rendern der Dozentensicht aus * @param event */ public void askQuestion(ActionEvent event){ QuestionLocalServiceUtil.askQuestion(getCurrentUserId(), Long.valueOf(moduleModelBean.getModuleId()), questionModelBean.getQuestionText(),questionModelBean.getSlideId()); countQuestionBean.countQuestions(event); SessionRenderer.render("question"); moveToQuestionSelection(event); } /** * Navigationsmethode mit Ziel questionViewer.xhtml * Zeigt die gewaehlte Frage und die dazugehoerige Antwort an * @param event */ public void moveToQuestionViewer(ActionEvent event){ navigationBackingBean.setQuestionSelectionStatus(false); navigationBackingBean.setQuestionViewerStatus(true); try { Question question = QuestionLocalServiceUtil.fetchQuestion(Long.valueOf(currentQuest)); questionModelBean.setAnswer(question.getAnswer()); if (questionModelBean.getAnswer() == null || questionModelBean.getAnswer() == "") { questionModelBean.setAnswer("Diese Frage wurde leider noch nicht beantwortet!"); } questionModelBean.setModuleId(question.getModuleId()); questionModelBean.setQuestionId(question.getQuestionId()); questionModelBean.setQuestionText(question.getQuestionText()); questionModelBean.setUserId(question.getUserId()); } catch (NumberFormatException e) { e.printStackTrace(); System.out.println("Beim generieren des Question Modell " + "Objektes ist ein Fehler aufgetreten!"); } catch (SystemException e) { System.out.println("Beim generieren des Question Modell " + "Objektes ist ein Fehler aufgetreten!"); e.printStackTrace(); } } /** * Hilfsmethode zur Ermittlung der aktuellen User Id * @return long id * @throws NullPointerException */ private long getCurrentUserId() throws NullPointerException { FacesContext fc = FacesContext.getCurrentInstance(); ExternalContext externalContext = fc.getExternalContext(); long id = Long.parseLong(externalContext.getUserPrincipal().getName()); return id; } public NavigationBackingBean getNavigationBackingBean() { return navigationBackingBean; } public void setNavigationBackingBean(NavigationBackingBean navigationBackingBean) { this.navigationBackingBean = navigationBackingBean; } public List<SelectItem> getModuleItems() { return moduleItems; } public void setModuleItems(List<SelectItem> moduleItems) { this.moduleItems = moduleItems; } public ModuleModelBean getModuleModelBean() { return moduleModelBean; } public void setModuleModelBean(ModuleModelBean moduleModelBean) { this.moduleModelBean = moduleModelBean; } public SlideBackingBean getSlideBackingBean() { return slideBackingBean; } public void setSlideBackingBean(SlideBackingBean slideBackingBean) { this.slideBackingBean = slideBackingBean; } public List<SelectItem> getFavoriteItems() { return favoriteItems; } public void setFavoriteItems(List<SelectItem> favoriteItems) { this.favoriteItems = favoriteItems; } public String getCurrentFav() { return currentFav; } public void setCurrentFav(String currentFav) { this.currentFav = currentFav; } public List<SelectItem> getQuestionItems() { return questionItems; } public void setQuestionItems(List<SelectItem> questionItems) { this.questionItems = questionItems; } public String getCurrentQuest() { return currentQuest; } public void setCurrentQuest(String currentQuest) { this.currentQuest = currentQuest; } public QuestionModelBean getQuestionModelBean() { return questionModelBean; } public void setQuestionModelBean(QuestionModelBean questionModelBean) { this.questionModelBean = questionModelBean; } public CountQuestionBean getCountQuestionBean() { return countQuestionBean; } public void setCountQuestionBean(CountQuestionBean countQuestionBean) { this.countQuestionBean = countQuestionBean; } public GroupNavigationBean getGroupNavigationBean() { return groupNavigationBean; } public void setGroupNavigationBean(GroupNavigationBean groupNavigationBean) { this.groupNavigationBean = groupNavigationBean; } public VoteNavigationBean getVoteNavigationBean() { return voteNavigationBean; } public void setVoteNavigationBean(VoteNavigationBean voteNavigationBean) { this.voteNavigationBean = voteNavigationBean; } public SlideModelBean getSlideModelBean() { return slideModelBean; } public void setSlideModelBean(SlideModelBean slideModelBean) { this.slideModelBean = slideModelBean; } public boolean isDisableFunctions() { try{ getCurrentUserId(); } catch (NullPointerException ex){ return true; } return false; } public void setDisableFunctions(boolean disableFunctions) { this.disableFunctions = disableFunctions; } }