content: package alien4cloud.servlet;
  
  import java.io.IOException;
  import java.io.OutputStream;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.springframework.context.ApplicationContext;
  import org.springframework.http.HttpStatus;
  import org.springframework.stereotype.Component;
  import org.springframework.web.context.support.WebApplicationContextUtils;
  
  import alien4cloud.images.IImageDAO;
  import alien4cloud.images.ImageData;
  import alien4cloud.utils.ImageQuality;
  
  /**
   * A servlet that query an image by id and return's it.
   * 
   * @author luc boutier
   */
  @Component
  public class ImageServlet extends HttpServlet {
      private static final long serialVersionUID = 1L;
  
      private IImageDAO imageDAO;
  
      @Override
      public void init(ServletConfig config) throws ServletException {
          super.init(config);
          ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
          this.imageDAO = context.getBean(IImageDAO.class);
      }
  
      @Override
      protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
          final String imageId = req.getParameter("id");
          final String quality = req.getParameter("quality");
          final ImageQuality imageQuality;
          if (quality == null) {
              imageQuality = ImageQuality.QUALITY_BEST;
          } else {
              imageQuality = ImageQuality.valueOf(quality);
          }
  
          final ImageData imageData = this.imageDAO.readImage(imageId, imageQuality);
          if (imageData != null) {
              // Set content type
              resp.setContentType(imageData.getMime());
              // Set content size
              resp.setContentLength(imageData.getData().length);
  
              // Open the file and output streams
              final OutputStream out = resp.getOutputStream();
              try {
                  out.write(imageData.getData());
              } finally {
                  out.close();
              }
          } else {
              resp.setStatus(HttpStatus.NOT_FOUND.value());
          }
      }
  }