Author: drobiazko
Date: Fri Jun 10 05:25:42 2011
New Revision: 1134191

URL: http://svn.apache.org/viewvc?rev=1134191&view=rev
Log:
TAP5-1543: Introduce Tapestry schema in version 5_3

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/parameter_namespace_element_deprecated.tml
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java?rev=1134191&r1=1134190&r2=1134191&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SaxTemplateParser.java
 Fri Jun 10 05:25:42 2011
@@ -46,6 +46,10 @@ import org.apache.tapestry5.ioc.internal
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 
+import static 
org.apache.tapestry5.internal.services.SaxTemplateParser.Version.T_5_0;
+import static 
org.apache.tapestry5.internal.services.SaxTemplateParser.Version.T_5_1;
+import static 
org.apache.tapestry5.internal.services.SaxTemplateParser.Version.T_5_3;
+
 /**
  * SAX-based template parser logic, taking a {@link Resource} to a Tapestry
  * template file and returning
@@ -70,20 +74,13 @@ public class SaxTemplateParser
 
     public static final String XML_NAMESPACE_URI = 
"http://www.w3.org/XML/1998/namespace";;
 
-    /**
-     * Used as the namespace URI for Tapestry templates.
-     */
-    public static final String TAPESTRY_SCHEMA_5_0_0 = 
"http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";;
-
-    /**
-     * Adds several new elements.
-     */
-    public static final String TAPESTRY_SCHEMA_5_1_0 = 
"http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";;
+    private static final Map<String, Version> NAMESPACE_URI_TO_VERSION = 
CollectionFactory.newMap();
 
-    // Might want to change this from a Set to a map from URI to version number
-    // (if we hit a 3rd version of the namespace URI).
-    private static final Set<String> TAPESTRY_SCHEMA_URIS = 
CollectionFactory.newSet(
-            TAPESTRY_SCHEMA_5_0_0, TAPESTRY_SCHEMA_5_1_0);
+    {
+        
NAMESPACE_URI_TO_VERSION.put("http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";,
 T_5_0);
+        
NAMESPACE_URI_TO_VERSION.put("http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";,
 T_5_1);
+        
NAMESPACE_URI_TO_VERSION.put("http://tapestry.apache.org/schema/tapestry_5_3.xsd";,
 T_5_3);
+    }
 
     /**
      * Special namespace used to denote Block parameters to components, as a
@@ -228,8 +225,9 @@ public class SaxTemplateParser
 
         String uri = tokenStream.getNamespaceURI();
         String name = tokenStream.getLocalName();
+        Version version = NAMESPACE_URI_TO_VERSION.get(uri);
 
-        if (TAPESTRY_SCHEMA_5_1_0.equals(uri))
+        if (T_5_1.before(version))
         {
             if (name.equalsIgnoreCase("extend"))
             {
@@ -238,7 +236,7 @@ public class SaxTemplateParser
             }
         }
 
-        if (TAPESTRY_SCHEMA_URIS.contains(uri))
+        if (version != null)
         {
             if (name.equalsIgnoreCase("container"))
             {
@@ -260,7 +258,7 @@ public class SaxTemplateParser
             {
                 case START_ELEMENT:
 
-                    if 
(tokenStream.getNamespaceURI().equals(TAPESTRY_SCHEMA_5_1_0)
+                    if 
(T_5_1.before(NAMESPACE_URI_TO_VERSION.get(tokenStream.getNamespaceURI()))
                             && 
tokenStream.getLocalName().equalsIgnoreCase("replace"))
                     {
                         replace(state);
@@ -350,8 +348,9 @@ public class SaxTemplateParser
 
         String uri = tokenStream.getNamespaceURI();
         String name = tokenStream.getLocalName();
+        Version version = NAMESPACE_URI_TO_VERSION.get(uri);
 
-        if (TAPESTRY_SCHEMA_5_1_0.equals(uri))
+        if (T_5_1.before(version))
         {
 
             if (name.equalsIgnoreCase("remove"))
@@ -382,7 +381,7 @@ public class SaxTemplateParser
                 mustBeRoot(name);
         }
 
-        if (TAPESTRY_SCHEMA_URIS.contains(uri))
+        if (version != null)
         {
 
             if (name.equalsIgnoreCase("body"))
@@ -404,6 +403,12 @@ public class SaxTemplateParser
 
             if (name.equalsIgnoreCase("parameter"))
             {
+                if(T_5_3.before(version))
+                {
+                    throw new RuntimeException(
+                            String.format("The <parameter> element has been 
deprecated in Tapestry 5.3 in favour of '%s' namespace.", 
TAPESTRY_PARAMETERS_URI));
+                }
+
                 classicParameter(state);
 
                 return;
@@ -696,7 +701,7 @@ public class SaxTemplateParser
 
             String value = tokenStream.getAttributeValue(i);
 
-            if (TAPESTRY_SCHEMA_URIS.contains(uri))
+            if (NAMESPACE_URI_TO_VERSION.containsKey(uri))
             {
                 if (localName.equalsIgnoreCase(ID_ATTRIBUTE_NAME))
                 {
@@ -766,7 +771,7 @@ public class SaxTemplateParser
             // These URIs are strictly part of the server-side Tapestry 
template
             // and are not ever sent to the client.
 
-            if (TAPESTRY_SCHEMA_URIS.contains(uri))
+            if (NAMESPACE_URI_TO_VERSION.containsKey(uri))
                 continue;
 
             if (uri.equals(TAPESTRY_PARAMETERS_URI))
@@ -1115,4 +1120,30 @@ public class SaxTemplateParser
                     textStartLocation));
     }
 
+    static enum Version
+    {
+        T_5_0(5,0), T_5_1(5,1), T_5_3(5,3);
+
+        private int major;
+        private int minor;
+
+
+        private Version(int major, int minor)
+        {
+            this.major = major;
+            this.minor = minor;
+        }
+
+        public boolean before(Version other)
+        {
+            if(other == null)
+                return false;
+
+            if(this == other)
+                return true;
+
+            return major <= other.major && minor <= other.minor;
+        }
+    }
+
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java?rev=1134191&r1=1134190&r2=1134191&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
 Fri Jun 10 05:25:42 2011
@@ -695,6 +695,8 @@ public class TemplateParserImplTest exte
                 { "misplaced_parameter.tml", "Block parameters are only 
allowed directly within component elements.",
                         5 },
 
+                { "parameter_namespace_element_deprecated.tml", "The 
<parameter> element has been deprecated in Tapestry 5.3 in favour of 
'tapestry:parameter' namespace.", 4 },
+
         };
     }
 

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/parameter_namespace_element_deprecated.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/parameter_namespace_element_deprecated.tml?rev=1134191&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/parameter_namespace_element_deprecated.tml
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/parameter_namespace_element_deprecated.tml
 Fri Jun 10 05:25:42 2011
@@ -0,0 +1,9 @@
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"; 
xml:space="preserve">
+
+    <t:mycomp t:id="foo">
+        <t:parameter name="fred">
+            <!-- fred content -->
+        </t:parameter>
+    </t:mycomp>
+
+</html>


Reply via email to