All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.sitebricks.channel.CometJSServlet Maven / Gradle / Ivy

package com.google.sitebricks.channel;

import org.apache.commons.io.IOUtils;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @author [email protected] (Dhanji R. Prasanna)
 */
@Singleton
class CometJSServlet extends HttpServlet {
  static final String JQUERY_URL_PATTERN = "/jquery-1.7.1.js";
  static final String SOCKET_URL_PATTERN = "/__js";
  private static final String SOCKET_JS;
  private final AtomicReference jqueryJs = new AtomicReference();

  static {
    try {
      SOCKET_JS = IOUtils.toString(CometJSServlet.class.getResourceAsStream("socket.js"), "UTF-8");
    } catch (IOException e) {
      throw new ExceptionInInitializerError(e);
    }
  }

  private final String channelUrl;

  @Inject
  CometJSServlet(@Named(ChannelModule.CHANNEL_URL_NAME) String channelUrl) {
    this.channelUrl = channelUrl;
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
      IOException {
    resp.setContentType("application/javascript");
    if (req.getRequestURI().endsWith(JQUERY_URL_PATTERN)) {
      String jqueryJs = this.jqueryJs.get();
      if (jqueryJs == null) {
        jqueryJs = IOUtils.toString(CometJSServlet.class.getResourceAsStream("jquery-1.7.1.min.js"), "UTF-8");
        this.jqueryJs.compareAndSet(null, jqueryJs);
      }

      resp.setHeader("Cache-Control", "max-age=315360000");
      IOUtils.write(jqueryJs, resp.getOutputStream());
      return;
    }

    resp.setHeader("Pragma", "no-cache"); // HTTP 1.0
    resp.setHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT"); // HTTP 1.0
    resp.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
    IOUtils.write(SOCKET_JS
        .replaceFirst("\\$_SITEBRICKS_URL_PREFIX_\\$", channelUrl)
        .replaceFirst("\\$_SITEBRICKS_SOCKET_ID_\\$", UUID.randomUUID().toString()),
        resp.getOutputStream());
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy