You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by dr...@apache.org on 2011/07/29 00:26:32 UTC
svn commit: r1152022 - in /tapestry/tapestry5/trunk/tapestry-kaptcha/src:
main/java/org/apache/tapestry5/kaptcha/annotations/
main/java/org/apache/tapestry5/kaptcha/internal/services/
main/java/org/apache/tapestry5/kaptcha/pages/ main/java/org/apache/t...
Author: drobiazko
Date: Thu Jul 28 22:26:30 2011
New Revision: 1152022
URL: http://svn.apache.org/viewvc?rev=1152022&view=rev
Log:
TAP5-1594: Provide edit block for Kaptcha component
Added:
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.tml
tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/
tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java (with props)
tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/resources/kaptcha/demo/pages/KaptchaBeanEditFormDemo.tml
Modified:
tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java
tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/org/apache/tapestry5/kaptcha/integration/KaptchaIntegrationTest.java
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java Thu Jul 28 22:26:30 2011
@@ -0,0 +1,40 @@
+// Copyright 2011 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.
+// 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.kaptcha.annotations;
+
+import org.apache.tapestry5.ioc.annotations.UseWith;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static org.apache.tapestry5.ioc.annotations.AnnotationUseContext.*;
+
+/**
+ * Used to explicitly select the <i>kaptcha</i> editor block for a property.
+ * This annotation may be attached to a getter or setter method, or the matching field.
+ *
+ * @see org.apache.tapestry5.corelib.components.BeanEditForm
+ * @since 5.3
+ */
+@Target({ElementType.FIELD, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@UseWith({BEAN, COMPONENT, MIXIN, PAGE})
+public @interface Kaptcha
+{
+}
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/annotations/Kaptcha.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java Thu Jul 28 22:26:30 2011
@@ -0,0 +1,29 @@
+// Copyright 2011 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.
+// 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.kaptcha.internal.services;
+
+import org.apache.tapestry5.ioc.services.PropertyAdapter;
+import org.apache.tapestry5.kaptcha.annotations.Kaptcha;
+import org.apache.tapestry5.services.DataTypeAnalyzer;
+
+public class KaptchaDataTypeAnalyzer implements DataTypeAnalyzer
+{
+ public String identifyDataType(PropertyAdapter adapter)
+ {
+ final Kaptcha annotation = adapter.getAnnotation(Kaptcha.class);
+
+ return annotation == null ? null : "kaptcha";
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/internal/services/KaptchaDataTypeAnalyzer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java Thu Jul 28 22:26:30 2011
@@ -0,0 +1,46 @@
+// Copyright 2011 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.
+// 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.kaptcha.pages;
+
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.kaptcha.components.KaptchaField;
+import org.apache.tapestry5.kaptcha.components.KaptchaImage;
+import org.apache.tapestry5.services.PropertyEditContext;
+
+/**
+ * Page containing <i>kaptcha</i> edit blocks contributed into the
+ * {@link org.apache.tapestry5.services.BeanBlockSource} service configuration.
+ *
+ * @see org.apache.tapestry5.services.BeanBlockContribution
+ * @see org.apache.tapestry5.corelib.components.BeanEditForm
+ * @since 5.3
+ */
+public class KaptchaEditBlocks
+{
+ @Environmental
+ @Property(write = false)
+ private PropertyEditContext context;
+
+ @Component
+ private KaptchaImage kaptchaImage;
+
+ @Component(parameters = {
+ "label=prop:context.label",
+ "clientId=prop:context.propertyId",
+ "image=kaptchaImage"})
+ private KaptchaField kaptchaField;
+}
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java?rev=1152022&r1=1152021&r2=1152022&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/services/KaptchaModule.java Thu Jul 28 22:26:30 2011
@@ -14,19 +14,23 @@
package org.apache.tapestry5.kaptcha.services;
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.ioc.Configuration;
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.Contribute;
import org.apache.tapestry5.ioc.annotations.Value;
+import org.apache.tapestry5.ioc.services.ThreadLocale;
+import org.apache.tapestry5.kaptcha.internal.services.KaptchaDataTypeAnalyzer;
import org.apache.tapestry5.kaptcha.internal.services.KaptchaProducerImpl;
-import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.LibraryMapping;
+import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.javascript.JavaScriptSupport;
import org.apache.tapestry5.services.messages.ComponentMessagesSource;
/**
- * Defines core services for Kaptcha support.
+ * Defines core services for Kaptcha support.
*
* @since 5.3
*/
@@ -51,4 +55,45 @@ public class KaptchaModule
{
configuration.add("TapestryKaptcha", coreCatalog, "before:AppCatalog");
}
+
+ public static void contributeDataTypeAnalyzer(OrderedConfiguration<DataTypeAnalyzer> configuration)
+ {
+ configuration.add("Kaptcha", new KaptchaDataTypeAnalyzer(), "after:Annotation");
+ }
+
+ @Contribute(BeanBlockSource.class)
+ public static void provideDefaultBeanBlocks(Configuration<BeanBlockContribution> configuration)
+ {
+ configuration.add(new EditBlockContribution("kaptcha", "KaptchaEditBlocks", "kaptcha"));
+
+ }
+
+ @Contribute(MarkupRenderer.class)
+ public void provideMarkupRenderer(
+ OrderedConfiguration<MarkupRendererFilter> configuration,
+
+ final AssetSource assetSource,
+
+ final ThreadLocale threadLocale,
+
+ final Environment environment)
+ {
+ MarkupRendererFilter importKaptchaCss = new MarkupRendererFilter()
+ {
+ public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer)
+ {
+ JavaScriptSupport javaScriptSupport = environment.peek(JavaScriptSupport.class);
+
+ Asset css = assetSource.getAsset(null, "org/apache/tapestry5/kaptcha/kaptcha.css",
+ threadLocale.getLocale());
+
+ javaScriptSupport.importStylesheet(css);
+
+ renderer.renderMarkup(writer);
+ }
+ };
+
+
+ configuration.add("KaptchaAssets", importKaptchaCss, "after:*");
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css Thu Jul 28 22:26:30 2011
@@ -0,0 +1,5 @@
+.t-kaptcha-field {
+ margin-left: 250px;
+ padding: 4px 0 0 3px
+}
+
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/kaptcha.css
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.tml?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/pages/KaptchaEditBlocks.tml Thu Jul 28 22:26:30 2011
@@ -0,0 +1,14 @@
+<div xml:space="default" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
+
+ <t:block id="kaptcha">
+ <t:label for="kaptchaField"/>
+
+ <img t:id="kaptchaImage"/>
+
+ <div class="t-kaptcha-field">
+ <input t:id="kaptchaField"/>
+ </div>
+
+ </t:block>
+
+</div>
\ No newline at end of file
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java Thu Jul 28 22:26:30 2011
@@ -0,0 +1,60 @@
+// Copyright 2011 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.
+// 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 kaptcha.demo.model;
+
+import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.kaptcha.annotations.Kaptcha;
+
+public class RegistrationData
+{
+ @Validate("required")
+ private String name;
+
+ @Validate("required")
+ private String password;
+
+ @Kaptcha
+ private Object kaptcha;
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public Object getKaptcha()
+ {
+ return kaptcha;
+ }
+
+ public void setKaptcha(Object kaptcha)
+ {
+ this.kaptcha = kaptcha;
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/model/RegistrationData.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java Thu Jul 28 22:26:30 2011
@@ -0,0 +1,42 @@
+// Copyright 2011 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.
+// 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 kaptcha.demo.pages;
+
+import kaptcha.demo.model.RegistrationData;
+import org.apache.tapestry5.PersistenceConstants;
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.components.BeanEditForm;
+import org.apache.tapestry5.kaptcha.annotations.Kaptcha;
+
+public class KaptchaBeanEditFormDemo
+{
+ @Component(parameters = {"object=registrationData", "clientValidation=none"})
+ private BeanEditForm form;
+
+ @Property
+ @Kaptcha
+ private RegistrationData registrationData;
+
+ @Property
+ @Persist(PersistenceConstants.FLASH)
+ private String message;
+
+ void onSuccessFromForm()
+ {
+ message = "Kaptcha passed.";
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/kaptcha/demo/pages/KaptchaBeanEditFormDemo.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/org/apache/tapestry5/kaptcha/integration/KaptchaIntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/org/apache/tapestry5/kaptcha/integration/KaptchaIntegrationTest.java?rev=1152022&r1=1152021&r2=1152022&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/org/apache/tapestry5/kaptcha/integration/KaptchaIntegrationTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/java/org/apache/tapestry5/kaptcha/integration/KaptchaIntegrationTest.java Thu Jul 28 22:26:30 2011
@@ -38,4 +38,26 @@ public class KaptchaIntegrationTest exte
assertTextPresent("Kaptcha passed.");
}
+
+
+ @Test
+ public void bean_editor()
+ {
+ open("/kaptchabeaneditformdemo");
+
+ type("kaptcha", "invalid input");
+
+ clickAndWait(SUBMIT);
+
+ assertTextPresent("You must provide a value for Name", "You must provide a value for Password", "Enter the text displayed in the image.");
+
+ type("name", "admin");
+ type("password", "secret");
+ type("kaptcha", "i8cookies");
+
+ clickAndWait(SUBMIT);
+
+ assertTextPresent("Kaptcha passed.");
+
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/resources/kaptcha/demo/pages/KaptchaBeanEditFormDemo.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/resources/kaptcha/demo/pages/KaptchaBeanEditFormDemo.tml?rev=1152022&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/resources/kaptcha/demo/pages/KaptchaBeanEditFormDemo.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-kaptcha/src/test/resources/kaptcha/demo/pages/KaptchaBeanEditFormDemo.tml Thu Jul 28 22:26:30 2011
@@ -0,0 +1,7 @@
+<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:tx="tapestry-library:tapx">
+
+ <p id="message">${message}</p>
+
+ <form t:id="form"/>
+
+</t:layout>
\ No newline at end of file