Project: activiti-explorer
/* 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.activiti.explorer.servlet; 
 
import java.io.BufferedWriter; 
import java.io.IOException; 
 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
 
import org.activiti.explorer.ExplorerApp; 
import org.springframework.web.context.WebApplicationContext; 
import org.springframework.web.context.support.WebApplicationContextUtils; 
 
import com.vaadin.Application; 
import com.vaadin.terminal.gwt.server.AbstractApplicationServlet; 
import com.vaadin.ui.Window; 
 
/**
 * Servlet providing Activiti and Spring integration with Vaadin 
 *  
 * @author Patrick Oberg 
 * @author Joram Barrez 
 */
 
public class ExplorerApplicationServlet extends AbstractApplicationServlet { 
 
  private static final long serialVersionUID = 1L
   
  protected WebApplicationContext applicationContext; 
 
  @Override 
  public void init(ServletConfig servletConfig) throws ServletException { 
    super.init(servletConfig); 
    applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletConfig.getServletContext()); 
  } 
 
  @Override 
  protected Class< ? extends Application> getApplicationClass() throws ClassNotFoundException { 
    return ExplorerApp.class
  } 
 
  @Override 
  protected Application getNewApplication(HttpServletRequest request) { 
    return (Application) applicationContext.getBean(ExplorerApp.class); 
  } 
   
  @Override 
  protected void writeAjaxPageHtmlVaadinScripts(Window window, String themeName, Application application, BufferedWriter page, String appUrl, String themeUri, 
          String appId, HttpServletRequest request) throws ServletException, IOException { 
    super.writeAjaxPageHtmlVaadinScripts(window, themeName, application, page, appUrl, themeUri, appId, request); 
     
    // Add static JS files 
    String scrollJs = themeUri + "/js/vscrollarea.js"
    page.write("<script type=\"text/javascript\" src=\"" + scrollJs + "\" />"); 
     
    String browserDependentCss = "<script type=\"text/javascript\">//<![CDATA[" + 
      "var mobi = ['opera', 'iemobile', 'webos', 'android', 'blackberry', 'ipad', 'safari'];" + 
      "var midp = ['blackberry', 'symbian'];" + 
      "var ua = navigator.userAgent.toLowerCase();" + 
      "if ((ua.indexOf('midp') != -1) || (ua.indexOf('mobi') != -1) || ((ua.indexOf('ppc') != -1) && (ua.indexOf('mac') == -1)) || (ua.indexOf('webos') != -1)) {" + 
      "  document.write('<link rel=\"stylesheet\" href=\"" + themeUri +"/allmobile.css\" type=\"text/css\" media=\"all\"/>');" + 
      "  if (ua.indexOf('midp') != -1) {" + 
      "    for (var i = 0; i < midp.length; i++) {" + 
      "      if (ua.indexOf(midp[i]) != -1) {" + 
      "        document.write('<link rel=\"stylesheet\" href=\"" + themeUri +"' + midp[i] + '.css\" type=\"text/css\"/>');" + 
      "      }" + 
      "    }"
      "  }" + 
     "   else {"
     "     if ((ua.indexOf('mobi') != -1) || (ua.indexOf('ppc') != -1) || (ua.indexOf('webos') != -1)) {" + 
     "       for (var i = 0; i < mobi.length; i++) {" + 
     "         if (ua.indexOf(mobi[i]) != -1) {" + 
     "           if ((mobi[i].indexOf('blackberry') != -1) && (ua.indexOf('6.0') != -1)) {" + 
     "             document.write('<link rel=\"stylesheet\" href=\"" + themeUri + "' + mobi[i] + '6.0.css\" type=\"text/css\"/>');" + 
     "           }" + 
     "           else {" + 
     "             document.write('<link rel=\"stylesheet\" href=\"" + themeUri + "' + mobi[i] + '.css\" type=\"text/css\"/>');" + 
     "           }" + 
     "          break;" + 
     "         }" + 
     "       }" + 
     "     }" + 
     "   }" + 
     " }" + 
     "if ((navigator.userAgent.indexOf('iPhone') != -1) || (navigator.userAgent.indexOf('iPad') != -1)) {" + 
     " document.write('<meta name=\"viewport\" content=\"width=device-width\" />');" + 
    "}" + 
    "  //]]>" + 
    "</script>" + 
    "<!--[if lt IE 7]><link rel=\"stylesheet\" type=\"text/css\" href=\"" + themeUri + "/lt7.css\" /><![endif]-->"
     
    page.write(browserDependentCss); 
  } 
}