com.uimirror.image.endpoint.UimImageEndPoint.java Source code

Java tutorial

Introduction

Here is the source code for com.uimirror.image.endpoint.UimImageEndPoint.java

Source

/*******************************************************************************
 * 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();
    }
}