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