Repository: tapestry-5 Updated Branches: refs/heads/master 627df8511 -> 2e19fa53f
TAP-2532 Add property editor for object Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/2e19fa53 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/2e19fa53 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/2e19fa53 Branch: refs/heads/master Commit: 2e19fa53f7ba7e931f57b0e5405a4e6fb45b77e4 Parents: 627df85 Author: Barry Books <b...@trsvax.com> Authored: Fri Feb 26 16:23:58 2016 -0600 Committer: Jochen Kemnade <jochen.kemn...@eddyson.de> Committed: Fri Mar 31 09:21:30 2017 +0200 ---------------------------------------------------------------------- .../corelib/pages/PropertyEditBlocks.java | 19 ++++++- .../corelib/pages/PropertyEditBlocks.tml | 4 ++ .../src/test/app1/ObjectEditorDemo.tml | 13 +++++ .../integration/app1/BeanEditorTests.java | 6 ++ .../integration/app1/data/Address.java | 43 ++++++++++++++ .../tapestry5/integration/app1/pages/Index.java | 3 +- .../app1/pages/ObjectEditorDemo.java | 15 +++++ .../integration/app1/services/AppModule.java | 60 +++++++++++++++----- 8 files changed, 147 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java index e1627af..d86dad5 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java @@ -18,11 +18,19 @@ import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.ValueEncoder; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.Environmental; -import org.apache.tapestry5.corelib.components.*; +import org.apache.tapestry5.beaneditor.BeanModel; +import org.apache.tapestry5.corelib.components.BeanEditForm; +import org.apache.tapestry5.corelib.components.Checkbox; +import org.apache.tapestry5.corelib.components.DateField; +import org.apache.tapestry5.corelib.components.PasswordField; +import org.apache.tapestry5.corelib.components.Select; +import org.apache.tapestry5.corelib.components.TextArea; +import org.apache.tapestry5.corelib.components.TextField; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.services.BeanBlockContribution; import org.apache.tapestry5.services.BeanBlockSource; +import org.apache.tapestry5.services.BeanModelSource; import org.apache.tapestry5.services.PropertyEditContext; import org.apache.tapestry5.util.EnumSelectModel; import org.apache.tapestry5.util.EnumValueEncoder; @@ -180,4 +188,13 @@ public class PropertyEditBlocks } return new EnumSelectModel(propertyType, context.getContainerMessages()); } + + @Inject + private BeanModelSource beanModelSource; + + @SuppressWarnings("unchecked") + public BeanModel<?> getModel() + { + return beanModelSource.createEditModel(context.getPropertyType(), context.getContainerMessages()); + } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.tml ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.tml b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.tml index 37234da..b53bc89 100644 --- a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.tml +++ b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.tml @@ -40,4 +40,8 @@ <t:block id="longtext"> <textarea t:id="textarea" t:mixins="formgroup"/> </t:block> + + <t:block id="object"> + <t:beanEditor object="context.propertyValue" model="model"/> + </t:block> </div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/app1/ObjectEditorDemo.tml ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/app1/ObjectEditorDemo.tml b/tapestry-core/src/test/app1/ObjectEditorDemo.tml new file mode 100644 index 0000000..ec2c3bf --- /dev/null +++ b/tapestry-core/src/test/app1/ObjectEditorDemo.tml @@ -0,0 +1,13 @@ +<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> + + <h1>Object BeanEditor Demo</h1> + + <p> + Demonstrates that BeanEditor can handle address objects. + </p> + + + <t:beaneditform object="this"/> + + +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/BeanEditorTests.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/BeanEditorTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/BeanEditorTests.java index b926736..ba8dd48 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/BeanEditorTests.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/BeanEditorTests.java @@ -202,6 +202,12 @@ public class BeanEditorTests extends App1TestCase assertTextPresent("Bean class from context is: " + RegistrationData.class.getName()); } + @Test + public void object_editor_test() { + openLinks("Object Editor Demo"); + assertTextPresent("Street"); + } + /** TAP5-991 */ public void bean_display_enum_value_from_messages() { http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Address.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Address.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Address.java new file mode 100644 index 0000000..03a189a --- /dev/null +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Address.java @@ -0,0 +1,43 @@ +package org.apache.tapestry5.integration.app1.data; + +public class Address { + + private String street; + private String city; + private String state; + private String zip; + + public String getStreet() + { + return street; + } + public void setStreet(String street) + { + this.street = street; + } + public String getCity() + { + return city; + } + public void setCity(String city) + { + this.city = city; + } + public String getState() + { + return state; + } + public void setState(String state) + { + this.state = state; + } + public String getZip() + { + return zip; + } + public void setZip(String zip) + { + this.zip = zip; + } + +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java index d483a2a..8a238e9 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java @@ -605,8 +605,9 @@ public class Index new Item("onactivateredirect", "OnActivateRedirect Demo", "A page that redirects to itself from" + " its activation method"), - new Item("BeanEditorWithFormFragmentDemo", "Bean Editor With Form Fragment Demo", "TriggerFragment mixin used inside a BeanEditor") + new Item("BeanEditorWithFormFragmentDemo", "Bean Editor With Form Fragment Demo", "TriggerFragment mixin used inside a BeanEditor"), + new Item("ObjectEditorDemo","Object Editor Demo","Edit Bean with address objects") ); static http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ObjectEditorDemo.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ObjectEditorDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ObjectEditorDemo.java new file mode 100644 index 0000000..eb83e02 --- /dev/null +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ObjectEditorDemo.java @@ -0,0 +1,15 @@ +package org.apache.tapestry5.integration.app1.pages; + +import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.integration.app1.data.Address; + +public class ObjectEditorDemo { + + @Property + Address address; + + void onSuccess() { + + } + +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2e19fa53/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java index f5bc575..50d0a71 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java @@ -11,19 +11,50 @@ // limitations under the License. package org.apache.tapestry5.integration.app1.services; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.io.IOException; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.net.URL; +import java.util.List; +import java.util.Map; + import org.apache.tapestry5.SymbolConstants; import org.apache.tapestry5.ValueEncoder; +import org.apache.tapestry5.integration.app1.data.Address; import org.apache.tapestry5.integration.app1.data.Entity; +import org.apache.tapestry5.integration.app1.data.Person; +import org.apache.tapestry5.integration.app1.data.Pet; import org.apache.tapestry5.integration.app1.data.ToDoItem; import org.apache.tapestry5.integration.app1.data.Track; import org.apache.tapestry5.internal.services.GenericValueEncoderFactory; -import org.apache.tapestry5.ioc.*; +import org.apache.tapestry5.ioc.Configuration; +import org.apache.tapestry5.ioc.MappedConfiguration; +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.Marker; import org.apache.tapestry5.ioc.annotations.Value; import org.apache.tapestry5.ioc.internal.util.CollectionFactory; import org.apache.tapestry5.ioc.services.ServiceOverride; -import org.apache.tapestry5.services.*; +import org.apache.tapestry5.services.BaseURLSource; +import org.apache.tapestry5.services.BeanBlockContribution; +import org.apache.tapestry5.services.BeanBlockSource; +import org.apache.tapestry5.services.ComponentClassResolver; +import org.apache.tapestry5.services.EditBlockContribution; +import org.apache.tapestry5.services.LibraryMapping; +import org.apache.tapestry5.services.Request; +import org.apache.tapestry5.services.RequestFilter; +import org.apache.tapestry5.services.RequestHandler; +import org.apache.tapestry5.services.ResourceDigestGenerator; +import org.apache.tapestry5.services.Response; +import org.apache.tapestry5.services.ValueEncoderFactory; +import org.apache.tapestry5.services.ValueLabelProvider; import org.apache.tapestry5.services.pageload.PagePreloader; import org.apache.tapestry5.services.pageload.PreloaderMode; import org.apache.tapestry5.services.security.ClientWhitelist; @@ -31,18 +62,6 @@ import org.apache.tapestry5.services.security.WhitelistAnalyzer; import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; import org.slf4j.Logger; -import java.io.IOException; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - /** * I was just dying to see how fast requests are! */ @@ -362,5 +381,18 @@ public class AppModule configuration.add("core/exceptionreport"); configuration.add("core/t5dashboard"); } + + + public static void contributeDefaultDataTypeAnalyzer( + @SuppressWarnings("rawtypes") MappedConfiguration<Class, String> configuration) + { + configuration.add(Address.class, "address"); + } + + @Contribute(BeanBlockSource.class) + public static void provideDefaultBeanBlocks(Configuration<BeanBlockContribution> configuration) + { + configuration.add( new EditBlockContribution("address", "PropertyEditBlocks", "object")); + } }