My +1 must have gotten swallowed by my mailer ... Craig
On Fri, 18 Jan 2002, Rey Francois wrote: > Date: Fri, 18 Jan 2002 09:40:19 +0100 > From: Rey Francois <[EMAIL PROTECTED]> > Reply-To: Jakarta Commons Developers List <[EMAIL PROTECTED]> > To: 'Jakarta Commons Developers List' <[EMAIL PROTECTED]> > Subject: [Vote] Mapper framework in commons > > Agreed, this is getting confusing. Let me reformulate the proposal, > this time for inclusion in the commons directly, and taking feedback > into account. The following section have been updated and need a new > reading: 1.5, 2, 2.1, and 4. > > Votes already received for inclusion in commons are: > Ted Husted +1 > Jason van Zyl +1 > David Winterfeldt +1 > > Votes already received for inclusion in the sandbox are: > Jeff Turner +1 > Scott Sanders +1 > The two people above should vote again if they mean inclusion in the > commons directly. > > Proposal for a mapper framework in the Jakarta Commons > ====================================================== > > (0) rationale > --------- > > In many application environments validation is performed on data fields, > data is converted from one form to another, and is being transferred > from one object to another. A typical example is found in graphical user > interfaces that validate user input, convert it to a proper form, and send > it to a server application for processing. In the case of HTML front-ends, > the HTTP protocol forces user input to be sent as text data to the server > where the validation and conversion has to be performed. > > Most of the time implementing such validation and conversion requires lots > of custom code: get the data element, validate it, convert it, and put the > result into another object. In a small application, this may not be an > issue. However in medium to large applications with many different data > elements, such coding becomes a tedious and error-prone task. > > In such situation developers tend to achieve some form of reuse in order to > reduce the menial work. At the lowest level is the cut'n'paste approach. A > better approach is the definition of some high-level abstraction which > encapsulate reusable logic: validation and conversion classes are typical > abstractions found in most systems. > > However, even with validation and conversion logic being reusable, some > custom coding is still required in order to attach those validations and > conversions to the data elements. To avoid completely the custom code, an > even higher level of abstraction is needed in order to model such bindings. > The mapper framework implemented in this package provides such high-level > abstractions, making the validation, conversion, and transfer of data a > process driven by a configuration file. > > Although the central concept in this framework is the one of a mapper, the > framework is flexible enough to be used only for validating fields of an > object, or converting an object into another one, or simply copying fields > from one object to another. It is also flexible enough so that validation, > conversion, and transfer can be performed on multiple objects within the > same mapper. > > (1) scope of the package > -------------------- > > The mapper framework provides the necessary classes and abstractions to > perform validation, conversion, and transfer of data fields between any > types of objects. The configuration of all mappers and other abstractions is > done in one or more XML file loaded at startup. The framework does not > depend on any other application framework such as Struts or Turbine, and > integration with such frameworks should be provided separately. > > (1.5) interaction with other packages > ------------------------------- > > The mapper framework makes use of > - the Commons Digester > - the Commons BeanUtils > - JavaCC > - the Commons Pool (work in progress) > > The main differences with the validator framework from David Winterfeldt > is in the scope and level of abstractions. > While the validation framework only covers the validation part, > the mapper framework can also convert values, validate converted > values, and copy the converted/validated values to one or more object (e.g. > value objects). The mapper framework provides many abstractions: validators, > converters, getters, setters, error handlers, etc., making it possible, for > example, to define each single validation and conversion in its own class > that can easily be reused. Also, the mapper framework includes a small > language that is used essentially for simple validations and for combining > validators and converters together, making it easier to create smaller > grained and reusable validations/conversions that can be glued together with > this language (e.g. no need to write a third validator in order to combine > two existing ones). Most of the mapper framework classes (mapper, mapping, > mapped-object, etc.) can be extended so that much of the behavior can be > altered either globally or locally. On the other hand, the validator > framework from David provides less levels of abstractions (e.g. each > validation is a method on a class) and extensibility. It does however > perform a very good job at validating forms within a Struts application, > even making it possible to generate client-side validation in JavaScript. > This latter feature is not supported by the mapper framework, but can > easily be implemented with a Visitor pattern and a JavaScript visitor. > Since both the validator and mapper frameworks overlap in the validation > function, it is proposed to have both share a common set of validation > logic. Further discussions may be needed to specify how to do this properly > (see section 2). > > The differences with the Intake service found in Turbine are to be > investigated further. From reading the Intake doc, both seems to cover the > same functionality: validate/convert/transfer. Intake is part of the Fulcrum > service framework used by Turbine, so at present using intake means using > the fulcrum framework as well. On the other hand, the mapper framework is > not dependent on any other application or service framework such as Struts > or Turbine/Fulcrum. It has of course dependencies with the packages > mentioned above, but one can use the mapper framework in any context: > Struts, Turbine, etc. > > Although independent of Struts, the mapper framework can easily be used > in a Struts application by subclassing the ActionMapping and adding a new > property containing the name of the mapper to use for validating an > ActionForm. That way the mapper can be specified in struts-config.xml. > While it is possible and easy to use the mapper framework just for > validation in Struts, such usage does not differentiate it from David's > validation framework (which is probably a better choice if only > validation is required). The real value of the mapper framework is when > conversion and transfer of data elements are also required. > > > (2) identify the initial source for the package > ------------------------------------------- > > The initial codebase is to be contributed by Francois Rey. A version of the > source is already available at < > http://husted.com/struts/resources/mapper.htm >. > > Before inclusion into the commons the following will be performed: > - alignment of the build process with the commons build process > - repackaging into Jakarta packages as described in 2.1 > - use of the commons digester and BeanUtils instead of the Struts versions > > > (2.1) identify the base name for the package > -------------------------------------- > > org.apache.commons.mapper > org.apache.commons.mapper.parser > org.apache.commons.mapper.util > > If a set of validation logic is to be shared between the validation and > mapper framework, it is suggested that another separate package is > created for holding the shared logic. This however is not a definite > point of this proposal and can be discussed further. If for example > the shared validation logic is implemented by deriving the Validator > class of the mapper framework, it would make sense to have them under > the existing mapper.util package. > > (3) identify any Jakarta-Commons resources to be created > ---------------------------------------------------- > > (3.1) mailing list > Until traffic justifies, the package will use the Jakarta-Commons list for > communications. > > (3.2) CVS repositories > For the time being, the package will reside in a sub-project of the > Jakarta-Commons sandbox CVS. > > (3.3) Bugzilla > The package should be listed as a component of under the Jakarta-Commons > Bugzilla entry. > > (3.4) Jyve FAQ (when available) > commons-mapper > > (4) identify the initial set of committers to be listed in the Status File > ---------------------------------------------------------------------- > Francois Rey > David Winterfeldt > Ted Husted > Craig McClanahan > ************************************************************************ > The information in this email is confidential and is intended solely > for the addressee(s). > Access to this email by anyone else is unauthorised. If you are not > an intended recipient, please notify the sender of this email > immediately. You should not copy, use or disseminate the > information contained in the email. > Any views expressed in this message are those of the individual > sender, except where the sender specifically states them to be > the views of Capco. > > http://www.capco.com > *********************************************************************** > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>