Java tutorial
/******************************************************************************* * Copyright (c) 2014 Uimirror. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Uimirror license * which accompanies this distribution, and is available at * http://www.uimirror.com/legal * * Contributors: * Uimirror Team *******************************************************************************/ package com.uimirror.image.endpoint; import static com.uimirror.image.endpoint.ImageConfConstants.CACHE_AGE; import static com.uimirror.image.endpoint.ImageConfConstants.CONTENT_TYPE_IMAGE; import static com.uimirror.image.endpoint.ImageConfConstants.GET_PATH; import static com.uimirror.image.endpoint.ImageConfConstants.HTTP_SUCESS; import static com.uimirror.image.endpoint.ImageConfConstants.ROOT; import static com.uimirror.image.endpoint.ImageConfConstants.GET_DELETE_PATH; import static com.uimirror.image.endpoint.ImageConfConstants.GET_UPLOAD_PATH; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.inject.Singleton; import javax.ws.rs.BeanParam; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.uimirror.core.service.TransformerService; import com.uimirror.core.Processor; import com.uimirror.core.util.DateTimeUtil; import com.uimirror.image.core.UimSnap; import com.uimirror.image.form.UimImageFormParam; import com.uimirror.image.form.UimImageUploadFormParam; /** * End point for the various client operation * * @author Jay */ @Path(ROOT) @Singleton public class UimImageEndPoint { private static Logger LOG = LoggerFactory.getLogger(UimImageEndPoint.class); private @Autowired Processor<UimSnap, BufferedImage> imageReadProcessor; private @Autowired Processor<UimSnap, String> imageDeleteProcessor; private @Autowired Processor<UimSnap, String> imageUploadProcessor; private @Autowired TransformerService<UimImageFormParam, UimSnap> requestParamToUimSnapTransformer; private @Autowired TransformerService<UimImageUploadFormParam, UimSnap> requestUploadParamToUimSnapTransformer; public UimImageEndPoint() { //NOP } @GET @Produces(CONTENT_TYPE_IMAGE) @Path(GET_PATH) public Object getPicture(@BeanParam UimImageFormParam param) { boolean isExpiredToken = false; isExpiredToken = DateTimeUtil.isBefore(param.getToken()); BufferedImage img = null; if (isExpiredToken) { return Response.status(Status.NOT_FOUND).build(); } else { UimSnap transform = requestParamToUimSnapTransformer.transform(param); img = imageReadProcessor.invoke(transform); //getImageService().getImage(profPath, param.getSize(), param.getImage(), param.getFbt()); byte[] imageData = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "png", baos); imageData = baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } ResponseBuilder rb = Response.ok(new ByteArrayInputStream(imageData)).status(200) .header(HttpHeaders.CONTENT_LENGTH, 1024).header("Content-type", "image/png"); CacheControl cc = new CacheControl(); cc.setMaxAge(CACHE_AGE); cc.setNoCache(false); return rb.cacheControl(cc).build(); } } /** * @param uploadedInputStream * @param fileDetail * @return */ @POST @Path(GET_UPLOAD_PATH) @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile(@BeanParam UimImageUploadFormParam param) { boolean isExpiredToken = DateTimeUtil.isBefore(param.getToken()); String output = ""; if (isExpiredToken) { return Response.status(Status.NOT_FOUND).build(); } else { UimSnap transform = requestUploadParamToUimSnapTransformer.transform(param); output = imageUploadProcessor.invoke(transform); } return Response.status(HTTP_SUCESS).entity(output).build(); } @GET @Path(GET_DELETE_PATH) public Response deleteFile(@BeanParam UimImageFormParam param) { boolean isExpiredToken = DateTimeUtil.isBefore(param.getToken()); String output = ""; if (isExpiredToken) { return Response.status(Status.NOT_FOUND).build(); } else { UimSnap transform = requestParamToUimSnapTransformer.transform(param); output = imageDeleteProcessor.invoke(transform); } return Response.status(HTTP_SUCESS).entity(output).build(); } }