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>