Updated Branches: refs/heads/5.3 f656ce399 -> 7c95c161e
FIXED - TAP5-2097: Use a JavaScriptStack to import the tapestry-beanvalidator.js file. - apply Alejandro Scandroli's patch without changes Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/7c95c161 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/7c95c161 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/7c95c161 Branch: refs/heads/5.3 Commit: 7c95c161ee2f9c7af0b18c517e086e421e95e6f4 Parents: f656ce3 Author: kaosko <[email protected]> Authored: Sat Apr 13 20:48:23 2013 -0700 Committer: kaosko <[email protected]> Committed: Sat Apr 13 20:48:23 2013 -0700 ---------------------------------------------------------------------- .../beanvalidator/BeanValidatorModule.java | 43 ++++------ .../beanvalidator/BeanValidatorStack.java | 46 ++++++++++ .../FormResourcesInclusionWorker.java | 65 +++++++++++++++ 3 files changed, 126 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c95c161/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorModule.java ---------------------------------------------------------------------- diff --git a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorModule.java b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorModule.java index e64fb4b..82d1a68 100644 --- a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorModule.java +++ b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorModule.java @@ -13,18 +13,20 @@ // limitations under the License. package org.apache.tapestry5.beanvalidator; -import org.apache.tapestry5.Asset; -import org.apache.tapestry5.MarkupWriter; -import org.apache.tapestry5.RenderSupport; import org.apache.tapestry5.internal.beanvalidator.*; import org.apache.tapestry5.ioc.Configuration; import org.apache.tapestry5.ioc.MappedConfiguration; import org.apache.tapestry5.ioc.OrderedConfiguration; import org.apache.tapestry5.ioc.ServiceBinder; +import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.Local; +import org.apache.tapestry5.ioc.annotations.Primary; import org.apache.tapestry5.ioc.services.PropertyShadowBuilder; import org.apache.tapestry5.ioc.services.ThreadLocale; -import org.apache.tapestry5.services.*; +import org.apache.tapestry5.services.FieldValidatorDefaultSource; +import org.apache.tapestry5.services.javascript.JavaScriptStack; +import org.apache.tapestry5.services.javascript.JavaScriptStackSource; +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; import javax.validation.MessageInterpolator; import javax.validation.Validator; @@ -96,32 +98,17 @@ public class BeanValidatorModule configuration.add(new ClientConstraintDescriptor(Size.class, "size", "min", "max")); } - public void contributeMarkupRenderer( - OrderedConfiguration<MarkupRendererFilter> configuration, - - final AssetSource assetSource, - - final ThreadLocale threadLocale, - - final Environment environment) + @Contribute(JavaScriptStackSource.class) + public static void addBeanValidationStack(MappedConfiguration<String, JavaScriptStack> configuration) { - MarkupRendererFilter injectBeanValidatorScript = new MarkupRendererFilter() - { - public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer) - { - RenderSupport renderSupport = environment.peek(RenderSupport.class); - - Asset validators = assetSource.getAsset(null, "org/apache/tapestry5/beanvalidator/tapestry-beanvalidator.js", - threadLocale.getLocale()); - - renderSupport.addScriptLink(validators); - - renderer.renderMarkup(writer); - } - }; - + configuration.addInstance(BeanValidatorStack.STACK_ID, BeanValidatorStack.class); + } - configuration.add("BeanValidatorScript", injectBeanValidatorScript, "after:*"); + @Contribute(ComponentClassTransformWorker2.class) + @Primary + public static void addWorker(OrderedConfiguration<ComponentClassTransformWorker2> configuration) + { + configuration.addInstance("FeebboFormResourcesInclusionWorker", FormResourcesInclusionWorker.class); } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c95c161/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorStack.java ---------------------------------------------------------------------- diff --git a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorStack.java b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorStack.java new file mode 100644 index 0000000..c17e8aa --- /dev/null +++ b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/BeanValidatorStack.java @@ -0,0 +1,46 @@ +package org.apache.tapestry5.beanvalidator; + +import org.apache.tapestry5.Asset; +import org.apache.tapestry5.ioc.services.ThreadLocale; +import org.apache.tapestry5.services.AssetSource; +import org.apache.tapestry5.services.javascript.JavaScriptStack; +import org.apache.tapestry5.services.javascript.StylesheetLink; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class BeanValidatorStack implements JavaScriptStack +{ + public static final String STACK_ID = "BeanValidatorStack"; + + private final List<Asset> javaScriptStack; + + public BeanValidatorStack(final AssetSource assetSource, final ThreadLocale threadLocale) + { + javaScriptStack = Arrays.asList(assetSource.getAsset(null, + "org/apache/tapestry5/beanvalidator/tapestry-beanvalidator.js", threadLocale.getLocale())); + } + + public List<String> getStacks() + { + return Collections.emptyList(); + } + + public List<Asset> getJavaScriptLibraries() + { + + return javaScriptStack; + } + + public List<StylesheetLink> getStylesheets() + { + + return Collections.emptyList(); + } + + public String getInitialization() + { + return null; + } +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/7c95c161/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/FormResourcesInclusionWorker.java ---------------------------------------------------------------------- diff --git a/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/FormResourcesInclusionWorker.java b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/FormResourcesInclusionWorker.java new file mode 100644 index 0000000..0aed927 --- /dev/null +++ b/tapestry-beanvalidator/src/main/java/org/apache/tapestry5/beanvalidator/FormResourcesInclusionWorker.java @@ -0,0 +1,65 @@ +// +// Copyright 2010 GOT5 (Gang Of Tapestry 5) +// +// 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. +// + +package org.apache.tapestry5.beanvalidator; + +import org.apache.tapestry5.annotations.SetupRender; +import org.apache.tapestry5.corelib.components.Form; +import org.apache.tapestry5.corelib.components.FormFragment; +import org.apache.tapestry5.model.MutableComponentModel; +import org.apache.tapestry5.plastic.MethodAdvice; +import org.apache.tapestry5.plastic.MethodInvocation; +import org.apache.tapestry5.plastic.PlasticClass; +import org.apache.tapestry5.plastic.PlasticMethod; +import org.apache.tapestry5.services.TransformConstants; +import org.apache.tapestry5.services.javascript.JavaScriptSupport; +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; +import org.apache.tapestry5.services.transform.TransformationSupport; + +/** + * Respectfully borrowed from the tapestry5-jquery project + * https://github.com/got5/tapestry5-jquery/blob/master/src/main/java/org/got5/tapestry5/jquery/services/FormResourcesInclusionWorker.java + */ +public class FormResourcesInclusionWorker implements ComponentClassTransformWorker2 +{ + private final JavaScriptSupport javaScriptSupport; + + public FormResourcesInclusionWorker(JavaScriptSupport javaScriptSupport) + { + this.javaScriptSupport = javaScriptSupport; + } + + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model) + { + if (model.getComponentClassName().equals(Form.class.getName()) || + model.getComponentClassName().equals(FormFragment.class.getName())) + { + PlasticMethod setupRender = plasticClass.introduceMethod(TransformConstants.SETUP_RENDER_DESCRIPTION); + + setupRender.addAdvice(new MethodAdvice() + { + public void advise(MethodInvocation invocation) + { + javaScriptSupport.importStack(BeanValidatorStack.STACK_ID); + + invocation.proceed(); + } + }); + + model.addRenderPhase(SetupRender.class); + } + } +} \ No newline at end of file
