Author: sp...@google.com
Date: Fri Mar 27 08:09:11 2009
New Revision: 5095

Modified:
    trunk/dev/core/src/com/google/gwt/dev/GWTShell.java
    trunk/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java
     
trunk/dev/core/src/com/google/gwt/dev/shell/tomcat/EmbeddedTomcatServer.java

Log:
The rest of the implementation of -noserver hosted
mode test.  r5094 was incomplete.

Review by: jat



Modified: trunk/dev/core/src/com/google/gwt/dev/GWTShell.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/GWTShell.java (original)
+++ trunk/dev/core/src/com/google/gwt/dev/GWTShell.java Fri Mar 27 08:09:11  
2009
@@ -234,7 +234,7 @@
    protected int doStartUpServer() {
      // TODO(bruce): make tomcat work in terms of the modular launcher
      String whyFailed = EmbeddedTomcatServer.start(getTopLogger(),  
getPort(),
-        options);
+        options, shouldAutoGenerateResources());

      // TODO(bruce): test that we can remove this old approach in favor of
      // a better, logger-based error reporting
@@ -259,5 +259,15 @@
       * magic?
       */
      return false;
+  }
+
+  /**
+   * Whether this shell should auto-generate GWT resources when it  
recognizes
+   * requests for them. By default this is true. Subclasses can disable  
such
+   * auto-generation and make this servlet appear to be like any arbitrary  
web
+   * server that knows nothing about GWT.
+   */
+  protected boolean shouldAutoGenerateResources() {
+    return true;
    }
  }

Modified: trunk/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java     
(original)
+++ trunk/dev/core/src/com/google/gwt/dev/shell/GWTShellServlet.java    Fri  
Mar 27 08:09:11 2009
@@ -116,12 +116,12 @@

    private int nextRequestId;

-  private WorkDirs workDirs;
-
    private final Object requestIdLock = new Object();

    private TreeLogger topLogger;

+  private WorkDirs workDirs;
+
    public GWTShellServlet() {
      initMimeTypes();
    }
@@ -409,9 +409,11 @@
      logger = logger.branch(TreeLogger.TRACE, msg, null);

      // Handle auto-generation of resources.
-    if (autoGenerateResources(request, response, logger, partialPath,
-        moduleName)) {
-      return;
+    if (shouldAutoGenerateResources()) {
+      if (autoGenerateResources(request, response, logger, partialPath,
+          moduleName)) {
+        return;
+      }
      }

      URL foundResource = null;
@@ -419,20 +421,22 @@
        // Look for the requested file on the public path.
        //
        ModuleDef moduleDef = getModuleDef(logger, moduleName);
-      Resource publicResource = moduleDef.findPublicFile(partialPath);
-      if (publicResource != null) {
-        foundResource = publicResource.getURL();
-      }
+      if (shouldAutoGenerateResources()) {
+        Resource publicResource = moduleDef.findPublicFile(partialPath);
+        if (publicResource != null) {
+          foundResource = publicResource.getURL();
+        }

-      if (foundResource == null) {
-        // Look for public generated files
-        File shellDir = getShellWorkDirs().getShellPublicGenDir(moduleDef);
-        File requestedFile = new File(shellDir, partialPath);
-        if (requestedFile.exists()) {
-          try {
-            foundResource = requestedFile.toURI().toURL();
-          } catch (MalformedURLException e) {
-            // ignore since it was speculative anyway
+        if (foundResource == null) {
+          // Look for public generated files
+          File shellDir =  
getShellWorkDirs().getShellPublicGenDir(moduleDef);
+          File requestedFile = new File(shellDir, partialPath);
+          if (requestedFile.exists()) {
+            try {
+              foundResource = requestedFile.toURI().toURL();
+            } catch (MalformedURLException e) {
+              // ignore since it was speculative anyway
+            }
            }
          }
        }
@@ -884,6 +888,16 @@
          HttpHeaders.CACHE_CONTROL_MAXAGE + cacheTime);
      String expiresString = HttpHeaders.toInternetDateFormat(expires);
      response.setHeader(HttpHeaders.EXPIRES, expiresString);
+  }
+
+  private boolean shouldAutoGenerateResources() {
+    ServletContext servletContext = getServletContext();
+    final String attr  
= "com.google.gwt.dev.shell.shouldAutoGenerateResources";
+    Boolean attrValue = (Boolean) servletContext.getAttribute(attr);
+    if (attrValue == null) {
+      return true;
+    }
+    return attrValue;
    }

    private void streamOut(InputStream in, OutputStream out, int bufferSize)

Modified:  
trunk/dev/core/src/com/google/gwt/dev/shell/tomcat/EmbeddedTomcatServer.java
==============================================================================
---  
trunk/dev/core/src/com/google/gwt/dev/shell/tomcat/EmbeddedTomcatServer.java    
 
(original)
+++  
trunk/dev/core/src/com/google/gwt/dev/shell/tomcat/EmbeddedTomcatServer.java    
 
Fri Mar 27 08:09:11 2009
@@ -60,14 +60,19 @@
      return sTomcat.port;
    }

+  public static String start(TreeLogger topLogger, int port, WorkDirs  
workDirs) {
+    return start(topLogger, port, workDirs, true);
+  }
+
    public static synchronized String start(TreeLogger topLogger, int port,
-      WorkDirs workDirs) {
+      WorkDirs workDirs, boolean shouldAutoGenerateResources) {
      if (sTomcat != null) {
        throw new IllegalStateException("Embedded Tomcat is already  
running");
      }

      try {
-      new EmbeddedTomcatServer(topLogger, port, workDirs);
+      new EmbeddedTomcatServer(topLogger, port, workDirs,
+          shouldAutoGenerateResources);
        return null;
      } catch (LifecycleException e) {
        String msg = e.getMessage();
@@ -146,7 +151,8 @@
    private final TreeLogger startupBranchLogger;

    private EmbeddedTomcatServer(final TreeLogger topLogger, int  
listeningPort,
-      final WorkDirs workDirs) throws LifecycleException {
+      final WorkDirs workDirs, final boolean shouldAutoGenerateResources)
+      throws LifecycleException {
      if (topLogger == null) {
        throw new NullPointerException("No logger specified");
      }
@@ -233,6 +239,8 @@
            StandardContext webapp = (StandardContext) event.getData();
            publishShellLoggerAttribute(logger, topLogger, webapp);
            publishShellWorkDirsAttribute(logger, workDirs, webapp);
+          publishShouldAutoGenerateResourcesAttribute(logger,
+              shouldAutoGenerateResources, webapp);
          }
        }
      });
@@ -428,5 +436,15 @@
        WorkDirs workDirs, StandardContext webapp) {
      final String attr = "com.google.gwt.dev.shell.workdirs";
      publishAttributeToWebApp(logger, webapp, attr, workDirs);
+  }
+
+  /**
+   * Publish to the web app whether it should automatically generate  
resources.
+   */
+  private void publishShouldAutoGenerateResourcesAttribute(TreeLogger  
logger,
+      boolean shouldAutoGenerateResources, StandardContext webapp) {
+    publishAttributeToWebApp(logger, webapp,
+        "com.google.gwt.dev.shell.shouldAutoGenerateResources",
+        shouldAutoGenerateResources);
    }
  }

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to