You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2009/01/12 00:53:03 UTC

svn commit: r733547 - in /tapestry/tapestry5/trunk: src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/main/java/org/apache/tapestry5/services/ tap...

Author: hlship
Date: Sun Jan 11 15:53:02 2009
New Revision: 733547

URL: http://svn.apache.org/viewvc?rev=733547&view=rev
Log:
TAP5-446: Tapestry should output a <meta> tag to identify Tapestry as the generator (with an option to turn this off for applications that don't want to advertise their technology)

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/include_generator_meta.txt
Modified:
    tapestry/tapestry5/trunk/src/site/apt/guide/conf.apt
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.java

Modified: tapestry/tapestry5/trunk/src/site/apt/guide/conf.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/conf.apt?rev=733547&r1=733546&r2=733547&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/guide/conf.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/guide/conf.apt Sun Jan 11 15:53:02 2009
@@ -161,7 +161,11 @@
 
   [tapestry.min-gzip-size]
     The minimum stream size necessary for Tapestry to use GZIP compression on the response stream.
-    
+
+  [tapestry.omit-generator-meta]
+    If "true", then the \<meta\> tag that Tapestry normally writes into the \<head\>, identifying the Tapestry version,
+    will be omitted.  Use this when you do not wish to advertise your application's use of Tapestry.
+
   [tapestry.production-mode]
     A flag (true or false) indicating whether the application is running in production or in development. The default
     is true, which means that runtime exceptions are not reported with full detail (only the root exception message

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=733547&r1=733546&r2=733547&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java Sun Jan 11 15:53:02 2009
@@ -124,4 +124,12 @@
      * @since 5.1.0.0
      */
     public static final String APPLICATION_VERSION = "tapestry.application-version";
+
+    /**
+     * Used to omit the normal Tapestry framework generator meta tag. The meta tag is rendered by default, but clients
+     * who do not wish to advertise their use of Tapstry may set this symbol to "true".
+     *
+     * @since 5.1.0.0
+     */
+    public static final String OMIT_GENERATOR_META = "tapestry.omit-generator-meta";
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java?rev=733547&r1=733546&r2=733547&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java Sun Jan 11 15:53:02 2009
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2009 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -36,10 +36,19 @@
 
     private final boolean scriptsAtTop;
 
-    public DocumentLinkerImpl(boolean productionMode, boolean scriptsAtTop)
+    private final boolean omitGeneratorMetaTag;
+
+    private final String tapestryBanner;
+
+    public DocumentLinkerImpl(boolean productionMode, boolean scriptsAtTop, boolean omitGeneratorMetaTag,
+                              String tapestryVersion)
     {
+
         developmentMode = !productionMode;
         this.scriptsAtTop = scriptsAtTop;
+        this.omitGeneratorMetaTag = omitGeneratorMetaTag;
+
+        tapestryBanner = String.format("Apache Tapestry Framework (version %s)", tapestryVersion);
     }
 
     public void addStylesheetLink(String styleURL, String media)
@@ -82,6 +91,14 @@
         if (!stylesheets.isEmpty())
             addStylesheetsToHead(root, includedStylesheets);
 
+        if (!omitGeneratorMetaTag)
+        {
+            Element head = findOrCreateElement(root, "head", true);
+            head.element("meta",
+                         "name", "generator",
+                         "content", tapestryBanner);
+        }
+
         addScriptElements(root);
     }
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=733547&r1=733546&r2=733547&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Sun Jan 11 15:53:02 2009
@@ -1490,6 +1490,12 @@
                                          @Path("${tapestry.spacer-image}")
                                          final Asset spacerImage,
 
+                                         @Symbol(SymbolConstants.OMIT_GENERATOR_META)
+                                         final boolean omitGeneratorMeta,
+
+                                         @Inject @Symbol(SymbolConstants.TAPESTRY_VERSION)
+                                         final String tapestryVersion,
+
                                          final ValidationMessagesSource validationMessagesSource,
 
                                          final SymbolSource symbolSource,
@@ -1500,7 +1506,8 @@
         {
             public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer)
             {
-                DocumentLinkerImpl linker = new DocumentLinkerImpl(productionMode, scriptsAtTop);
+                DocumentLinkerImpl linker = new DocumentLinkerImpl(productionMode, scriptsAtTop, omitGeneratorMeta,
+                                                                   tapestryVersion);
 
                 environment.push(DocumentLinker.class, linker);
 
@@ -1913,6 +1920,7 @@
         configuration.add(SymbolConstants.MIN_GZIP_SIZE, "100");
 
         configuration.add(SymbolConstants.APPLICATION_VERSION, Long.toHexString(System.currentTimeMillis()));
+        configuration.add(SymbolConstants.OMIT_GENERATOR_META, "false");
     }
 
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.java?rev=733547&r1=733546&r2=733547&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.java Sun Jan 11 15:53:02 2009
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2009 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -34,7 +34,7 @@
 
         document.newRootElement("not-html").text("not an HTML document");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         // Only checked if there's something to link.
 
@@ -60,7 +60,7 @@
 
         document.newRootElement("not-html").text("not an HTML document");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         // Only checked if there's something to link.
 
@@ -82,7 +82,7 @@
     {
         Document document = new Document();
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addScript("foo.js");
         linker.addScript("doSomething();");
@@ -99,7 +99,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addScriptLink("foo.js");
         linker.addScriptLink("bar/baz.js");
@@ -110,6 +110,24 @@
         check(document, "add_script_links.txt");
     }
 
+    /**
+     * TAP5-446
+     */
+    @Test
+    public void include_generator_meta() throws Exception
+    {
+        Document document = new Document(new XMLMarkupModel());
+
+        document.newRootElement("html").element("body").element("p").text("Ready to be marked with generator meta.");
+
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, false, "1.2.3");
+
+        linker.updateDocument(document);
+
+
+        check(document, "include_generator_meta.txt");
+    }
+
     @Test
     public void empty_document_with_scripts_at_top() throws Exception
     {
@@ -117,7 +135,7 @@
 
         document.newRootElement("html");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, true);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, true, true, "1.2.3");
 
         linker.addStylesheetLink("style.css", "print");
         linker.addScriptLink("foo.js");
@@ -136,7 +154,7 @@
 
         document.newRootElement("html");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addStylesheetLink("style.css", "print");
         linker.addScriptLink("foo.js");
@@ -155,7 +173,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts at top.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, true);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, true, true, "1.2.3");
 
         linker.addScriptLink("foo.js");
         linker.addScriptLink("bar/baz.js");
@@ -173,7 +191,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with styles.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addStylesheetLink("foo.css", null);
         linker.addStylesheetLink("bar/baz.css", "print");
@@ -190,7 +208,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with styles.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addStylesheetLink("foo.css", null);
         linker.addStylesheetLink("bar/baz.css", "print");
@@ -211,7 +229,7 @@
         document.newRootElement("html").element("head").comment("existing head").getParent()
                 .element("body").text("body content");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addStylesheetLink("foo.css", null);
 
@@ -227,7 +245,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         for (int i = 0; i < 3; i++)
         {
@@ -248,7 +266,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addScript("doSomething();");
         linker.addScript("doSomethingElse();");
@@ -265,7 +283,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(false, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(false, false, true, "1.2.3");
 
         linker.addScriptLink("foo.js");
 
@@ -284,7 +302,7 @@
 
         document.newRootElement("html").element("notbody").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addScriptLink("foo.js");
 
@@ -293,6 +311,7 @@
         check(document, "no_body_element.txt");
     }
 
+
     @Test
     public void script_written_raw() throws Exception
     {
@@ -300,7 +319,7 @@
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.");
 
-        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false);
+        DocumentLinkerImpl linker = new DocumentLinkerImpl(true, false, true, "1.2.3");
 
         linker.addScript("for (var i = 0; i < 5; i++)  { doIt(i); }");
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/include_generator_meta.txt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/include_generator_meta.txt?rev=733547&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/include_generator_meta.txt (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/include_generator_meta.txt Sun Jan 11 15:53:02 2009
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<html><head><meta content="Apache Tapestry Framework (version 1.2.3)" name="generator"/></head><body><p>Ready to be marked with generator meta.</p></body></html>
\ No newline at end of file