Thank you Dan, we are going to work with the wicket viewer, so I will let you know later if we get something. Best Regards.-
2013/9/18 Dan Haywood <[email protected]> > Hi Luis, > welcome to the Isis mailing list. > > But my apols to you and Ezequiel, I somehow dropped the ball and missed > this question. > > To answer some of your question: to get the ContactVO to persist - as you > have done - it is sufficient only to make it serializable. However, if you > want it to be stored as something other than a blob, you'll need to use the > JDO APIs (eg as is done for Joda types). > > Your issue, though, is on the UI side. And, unfortunately, right now Isis > doesn't provide an out-of-the-box capability to render composite value > objects such as you have defined here. It most certainly ought to do so, > and indeed we have a ticket for something very similar... [1] it just isn't > implemented, I'm afraid. > > The EncoderDecoder stuff won't help... that is used by some of the other > object stores (eg XML, NoSQL). But it's irrelevant for Wicket/JDO. > > The main issue is that the Wicket viewer doesn't "look inside" the > structure of your ContactVO in order to build up a suitable UI. For > example, the ContactVO is basically 3 string properties, and you would > presumably want 3 fields. It's just not smart enough to do that. > > I can offer a possible workaround for you, if you want, which *might* work. > The Wicket viewer *is* extensible, and so you could define and register > your own ContactVOComponentFactory and have it build up a custom > ContactVOComponent (a panel) for rendering the parts of the contact as > individual fields. > > Have a look at ComponentFactoryRegistryDefault and how some of the other > ComponentFactorys work - it's basically the chain of responsibility > pattern. > > Or... alternatively you might want to generalize this, in other words > implement [1]. Note that [1] uses the AggregatedFacet as the indicator on > the referenced object that it should be displayed "inline". If this > reference is mapped using JDO's @Embedded, it would also save you the > hassle of doing extra JDO datatype mappings. > > HTH, come back to me if none of the above makes sense... > > Best > Dan > > > [1] https://issues.apache.org/jira/browse/ISIS-348 > > > > > > > > On 18 September 2013 13:26, Luis Parada <[email protected]> > wrote: > > > Hi, I´m working on this with Ezequiel and we could persist the Contact > VO. > > The problem is that we can not show the object in the viewer because the > > object is serialized. We found > > the public interface EncoderDecoder<T> {} wich implements this method: T > > fromEncodedString(String encodedString); so we appreciate any help > > explaining us how to use it. > > > > At this moment we have overrided the methods: protected String > > doEncode(final Object object) and protected Contact doRestore(final > String > > data) of ContactoValueSemanticsProvider but is not working yet. > > > > protected String doEncode(final Object object) { > > final Contacto contacto = (Contacto) object; > > final String valor = String.valueOf(contacto.getDomicilio() + "-" + > > contacto.getEmail() + "-" + contacto.getTelefono()); > > return valor; > > } > > > > protected Contacto doRestore(final String data) { > > final String[] partes = data.split("-"); > > final String domicilio = partes[0]; > > final String correo = partes[1]; > > final String telefono = partes[2]; > > return new Contacto(domicilio, correo, telefono); > > } > > Thank´s. > > > > > > 2013/9/12 Ezequiel Celiz <[email protected]> > > > > > Hi community > > > > > > I'm trying to implement the annotation @Value in my application to use > > the > > > "Value Objects" as defined in the concept of DDD . > > > > > > I had no success : How I can set my class as a genuine Custom Value > Type? > > > so that it can be used in the entities that require it. > > > > > > I want to create the classic VO : "Contact" which consists of the > > following > > > properties ( in my case) : > > > > > > Address, Telephone and Email. > > > > > > @Value ( semanticsProviderName = " > > > ContactValueSemanticsProvider.class " ) > > > public class Contact { > > > > > > / * > > > / Need to the builder? > > > / > > > / Public Contact ( String a, String t , String e) { > > > / This.address = a; > > > / This.telephone = t; > > > / This.email = e ; > > > / } > > > / > > > / * > > > > > > private String address ; > > > > > > public String getAddress ( ) { > > > return address ; > > > } > > > > > > public void setAddress (String address) { > > > this.address = address ; > > > } > > > > > > private String telephone ; > > > > > > getTelephone public String ( ) { > > > return telephone ; > > > } > > > > > > public void setTelephone (String telephone) { > > > this.telephone = telephone ; > > > } > > > > > > private String email ; > > > > > > getEmail public String ( ) { > > > return email ; > > > } > > > > > > public void setEmail (String email ) { > > > this.email = email ; > > > } > > > > > > } > > > > > > where ContactValueSemanticsProvider.class : > > > public final class ContactValueSemanticsProvider > > > extends AbstractValueSemanticsProvider <Conctact> {} > > > > > > Then I wonder if the entity would have to have an attribute : > > > > > > private Contact contact ; > > > > > > public GetContact ( ) { > > > return contact ; > > > } > > > > > > Finally in the service when I creating the entity object : > > > > > > SomeEntity public newEntity ( > > > @ Optional > > > @ Named ( " Address" ) String address, > > > @ Optional > > > @ Named ( " Telephone" ) String telephone , > > > @ Optional > > > @ Named ( " email " ) String email > > > ) { > > > > > > final Contact contact > > > > > > / / The correct way to instantiate is THROUGH > > > newTransientInstance ( Contact.class ) ? > > > > > > pourContacter (contact) ; > > > > > > @ Hidden > > > SomeEntity public pourContacter ( ) ( > > > Final Contact Contact > > > ) { > > > SomeEntity end someEntity = newTransientInstance ( > > SomeEntity.class > > > ) ; > > > someEntitity.setContact (contact) ; > > > persistIfNotAlready ( someEntity ) ; > > > > > > someEntity return ; > > > } > > > > > > It is the right way? or the way to work with the Value Object in ISIS > is > > > another? > > > > > > I welcome your suggestions > > > Thank you very much as always for your attention > > > Cheers ! > > > Ezequiel > > > > > >
