Package org.eurekastreams.server.service.servlets

Source Code of org.eurekastreams.server.service.servlets.GetImageServlet

/*
* Copyright (c) 2010 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.server.service.servlets;

import java.awt.image.RenderedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eurekastreams.server.service.actions.strategies.ImageWriter;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

/**
* Get an Image via a Servlet.
*
*/
public class GetImageServlet extends HttpServlet
{
    /**
     * Logger.
     */
    private Log log = LogFactory.getLog(GetImageServlet.class);
    /**
     * The spring factory.
     */
    private ApplicationContext springContext;

    /**
     * Serial.
     */
    private static final long serialVersionUID = 1L;

    /**
     * 404 is a magic number, he lived by the sea.
     */
    private static final int NOTFOUND = 404;

    /**
     * 500 is even more special. Treat him right.
     */
    private static final int ERROR = 500;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetImageServlet()
    {
        super();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
            IOException
    {
        springContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
        ImageWriter imageWriter = (ImageWriter) springContext.getBean("imageWriter");
        RenderedImage image = imageWriter.read(request.getParameter("img"));

        // show a 404 page
        if (image == null)
        {
            httpError(NOTFOUND, response);
        }
        else
        {
            BufferedOutputStream bos = null;
            ByteArrayOutputStream baos = null;

            try
            {
                baos = new ByteArrayOutputStream();
                ImageIO.write(image, "png", baos);

                bos = new BufferedOutputStream(response.getOutputStream());

                response.setContentType("image/png");
                response.setContentLength(baos.toByteArray().length);

                bos.write(baos.toByteArray());

            }
            catch (Exception e)
            {
                // Tell the user there was some internal server error.\
                // 500 - Internal server error.
                httpError(ERROR, response);
            }
            finally
            {
                if (baos != null)
                {
                    try
                    {
                        baos.close();
                    }
                    catch (IOException e)
                    {
                        log.error(e);
                        // To late to do anything about it now, we may have already sent some data to user.
                    }
                }
                if (bos != null)
                {
                    try
                    {
                        bos.close();
                    }
                    catch (IOException e)
                    {
                        log.error(e);
                        // To late to do anything about it now, we may have already sent some data to user.
                    }
                }
            }
        }

    }

    /**
     * Pump out an HTTP error.
     *
     * @param statusCode
     *            the status code.
     * @param response
     *            the response.
     */
    private void httpError(final int statusCode, final HttpServletResponse response)
    {
        try
        {
            response.setStatus(statusCode);
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.append("<html><body><h1>Error Code: " + statusCode + "</h1><body></html>");
            writer.flush();
        }
        catch (IOException e)
        {
            log.error(e);
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
            throws ServletException, IOException
    {
        doGet(request, response);
    }
}
TOP

Related Classes of org.eurekastreams.server.service.servlets.GetImageServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.