package com.ese.ils.beta.beans; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.URLEncoder; import java.net.UnknownHostException; 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 com.ese.ils.beta.model.Slide; import com.ese.ils.beta.service.FavoriteLocalServiceUtil; import com.ese.ils.beta.service.PanicButtonLocalServiceUtil; import com.ese.ils.beta.service.SlideLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.util.PortalUtil; import com.liferay.portlet.documentlibrary.model.DLFileEntry; import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; /** * Beinhaltet Logik der mit der Folienansicht verbundenen Funktionen * @author eduard walter * */ @ManagedBean @ViewScoped public class SlideBackingBean implements Serializable { private static final long serialVersionUID = 9066560016598290294L; private List<SlideModelBean> slideModelList; @ManagedProperty(value="#{slideModelBean}") private transient SlideModelBean slideModelBean; @ManagedProperty(value="#{moduleModelBean}") private transient ModuleModelBean moduleModelBean; private String slideUrl; private int currentSlideIndex = 0; private int slideCount = -1; private boolean favoriteDisabled = false; private boolean panicDisabled = false; /** * zeigt einen foliensatz an, durch den startIndex kann die Startfolie * bestimmt werden * @param moduleId * @param startIndex */ public void showSlides(long moduleId, int startIndex) { slideModelList = fetchSlideList(moduleId); setSlideCount(slideModelList.size()); currentSlideIndex=startIndex; setSlideModelBean(slideModelList.get(startIndex)); slideUrl = slideModelBean.getUrl(); } /** * Zeigt eine Folienvorschau an * @param previewIndex */ public void showPreview(int previewIndex){ slideModelBean = slideModelList.get(previewIndex); slideUrl=slideModelBean.getUrl(); } /** * Ermittelt den Index einer Folie und zeigt diese ueber die * Methode showSlides an * @param slideId */ public void showSlide(String slideId){ try { Slide slide = SlideLocalServiceUtil.fetchSlide(Long.valueOf(slideId)); showSlides(slide.getModuleId(),slide.getIndex()); } catch (NumberFormatException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } } /** * Laedt einen Foliensatz aus der DB und liefer eine * List vom Typ SlideModelBean * @param moduleId * @return List<SlideModelBean> slideModelList */ public List<SlideModelBean> fetchSlideList(long moduleId){ slideModelList = new ArrayList<SlideModelBean>(); for(Slide slide : SlideLocalServiceUtil.fetchModuleSlides(moduleId)){ int i = 0; SlideModelBean slideModel = new SlideModelBean(); slideModel.setFileEntryId(slide.getFileEntryId()); slideModel.setIndex(i); slideModel.setModuleId(slide.getModuleId()); slideModel.setSlideId(slide.getSlideId()); slideModel.setUrl(getURL(Long.valueOf(slide.getFileEntryId()))); slideModelList.add(slideModel); i++; } return slideModelList; } /** * Gibt die URL einer Folie zurueck, ueber diese URL kann das entsprechende * Bild aufgerufen werden * @param fileEntryId * @return */ public String getURL(long fileEntryId){ String url ="FAIL"; String prefix = "pre-fail"; try { prefix = PortalUtil.getPortalURL(InetAddress.getLocalHost().getHostAddress(), PortalUtil.getPortalPort(), false); DLFileEntry entry = DLFileEntryLocalServiceUtil.getDLFileEntry(fileEntryId); System.out.println("prefix: "+prefix); url = (prefix+"/documents/" + entry.getGroupId() + "/" + entry.getFolderId() + "/" + URLEncoder.encode(entry.getTitle(), "utf-8")); System.out.println(url); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } return url; } /** * Blaettert eine Folie nach links * @param event */ public void browseLeft(ActionEvent event){ System.out.println("left "+currentSlideIndex); if(currentSlideIndex!=0){ currentSlideIndex--; slideModelBean = slideModelList.get(currentSlideIndex); slideUrl=slideModelBean.getUrl(); favoriteDisabled=false; panicDisabled=false; } } /** * Blaettert eine Folie nach rechts * @param event */ public void browseRight(ActionEvent event){ System.out.println("right "+currentSlideIndex); if(currentSlideIndex!=slideModelList.size()-1){ currentSlideIndex++; slideModelBean = slideModelList.get(currentSlideIndex); System.out.println(slideModelBean.getModuleId()); slideUrl=slideModelBean.getUrl(); favoriteDisabled=false; panicDisabled=false; } } /** * Legt einen Favoriten fuer die aktuelle Folie in der DB an * @param event */ public void pushFavorite(ActionEvent event){ if(FavoriteLocalServiceUtil.addFavorite(slideModelBean.getSlideId(),slideModelBean.getModuleId(),getCurrentUserId())){ favoriteDisabled=true; } } /** * Loest den PanicButton aus und loggt den Vorfall in der DB * @param event */ public void pushPanic(ActionEvent event){ PanicButtonLocalServiceUtil.setPanic(slideModelBean.getModuleId(), slideModelBean.getSlideId(),getCurrentUserId()); panicDisabled=true; } public List<SlideModelBean> getSlideModelList() { return slideModelList; } public void setSlideModelList(List<SlideModelBean> slideModelList) { this.slideModelList = slideModelList; } public SlideModelBean getSlideModelBean() { return slideModelBean; } public void setSlideModelBean(SlideModelBean slideModelBean) { this.slideModelBean = slideModelBean; } public String getSlideUrl() { return slideUrl; } public void setSlideUrl(String slideUrl) { this.slideUrl = slideUrl; } public int getCurrentSlideIndex() { return currentSlideIndex; } public void setCurrentSlideIndex(int currentSlideIndex) { this.currentSlideIndex = currentSlideIndex; } public ModuleModelBean getModuleModelBean() { return moduleModelBean; } public void setModuleModelBean(ModuleModelBean moduleModelBean) { this.moduleModelBean = moduleModelBean; } public boolean isFavoriteDisabled() { return FavoriteLocalServiceUtil.isFavorite(slideModelList.get(currentSlideIndex).getSlideId(), getCurrentUserId()); } public void setFavoriteDisabled(boolean favoriteDisabled) { this.favoriteDisabled = favoriteDisabled; } public boolean isPanicDisabled() { return panicDisabled; } public void setPanicDisabled(boolean panicDisabled) { this.panicDisabled = panicDisabled; } public int getSlideCount() { return slideCount; } public void setSlideCount(int slideCount) { this.slideCount = slideCount; } private long getCurrentUserId() { FacesContext fc = FacesContext.getCurrentInstance(); ExternalContext externalContext = fc.getExternalContext(); long id = Long.parseLong(externalContext.getUserPrincipal().getName()); return id; } }