package com.ese.ils.beta.beans;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.activation.MimetypesFileTypeMap;
import javax.faces.bean.CustomScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.icefaces.ace.component.fileentry.FileEntry;
import org.icefaces.ace.component.fileentry.FileEntryEvent;
import org.icefaces.ace.component.fileentry.FileEntryResults;
import com.ese.ils.beta.service.SlideLocalServiceUtil;
import com.ese.ils.beta.util.PNGCreator;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.service.RepositoryEntryLocalServiceUtil;
import com.liferay.portal.service.ResourcePermissionServiceUtil;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portlet.documentlibrary.NoSuchFolderException;
import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
/**
* dient fuer Dateioperation wie hochladen von PDFs
* @author julien hofer
*
*/
@ManagedBean(name = FileEntryBean.BEAN_NAME)
@ViewScoped
// @SessionScoped
public class FileEntryBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2980292251518510630L;
/**
*
*/
//Injection
@ManagedProperty(value="#{groupBackingBean}")
private transient GroupBackingBean groupBackingBean;
@ManagedProperty(value="#{moduleModelBean}")
private transient ModuleModelBean moduleModelBean;
//Variablen
private String moduleName;
public static final String BEAN_NAME = "fileEntry";
private List<String> fileData;
Folder groupFolder;
private static final long REPOSITORY_ID = 25509;
private String contentDescription = "";
//Konstruktor
public FileEntryBean() {
}
/**
* laedt PDF Dateien hoch und wandelt diese in PNG Bilder
* @param e
*/
public void sampleListener(FileEntryEvent e) {
System.out.println("Sampler reached");
FileEntry fe = (FileEntry) e.getComponent();
FileEntryResults results = fe.getResults();
File parent = null;
fileData = new ArrayList<String>();
// get data About File
for (FileEntryResults.FileInfo i : results.getFiles()) {
fileData.add("File Name: " + i.getFileName());
System.out.println("FileName: " + i.getFileName());
if (i.isSaved()) {
System.out.println("GESPEICHERT!");
fileData.add("File Size: " + i.getSize() + " bytes");
System.out.println("FileSize :" + i.getSize());
File file = i.getFile();
if (file != null) {
parent = file.getParentFile();
// TODO: catch numberformatexception
System.out.println(""+moduleModelBean.getModuleId());
processSlideSet(file, Long.valueOf(moduleModelBean.getModuleId()));
}
} else {
fileData.add("File was not saved because: "
+ i.getStatus()
.getFacesMessage(
FacesContext.getCurrentInstance(), fe,
i).getSummary());
}
}
if (parent != null) {
long dirSize = 0;
int fileCount = 0;
for (File file : parent.listFiles()) {
fileCount++;
dirSize += file.length();
}
fileData.add("Total Files In Upload Directory: " + fileCount);
fileData.add("Total Size of Files In Directory: " + dirSize
+ " bytes");
}
}
/**
* dient zum Hochladen von Inhalten fuer die Gruppenarbeit
* @param e
*/
public void uploadContent(FileEntryEvent e) {
System.out.println("Sampler reached");
FileEntry fe = (FileEntry) e.getComponent();
FileEntryResults results = fe.getResults();
File parent = null;
fileData = new ArrayList<String>();
// get data About File
for (FileEntryResults.FileInfo i : results.getFiles()) {
fileData.add("File Name: " + i.getFileName());
System.out.println("FileName: " + i.getFileName());
if (i.isSaved()) {
System.out.println("zwischengespeichert!");
fileData.add("File Size: " + i.getSize() + " bytes");
System.out.println("FileSize :" + i.getSize());
File file = i.getFile();
if (file != null) {
parent = file.getParentFile();
System.out.println(groupBackingBean.getSessionId());
processContentUpload(file, Long.valueOf(groupBackingBean.getSessionId()));
}
} else {
fileData.add("File was not saved because: "
+ i.getStatus()
.getFacesMessage(
FacesContext.getCurrentInstance(), fe,
i).getSummary());
}
}
if (parent != null) {
long dirSize = 0;
int fileCount = 0;
for (File file : parent.listFiles()) {
fileCount++;
dirSize += file.length();
}
fileData.add("Total Files In Upload Directory: " + fileCount);
fileData.add("Total Size of Files In Directory: " + dirSize
+ " bytes");
}
}
/**
* schreibt die Inhalte der Gruppe in die Datenbank
* @param file
* @param groupId
*/
private void processContentUpload(File file, long groupId) {
ServiceContext serviceContext = new ServiceContext();
System.out.println("content upload");
System.out.println(new MimetypesFileTypeMap().getContentType(file));
try{
long groupParentFolderId = DLAppServiceUtil.getFolder(REPOSITORY_ID, 0, "group").getFolderId();
groupFolder = DLAppServiceUtil.getFolder(REPOSITORY_ID, groupParentFolderId, "" + groupId);
} catch (NoSuchFolderException ne){
try {
long groupParentFolderId = DLAppServiceUtil.getFolder(REPOSITORY_ID, 0, "group").getFolderId();
groupFolder = DLAppServiceUtil.addFolder(REPOSITORY_ID, groupParentFolderId, ""
+ groupId, "group content " + groupId, serviceContext);
} catch (PortalException e) {
e.printStackTrace();
} catch (SystemException e) {
e.printStackTrace();
}
} catch (PortalException e) {
e.printStackTrace();
} catch (SystemException e) {
e.printStackTrace();
}
try {
DLAppServiceUtil.addFileEntry(REPOSITORY_ID,groupFolder.getFolderId(), file.getName(), new MimetypesFileTypeMap().getContentType(file),
file.getName(), contentDescription, "initial upload", file, serviceContext);
} catch (PortalException e) {
e.printStackTrace();
} catch (SystemException e) {
e.printStackTrace();
}
groupBackingBean.fetchContentItems();
}
/**
* schreibt die PNG Bilder in die Datenbank
* @param slideSet
* @param moduleId
*/
void processSlideSet(File slideSet, long moduleId) {
try {
System.out.println("PROZESSOR:");
// conversion failed yes/no?
List<File> slidePNGs = PNGCreator.convertPDFtoPNG(slideSet,
moduleId);
System.out.println("conversion:");
// Test
System.out.println(RepositoryEntryLocalServiceUtil.getRepositoryEntriesCount());
// determine slide folder id
long slideParentFolderId = DLAppServiceUtil.getFolder(REPOSITORY_ID, 0, "slides").getFolderId();
// save set as original pdf in dlfolder
com.liferay.portal.kernel.repository.model.FileEntry slideSetEntry = SlideLocalServiceUtil
.addSlideSet(slideSet, REPOSITORY_ID, slideParentFolderId, moduleId);
// create module-specific folder
ServiceContext serviceContext = new ServiceContext();
Folder folder = DLAppServiceUtil.addFolder(REPOSITORY_ID, slideParentFolderId, ""
+ moduleId, "slides for module no. " + moduleId, serviceContext);
// save each single slide, slides already equiped with unique ids!!!
boolean status = SlideLocalServiceUtil.addSlides(slidePNGs, REPOSITORY_ID,
folder.getFolderId(), moduleId);
System.out.println(status);
} catch (Exception e) {
e.printStackTrace();
}
}
public List getFileData() {
return fileData;
}
public String getModuleName() {
return moduleName;
}
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
public GroupBackingBean getGroupBackingBean() {
return groupBackingBean;
}
public void setGroupBackingBean(GroupBackingBean groupBackingBean) {
this.groupBackingBean = groupBackingBean;
}
public ModuleModelBean getModuleModelBean() {
return moduleModelBean;
}
public void setModuleModelBean(ModuleModelBean moduleModelBean) {
this.moduleModelBean = moduleModelBean;
}
public String getContentDescription() {
return contentDescription;
}
public void setContentDescription(String contentDescription) {
this.contentDescription = contentDescription;
}
}