package pl.piotrsukiennik.whowhen.web.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import pl.piotrsukiennik.whowhen.backend.api.outer.BackendRequest; import pl.piotrsukiennik.whowhen.backend.api.outer.IBackendService; import pl.piotrsukiennik.whowhen.shared.form.WhoWhenRequestForm; import pl.piotrsukiennik.whowhen.web.util.RequestValidator; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; @Controller public class DataSubmitController { @Value( "#{serviceProperties['frontend.apacheDeploymentPath']}" ) private String apacheDeploymentPath; @Value( "#{requestProperties['maxFileSize']}" ) private String maxFileSize; public static final String TARGET_DATA_FILE_NAME = "file"; @Resource private IBackendService backendService; @RequestMapping( value = "/", method = RequestMethod.POST ) public String indexPOST( @ModelAttribute( value = "FORM" ) WhoWhenRequestForm form, @RequestParam( value = "redirect", required = true ) String redirect, BindingResult result ) { RequestValidator requestValidator = new RequestValidator(); requestValidator.validate( form, result ); if ( !result.hasErrors() && form.getFile().getSize() < Long.valueOf( maxFileSize ) ) { FileOutputStream outputStream = null; try { String requestIdentifier = generateRequestIdentifier(); //System.out.println("1"); byte[] fileBytes = form.getFile().getFileItem().get(); String targetDir = apacheDeploymentPath + requestIdentifier + File.separator; String filePath = targetDir + TARGET_DATA_FILE_NAME; File targetFile = new File( filePath ); // System.out.println("2"); if ( !targetFile.exists() ) { targetFile.getParentFile().mkdirs(); outputStream = new FileOutputStream( targetFile ); outputStream.write( fileBytes ); outputStream.close(); } BackendRequest backendRequest = new BackendRequest( requestIdentifier, FormUtil.toRequestData( form ), targetFile ); backendService.handle( backendRequest ); return "redirect:" + redirect + backendRequest.getRequestIdentifier() + "/request"; } catch ( Exception e ) { e.printStackTrace(); } } return "redirect:/?error=true"; } protected String generateRequestIdentifier() { return java.util.UUID.randomUUID().toString(); } }