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