package com.mossle.internal.store.rs; import java.io.ByteArrayOutputStream; import java.io.InputStream; import javax.activation.DataSource; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import com.mossle.api.store.StoreConnector; import com.mossle.api.store.StoreDTO; import com.mossle.api.tenant.TenantHolder; import com.mossle.core.store.ByteArrayDataSource; import com.mossle.core.util.BaseDTO; import com.mossle.core.util.IoUtils; import com.mossle.core.util.ServletUtils; import com.mossle.internal.store.service.StoreService; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component @Path("store") public class StoreResource { private static Logger logger = LoggerFactory.getLogger(StoreResource.class); private StoreService storeService; private StoreConnector storeConnector; private TenantHolder tenantHolder; @GET @Path("getStore") @Produces(MediaType.APPLICATION_JSON) public BaseDTO getStore(@QueryParam("model") String model, @QueryParam("key") String key, @QueryParam("tenantId") String tenantId) { try { BaseDTO result = new BaseDTO(); StoreDTO storeDto = storeConnector.getStore(model, key, tenantId); ByteArrayOutputStream baos = new ByteArrayOutputStream(); IoUtils.copyStream(storeDto.getDataSource().getInputStream(), baos); String base64 = new String(new Base64().encodeBase64(baos .toByteArray())); result.setCode(200); result.setData(base64); return result; } catch (Exception ex) { logger.error(ex.getMessage(), ex); BaseDTO result = new BaseDTO(); result.setCode(500); result.setMessage(ex.getMessage()); return result; } } @POST @Path("saveStore") @Produces(MediaType.APPLICATION_JSON) public BaseDTO saveStore(@FormParam("model") String model, @FormParam("content") String content, @FormParam("fileName") String fileName, @FormParam("contentType") String contentType, @QueryParam("tenantId") String tenantId) { try { byte[] bytes = new Base64().decodeBase64(content.getBytes("utf-8")); BaseDTO result = new BaseDTO(); DataSource dataSource = new ByteArrayDataSource(fileName, bytes); StoreDTO storeDto = storeService.saveStore(model, dataSource, tenantId); result.setCode(200); result.setData(storeDto.getKey()); return result; } catch (Exception ex) { logger.error(ex.getMessage(), ex); BaseDTO result = new BaseDTO(); result.setCode(500); result.setMessage(ex.getMessage()); return result; } } @GET @Path("view") public void view(@QueryParam("model") String model, @QueryParam("key") String key, HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("model : {}, key : {}", model, key); String tenantId = tenantHolder.getTenantId(); StoreDTO storeDto = storeConnector.getStore(model, key, tenantId); InputStream is = storeDto.getDataSource().getInputStream(); ServletUtils.setFileDownloadHeader(request, response, storeDto .getDataSource().getName()); IOUtils.copy(is, response.getOutputStream()); } @Resource public void setStoreConnector(StoreConnector storeConnector) { this.storeConnector = storeConnector; } @Resource public void setStoreService(StoreService storeService) { this.storeService = storeService; } @Resource public void setTenantHolder(TenantHolder tenantHolder) { this.tenantHolder = tenantHolder; } }