Author: jstrachan
Date: Mon Nov 28 12:12:10 2011
New Revision: 1207097

URL: http://svn.apache.org/viewvc?rev=1207097&view=rev
Log:
Fixes CAMEL-4719 so camel-web works better inside WebLogic; avoiding the use of 
the scalate console unless its present and in debig mode and having a 
precompiled error page to avoid unnecessary runtime compilation of scalate 
templates. Also used the simpler scalate filter which adds support for jade, 
markdown, confluence etc easier with less boilerplate XML in web.xml

Added:
    camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
Modified:
    
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
    camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml

Added: 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml?rev=1207097&view=auto
==============================================================================
--- 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml 
(added)
+++ 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml 
Mon Nov 28 12:12:10 2011
@@ -0,0 +1,212 @@
+-#
+-# Copyright (C) 2009-2011 the original author or authors.
+-# See the notice.md file distributed with this work for additional
+-# information regarding copyright ownership.
+-#
+-# 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.
+-#
+- if ( !engine.isDevelopmentMode )
+  .scalate-error-500
+    %h1 Server Error: We're sorry, but something went wrong.
+    %p We've been notified about this issue and we'll take a look at it 
shortly.
+
+- else
+  - import util.parsing.input.Position
+  - import org.fusesource.scalate._
+  - import org.fusesource.scalate.console._
+  - val consoleHelper = new ConsoleHelper(context)
+  - import consoleHelper._
+  - response.setContentType("text/html")
+  - attributes("layout") = ""
+  !!! Basic
+  %html(lang="en")
+    %head
+      %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
+      %meta(name="keywords" content="error")
+      %title Unexpected Failure
+      %style(type="text/css")
+        :plain
+          html, body {
+              margin: 0;
+              padding: 0;
+              font-family: Helvetica, Arial, Sans;
+              background: #EEEEEE;
+          }
+          .block {
+              padding: 20px;
+              border-bottom: 1px solid #aaa;
+          }
+          #scalate-error .header h1 {
+              font-weight: normal;
+              font-size: 28px;
+              margin: 0;
+          }
+          #scalate-error .more {
+              color: #666;
+              font-size: 80%;
+              border: none;
+          }
+          #scalate-error .header {
+              background: #fcd2da;
+          }
+          #scalate-error .header p {
+              color: #333;
+          }
+          #scalate-error .details {
+              background: #f6f6f6;
+          }
+          #scalate-error .details h2 {
+              font-weight: normal;
+              font-size: 18px;
+              margin: 0 0 10px 0;
+          }
+          #scalate-error .details .lineNumber {
+              float: left;
+              display: block;
+              width: 40px;
+              text-align: right;
+              margin-right: 10px;
+              font-size: 14px;
+              font-family: monospace;
+              background: #333;
+              color: #fff;
+          }
+          #scalate-error .details .line {
+              clear: both;
+              color: #333;
+              margin-bottom: 1px;
+          }
+          #scalate-error .details pre {
+              font-size: 14px;
+              margin: 0;
+              overflow-x: hidden;
+          }
+          #scalate-error .details .error {
+              color: #c00 !important;
+          }
+          #scalate-error .details .error .lineNumber {
+              background: #c00;
+          }
+          #scalate-error .details .errorCol {
+              background: #c00;
+              color:#fff;
+          }
+          #scalate-error .details a {
+              text-decoration: none;
+          }
+          #scalate-error .details a:hover * {
+              cursor: pointer !important;
+          }
+          #scalate-error .details a:hover pre {
+              background: #FAFFCF !important;
+          }
+
+          #scalate-error .details .stacktrace {
+              clear: both;
+              color: #333;
+              margin-bottom: 1px;
+              font-size: 10px;
+          }
+
+          #scalate-error .nested {
+            padding-top:10px;
+            padding-left:10px;
+          }
+
+          #scalate-error .nested .block {
+            padding:10px;
+          }
+          #scalate-error .nested .header {
+            font-size:10px;
+          }
+          #scalate-error .nested .header h1 {
+            font-size:16px;
+          }
+    %body
+      #content
+        .wrapper
+          -# Wrap in a try catch block so if there is a error on this page it 
gets logged to the console
+          - try
+            %link(href={uri("/css/scalate/errors.css")} rel="stylesheet" 
type="text/css")
+  
+            - def displayError(file:String, pos:Position, message:String)
+              .header.block
+                %h1
+                  = message
+
+              .details.block
+                %h2
+                  = editLink(file, pos.line, pos.column)
+                    in #{shorten(file)} near line #{pos.line} col #{pos.column}
+
+                - for (s <- lines(file, pos))
+                  - val ss = s.style(pos.line)
+                  = editLink(file, s.line, (if (pos.line == s.line) pos.column 
else 1))
+                    %div(class=ss)
+                      %span.lineNumber
+                        = s.line
+                      - if (pos.line == s.line)
+                        - val (prefix, ch, postfix) = 
s.splitOnCharacter(pos.column - 1)
+                        %pre<
+                          &~ prefix
+                          %span.errorCol><
+                            &~ ch
+                          &~ postfix
+                      - else
+                        %pre<
+                          &~ s.source
+
+            - def displayException(e:Throwable)
+              .header.block
+                %h1
+                  = e.getMessage
+                %p
+                  = e
+              .details.block
+                - for( stack <- e.getStackTrace )
+                  = renderStackTraceElement(stack)
+                - if( e.getCause!=null )
+                  .nested
+                    - displayException(e.getCause)
+
+            #scalate-error
+              - exception match
+                - case e:InvalidSyntaxException =>
+                  - displayError( e.template, e.pos, e.brief)
+
+                - case e:CompilerException =>
+                  - for ( error <- e.errors )
+                    - displayError(error.file, error.pos, error.message)
+                    - val o = error.original
+                    - if (o != null)
+                      .section.block
+                        = editLink(o.file, o.pos.line, o.pos.column)
+                          from generated #{shorten(o.file)} near line 
#{o.pos.line} col #{o.pos.line}
+
+                - case e:Throwable =>
+                  - displayException(e)
+
+                - case u =>
+                  .header.block
+                    %h1
+                      = errorMessage
+                    %p
+                      = u
+          - catch
+            - case e:Throwable=>
+            - e.printStackTrace
+            -# Fallback to a simple rendering of the error message
+            .header.block
+              %h1
+                = errorMessage
+

Modified: 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml?rev=1207097&r1=1207096&r2=1207097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
 (original)
+++ 
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
 Mon Nov 28 12:12:10 2011
@@ -20,16 +20,22 @@
 -@ var body: String
 -@ var title : String = "Camel Web Console"
 - response.setContentType("text/html") 
+
+-# Only include the console if it's available and the engine is in dev mode.
+- val include_console = engine.isDevelopmentMode && 
engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
+
 %html(lang="en")
   %head
     %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
     %meta(name="description" content="Apache Camel Console")
     %meta(name="keywords" content="camel,eip,web")
 
-    = include("/org/fusesource/scalate/console/console_head.scaml")
+    - if (include_console)
+      = include("/org/fusesource/scalate/console/console_head.scaml")
 
     %link(href={uri("/css/site.css")} rel="stylesheet" type="text/css")
-    %link(href={uri("/css/scalate/console.css")} rel="stylesheet" 
type="text/css")
+    - if (include_console)
+      %link(href={uri("/css/scalate/console.css")} rel="stylesheet" 
type="text/css")
     %link(href={uri("/css/sorttable.css")} rel="stylesheet" type="text/css")
     %link(href={uri("/css/type-settings.css")} rel="stylesheet" 
type="text/css")
 
@@ -104,7 +110,8 @@
                 (
                 %a{:href => "?printable=true"}> printable version
                 )
-                = include("/org/fusesource/scalate/console/console.scaml")
+                - if (include_console)
+                  = include("/org/fusesource/scalate/console/console.scaml")
 
     .design_attribution
       %a{:href => "http://hiramchirino.com/"} Graphic Design By Hiram      
\ No newline at end of file

Modified: camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml?rev=1207097&r1=1207096&r2=1207097&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml (original)
+++ camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml Mon Nov 28 
12:12:10 2011
@@ -75,27 +75,17 @@
     <url-pattern>/*</url-pattern>
   </filter-mapping>
 
-  <servlet>
-    <servlet-name>TemplateEngineServlet</servlet-name>
-    
<servlet-class>org.fusesource.scalate.servlet.TemplateEngineServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>TemplateEngineServlet</servlet-name>
-    <url-pattern>*.mustache</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>TemplateEngineServlet</servlet-name>
-    <url-pattern>*.scaml</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>TemplateEngineServlet</servlet-name>
-    <url-pattern>*.ssp</url-pattern>
-  </servlet-mapping>
+  <filter>
+    <filter-name>TemplateEngineFilter</filter-name>
+    
<filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
+  </filter>
+  <filter-mapping>
+    <filter-name>TemplateEngineFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
 
   <error-page>
     <error-code>500</error-code>
-    <location>/WEB-INF/scalate/errors/500.scaml</location>
+    <location>/WEB-INF/scalate/error.scaml</location>
   </error-page>
 </web-app>


Reply via email to