[-] Bug fixed.
[+] Feature added.
[*] Change.

2006-12-10 v0.8
===============
+ added JPAAnnotationsConfigurer to translate EJB3 JPA annotations into OVAL constraints
	@javax.persistence.Basic(optional=false)      => @net.sf.oval.constraints.NotNull
	@javax.persistence.OneToOne(optional=false)   => @net.sf.oval.constraints.NotNull
	@javax.persistence.ManyToOne(optional=false)  => @net.sf.oval.constraints.NotNull
	@javax.persistence.Column(nullable=false)     => @net.sf.oval.constraints.NotNull
	@javax.persistence.Column(length=5    )       => @net.sf.oval.constraints.Length
* changed the ant script to generate a maven2 bundle jar in the dist target
- AssertConstraintSet constraint was ignored when specified for getter methods' return value 
- NPE was thrown when validating objects against an XML based configuration that uses constraint sets
- various fixes regarding XML based configuration (thanks to tahura)
+ added more JUnit tests for the xml configuration
+ net.sf.oval.configuration.POJOConfigurer and all configuration elements are now serializable
+ added support for ParaNamer http://paranamer.codehaus.org/ for method parameter name resolving
+ added a DTD for the XML configuration file
* when @AssertValid is used on collections the collection's elements are now validated too by default (thanks to tahura)

Refactoring:
* net.sf.oval.annotations.Guarded: annotation @Constrained renamed to @Guarded
* net.sf.oval.aspectj.GuardAspect: aspect ConstraintsEnforcerAspect renamed to GuardAspect
* net.sf.oval.aspectj.GuardAspect2: class ConstraintsEnforcerAspect2 renamed to GuardAspect2
* net.sf.oval.Guard: class ConstraintsEnforcer renamed to Guard

2006-11-12 v0.7
===============
+ added pluggable support for alternative collection implementations
+ added support for Javolution Collection Classes (http://javolution.org/)
+ changed the ant script to include the JUnit test cases in the sources zip file
- fixed some serialization related issues
- fixed NPE in InstanceOfCheck
* reworked the configuration mechanism
    + added net.sf.oval.configuration package
    + added support for POJO based constraint configuration
    + added support for XML based constraint configuration
+ added the concept of constraint sets
	+ added @net.sf.oval.annotations.DefineConstraintSet
	+ added @net.sf.oval.constraints.AssertConstraintSet
	+ added net.sf.oval.exceptions.UndefinedConstraintSetException
	+ added net.sf.oval.exceptions.ConstraintSetAlreadyDefinedException
    + added net.sf.oval.Validator.addConstraintSet(ConstraintSetConfiguration)	
* made resolving of constraint violation messages customizable
    + added net.sf.oval.MessageResolver
    + added net.sf.oval.MessageResolverImpl
    + added net.sf.oval.Validator.getMessageResolver()
    + added net.sf.oval.Validator.setMessageResolver(MessageResolver)
* removed the "check" property from the net.sf.oval.ConstraintViolation class

Refactoring:
* net.sf.oval.AbstractAnnotationCheck: class AbstractCheck renamed to AbstractAnnotationCheck

2006-08-04 v0.6
===============
+ constraints programmatically specified during runtime via net.sf.oval.Validator.addCheck(...) can now be removed using net.sf.oval.Validator.removeCheck(...)
+ added french translation for the violation messages of the built-in constraints (provided by mimil)
+ added @InstanceOf constraint
* simplified annotation check loading by introducing a check parameter to the @Constraint annotation that is used to specify the constraint check class
* refactored AspectJ related code into separate classes in the package net.sf.oval.aspectj to potentially support other AOP libraries later
* made the code to resolve the variables names of constructor and method parameters configurable via the ParameterNameResolver interface and the Validator.setParameterNameResolver(...) method
+ added @AssertValid constraint
* moved @FieldConstraints from package net.sf.annotations to net.sf.constraints
* @FieldConstraints constraint now also considers constraints added to fields during runtime via Validator.addCheck(...)
* changed all static methods of Validator and ConstraintsEnforcer to non-static to allow multiple validator instances at the same time being configured differently
+ introduced an ignoreIfNull parameter for the @ValidateWithMethod annotation
* net.sf.oval.annotations.PreValidateThis: annotation @PreValidateObject renamed to @PreValidateThis
* net.sf.oval.annotations.PostValidateThis: annotation @PostValidateObject renamed to @PostValidateThis

Refactoring:
- removed net.sf.oval.Validator.setAnnotationCheckLoader(AnnotationCheckLoader)
- removed net.sf.oval.Validator.getAnnotationCheckLoader()
- removed net.sf.oval.AnnotationCheckLoader
- removed net.sf.oval.AnnotationCheckLoaderImpl

2006-04-27 v0.5
===============
- net.sf.oval.Validator: Validation of inherited classes throws NullPointerException [ Bug 1461805 ]
+ added net.sf.oval.ConstraintViolation which now holds the information of a single constraint violation
+ using @net.sf.oval.annotations.FieldConstraints you can now apply constraints defined for fields to any constructor/method parameter or getter method in the same class
+ added support for localizable error messages
+ added support for parameters in constraint violation messages
+ net.sf.oval.context.ConstructorParameterContext: added method getParameterName()
+ net.sf.oval.context.MethodParameterContext: added method getParameterName()
+ the way how the corresponding checks for constraint annotations are resolved/loaded has been made customizable via net.sf.oval.Validator.setAnnotationCheckLoader(AnnotationCheckLoader)
+ constraints can now be specified programmatically during runtime via net.sf.oval.Validator.addCheck(...) -> this allows you to implement alternative configuration mechanisms
* net.sf.oval.exceptions.ConstraintViolationsException: now holds an array of ConstraintViolations
* net.sf.oval.annotations.Validatable: default value for applyFieldConstraintsToSetter() changed from "true" to "false"
* net.sf.oval.Validator: method validate(Object) now returns List<ConstraintViolation> instead of ArrayList<ConstraintViolationException>
* classes only need to be annotated with @net.sf.oval.annotations.Constrain when using the "design by contract" feature in conjunction with AspectJ
+ added the aspect ApiUsageAuditor that will report warnings about unsupported usage of annotations in Eclipse IDE 
+ added support for specifying constraints on method return values when using programming by contract (post condition)
* extended the documentation

Refactoring:
* net.sf.oval.Validator: refactored AspectJ related fields and methods into a separate class ConstraintsEnforcer
* net.sf.oval.ClassChecks: Reduced class visibility from public to package
* net.sf.oval.ConstraintsEnforcer: aspect ValidationAspect renamed to ConstraintsEnforcerAspect
* net.sf.oval.ConstraintsViolatatedListener: class ValidationListener renamed to ConstraintsViolatatedListener
* net.sf.oval.ConstraintsViolatatedListener: renamed method onValidationException to onConstraintsViolatedException
* net.sf.oval.ConstraintsViolatatedAdapter: class ValidationAdapter renamed to ConstraintsViolatatedAdapter
* net.sf.oval.annotations.Constrain: renamed @Validatable to @Constrain
* net.sf.oval.annotations.Constraint: renamed @ConstraintAnnotation to @Constraint
* net.sf.oval.constraints.NotSelfRef: renamed @NotThis to @NotSelfRef
* net.sf.oval.exceptions.ConstraintAnnotationNotPresentException: class ValidatableAnnotationNotPresentException renamed to ConstraintAnnotationNotPresentException
* net.sf.oval.exceptions.ConstraintsViolatedException: class ConstraintValidationException renamed to ConstraintsViolatedException

2006-03-17 v0.4
===============
- net.sf.oval.constraints.AbstractCheck: the message specified in constraint annotations was not used in the ConstraintException [ Bug 1449558 ]
* improved test cases in package net.sf.oval.test
- net.sf.oval.ValidationAspect: OVal tried to validate inner classes not having the @Validatable annotation which resulted in net.sf.oval.exceptions.ValidatableAnnotationNotPresent
* net.sf.oval.ValidationAspect: cleaned up and optimized for performance
* net.sf.oval.Validator: cleaned up and optimized for performance
* net.sf.oval.Validator: the removeListener methods now return a boolean value specifying if the listener was registered with the validator

Refactoring:
* net.sf.oval.Validator: renamed onObjectValidationException(..) methods to onConstraintValidationException(..)
* net.sf.oval.exception.ConstraintException: class ConstraintException renamed to ConstraintValidationException
* net.sf.oval.annotations.PreValidateObject: annotation @PreValidate renamed to @PreValidateObject
* net.sf.oval.annotations.PostValidateObject: annotation @PostValidate renamed to @PostValidateObject
* net.sf.oval.contexts: renamed net.sf.oval.context to net.sf.oval.contexts
* net.sf.oval.contexts.ValidationContext: changed from class to interface
* net.sf.oval.Validator: renamed field defaultValidationMode to validationMode
* net.sf.oval.exception.ValidatableAnnotationNotPresent renamed to ValidatableAnnotationNotPresentException

2005-10-17 v0.3
===============
+ net.sf.oval.annotations.Validatable: added parameter applyFieldConstraintsToSetter()
  => constraints specified for fields are now automatically applied to the value parameter of the corresponding setter method
+ net.sf.oval.test.SetterValidationWithFieldConstraintsTest: added
+ net.sf.oval.contraints.NotNegative: added
* net.sf.oval.constraints.Check: renamed method isValid to isSatisfied
* net.sf.oval.ClassChecks: now uses the class loader of the constraint annotation to load the corresponding Check class
* net.sf.oval.ClassChecks: changed the logging level to from WARNING to FINE
* net.sf.oval.ValidationAspect: changed the logging level to from INFO to FINE
* net.sf.oval.exception.ValidationException: class ValidationException renamed to OValException
* net.sf.oval.exception.InvalidValueException: class InvalidValueException renamed to ConstraintException
* net.sf.oval.exception.ObjectValidationException: dropped
* net.sf.oval.exception.AccessingFieldValueFailedException: now extends net.sf.oval.exception.ReflectionException
* net.sf.oval.exception.InvokingGetterFailedException: now extends net.sf.oval.exception.ReflectionException

2005-08-17 v0.1alpha
====================
[+] initial release