@POST @Consumes({MediaType.MULTIPART_FORM_DATA}) @Produces({MediaType.APPLICATION_JSON}) public String createDocument( @PathParam("entityType") final String entityType, @PathParam("entityId") final Long entityId, @HeaderParam("Content-Length") final Long fileSize, @FormDataParam("file") final InputStream inputStream, @FormDataParam("file") final FormDataContentDisposition fileDetails, @FormDataParam("file") final FormDataBodyPart bodyPart, @FormDataParam("name") final String name, @FormDataParam("description") final String description) { FileUtils.validateFileSizeWithinPermissibleRange( fileSize, name, ApiConstants.MAX_FILE_UPLOAD_SIZE_IN_MB); /** * TODO: also need to have a backup and stop reading from stream after max size is reached to * protect against malicious clients */ /** TODO: need to extract the actual file type and determine if they are permissable */ final DocumentCommand documentCommand = new DocumentCommand( null, null, entityType, entityId, name, fileDetails.getFileName(), fileSize, bodyPart.getMediaType().toString(), description, null); final Long documentId = this.documentWritePlatformService.createDocument(documentCommand, inputStream); return this.toApiJsonSerializer.serialize( CommandProcessingResult.resourceResult(documentId, null)); }
@POST @Path("{ticketId}/attachment") @Consumes({MediaType.MULTIPART_FORM_DATA}) @Produces({MediaType.APPLICATION_JSON}) public String addTicketDetails( @PathParam("ticketId") Long ticketId, @PathParam("entityType") String entityType, @PathParam("entityId") Long entityId, @HeaderParam("Content-Length") Long fileSize, @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetails, @FormDataParam("file") FormDataBodyPart bodyPart, @FormDataParam("comments") String comments, @FormDataParam("status") String status, @FormDataParam("assignedTo") Long assignedTo, @FormDataParam("ticketURL") String ticketURL, @FormDataParam("problemCode") Integer problemCode, @FormDataParam("priority") String priority, @FormDataParam("resolutionDescription") String resolutionDescription, @FormDataParam("username") String username) { FileUtils.validateFileSizeWithinPermissibleRange( fileSize, null, ApiConstants.MAX_FILE_UPLOAD_SIZE_IN_MB); /** * TODO: also need to have a backup and stop reading from stream after max size is reached to * protect against malicious clients */ /** TODO: need to extract the actual file type and determine if they are permissable */ Long createdbyId = context.authenticatedUser().getId(); TicketMasterCommand ticketMasterCommand = new TicketMasterCommand( ticketId, comments, status, assignedTo, createdbyId, null, problemCode, priority, resolutionDescription, username); DocumentCommand documentCommand = null; if (fileDetails != null && bodyPart != null) { documentCommand = new DocumentCommand( null, null, entityType, entityId, null, fileDetails.getFileName(), fileSize, bodyPart.getMediaType().toString(), null, null); } else { documentCommand = new DocumentCommand( null, null, entityType, entityId, null, null, fileSize, null, null, null); } Long detailId = this.ticketMasterWritePlatformService.upDateTicketDetails( ticketMasterCommand, documentCommand, ticketId, inputStream, ticketURL); return this.toApiJsonSerializer.serialize( CommandProcessingResult.resourceResult(detailId, null)); }
@PUT @Path("{documentId}") @Consumes({MediaType.MULTIPART_FORM_DATA}) @Produces({MediaType.APPLICATION_JSON}) public String updateDocument( @PathParam("entityType") final String entityType, @PathParam("entityId") final Long entityId, @PathParam("documentId") final Long documentId, @HeaderParam("Content-Length") final Long fileSize, @FormDataParam("file") final InputStream inputStream, @FormDataParam("file") final FormDataContentDisposition fileDetails, @FormDataParam("file") final FormDataBodyPart bodyPart, @FormDataParam("name") final String name, @FormDataParam("description") final String description) { FileUtils.validateFileSizeWithinPermissibleRange( fileSize, name, ApiConstants.MAX_FILE_UPLOAD_SIZE_IN_MB); final Set<String> modifiedParams = new HashSet<String>(); modifiedParams.add("name"); modifiedParams.add("description"); /** * * Populate Document command based on whether a file has also been passed in as a part of the * update * */ DocumentCommand documentCommand = null; if (inputStream != null && fileDetails.getFileName() != null) { modifiedParams.add("fileName"); modifiedParams.add("size"); modifiedParams.add("type"); modifiedParams.add("location"); documentCommand = new DocumentCommand( modifiedParams, documentId, entityType, entityId, name, fileDetails.getFileName(), fileSize, bodyPart.getMediaType().toString(), description, null); } else { documentCommand = new DocumentCommand( modifiedParams, documentId, entityType, entityId, name, null, null, null, description, null); } /** * TODO: does not return list of changes, should be done for consistency with rest of API */ final CommandProcessingResult identifier = this.documentWritePlatformService.updateDocument(documentCommand, inputStream); return this.toApiJsonSerializer.serialize(identifier); }