Cayenne Annotations

From: Steve Wells (websystem..mail.com)
Date: Sun Jan 07 2007 - 02:27:10 EST

  • Next message: edward pedersson: "Re: nested dataContexts"

    I've started working on a package of cayenne annotations, so far only for
    validations. My initial motivation was from using the Tapestry bean-form
    component. Bean-form will create a Html form for you including validations
    dynamically based on a Bean passed to it. There are a lot of customisations
    that can be done. It can save a lot of time, effort, errors.

    What was annoying me was that you had to repeat your validations with
    Cayenne DataObjects. 1. in the Cayenne model and 2 with the beanform. This
    was an obvious signal that something had to be done, it wasn't DRY. What
    I've come up with so far to solve this:
    1. A modified Cayenne super class Velocity template to generate Cayenne
    Annotations. Generates Required and Length annotations
    2. An annotations package based on OVal. includes Min, Max, Required, Past,
    Future, RegEx, Email, Length and whatever else you can dream up.
    3. A bean-form Cayenne integrator.

    All the user cares about then is practically very little. Bean-form grabs
    the Cayenne generated annotation and generates the Tapestry validator for
    them.

    You can also add in annotations that can't be guessed from your data
    model into your subclass, just override the superclass eg:
    @Email
    @Required
    public String getEmail() {
       return super.getEmail;
    }

    Next step is when we want to add a validation that none of the frameworks
    support (maybe you have a rich client etc), this is where OVal really comes
    into it, eg:

    Cayenne sub-class:
       // Must be uppercase
      ..pperCase
       public String getUpperCaseField() {
          return upperCaseField;
       }

    Validation layer, eg Tapestry page class:
           Validator validator = new CayenneValidator();

            // collect the violated constraints
            List<ConstraintViolation> violations = validator.validate
    (myObjEntity);
            if (violations.size() > 0) // tell the user what is wrong from
    annotation generated message, field must be upper case etc;
    So what do people think of this approach?

    Cheers,

    Steve



    This archive was generated by hypermail 2.0.0 : Sun Jan 07 2007 - 02:27:43 EST