/**
*
*/
package com.jivesoftware.addon.example.storage.file.services;
import java.io.InputStream;
import javax.inject.Singleton;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jivesoftware.addon.example.storage.file.managers.ExternalDocumentIDGenerator;
import com.jivesoftware.addon.example.storage.file.managers.FileStorage;
import com.jivesoftware.addon.example.storage.file.services.resources.FileStorageResponseResourceWrapper;
import com.jivesoftware.addon.example.storage.file.storage.models.ExStorageStaticItemEntity;
import com.jivesoftware.addon.example.storage.file.storage.models.ExStorageUserEntity;
/**
* @author david.nicholls
*
*/
@Path("/filestorage/workspaces/{workspaceId}/attachments")
@Singleton
public class AttachmentStorageService {
private static final Logger log = LoggerFactory.getLogger(AttachmentStorageService.class);
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public ExStorageStaticItemEntity upload(
@HeaderParam(HttpHeaders.AUTHORIZATION) String authorization, @PathParam("workspaceId") String workspaceId, @FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileData, @FormDataParam("metadata") ExStorageStaticItemEntity metadata) {
String externalId = Long.toString(ExternalDocumentIDGenerator.getNextID());
Long fileSize = FileStorage.uploadAttachment(workspaceId, uploadedInputStream, fileData.getFileName(), externalId);
metadata.setExternalId(externalId);
metadata.setSize(fileSize);
metadata = FileStorageResponseResourceWrapper.wrapWithResources(workspaceId, metadata);
return metadata;
}
@GET
@Path("/{externalId}/downloadBinary")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public InputStream download(
@HeaderParam(HttpHeaders.AUTHORIZATION) String authorization,
@PathParam("workspaceId") String workspaceId, @PathParam("externalId") String externalId) {
InputStream inputStream = FileStorage.downloadAttachment(workspaceId, "", externalId);
return inputStream;
}
@DELETE
@Path("/{externalId}")
@Produces(MediaType.APPLICATION_JSON)
public ExStorageStaticItemEntity deleteFile(
@HeaderParam(HttpHeaders.AUTHORIZATION) String authorization,
@PathParam("workspaceId") String workspaceId, @PathParam("externalId") String externalId) {
FileStorage.deleteAttachment(workspaceId, "", externalId);
return createDummyMetadata(workspaceId, externalId);
}
private ExStorageStaticItemEntity createDummyMetadata(String workspaceId, String externalId) {
ExStorageStaticItemEntity metadata = new ExStorageStaticItemEntity();
metadata.setExternalId("UNKNOWN");
metadata.setId(-1L);
ExStorageUserEntity exStorageUserEntity = new ExStorageUserEntity();
exStorageUserEntity.setDisplayName("USER DISPLAY NAME NOT SUPPORTED");
metadata.setCreator(exStorageUserEntity);
return metadata;
}
}