package fr.openwide.core.showcase.web.application.widgets.resource; import java.io.IOException; import java.util.List; import org.apache.commons.fileupload.FileItem; import org.apache.wicket.request.resource.IResource; import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.util.lang.Bytes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.showcase.core.business.fileupload.model.ShowcaseFile; import fr.openwide.core.showcase.core.business.fileupload.service.IShowcaseFileService; import fr.openwide.core.wicket.more.fileapi.model.FileApiFile; import fr.openwide.core.wicket.more.fileapi.resource.AbstractFileUploadResource; import fr.openwide.core.wicket.more.link.descriptor.IResourceLinkDescriptor; import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder; public class FileUploadResource extends AbstractFileUploadResource { private static final long serialVersionUID = -5800661087560130202L; private static final Logger LOGGER = LoggerFactory.getLogger(FileUploadResource.class); public static final ResourceReference REFERENCE = new ResourceReference(FileUploadResource.class, "fileUploadResourceReference") { private static final long serialVersionUID = 1L; @Override public IResource getResource() { return new FileUploadResource(); } }; public static IResourceLinkDescriptor linkDescriptor() { return LinkDescriptorBuilder.start() .resource(REFERENCE); } @SpringBean private IShowcaseFileService showcaseFileService; public FileUploadResource() { super(); } @Override protected void saveFiles(Attributes attributes, List<FileApiFile> fileApiFiles, List<FileItem> fileItems, List<FileApiFile> successFiles, List<FileApiFile> errorFiles) throws IOException { for (FileItem fileItem : fileItems) { int i = fileItems.indexOf(fileItem); FileApiFile fileApiFile = fileApiFiles.get(i); List<ShowcaseFile> files = showcaseFileService.list(); boolean found = false; for (ShowcaseFile showcaseFile : files) { // on cherche l'entité correspondant au fichier persisté if (showcaseFile.getId().toString().equals(fileApiFile.getIdentifier())) { try { showcaseFileService.addFile(showcaseFile, fileItem.getInputStream()); successFiles.add(fileApiFile); found = true; } catch (RuntimeException | IOException | ServiceException | SecurityServiceException e) { LOGGER.error("Error uploading file.", e); fileApiFile.setErrorMessage(e.getMessage()); errorFiles.add(fileApiFile); } } } if (found == false) { LOGGER.error("File not found"); } } } @Override protected Bytes getMaxSize() { return Bytes.megabytes(750); } @Override protected String getFileSizeErrorMessage() { return "widgets.fileupload.globalError"; } }