Skip to content

Commit

Permalink
Merge branch 'master' of github.com:grails/grails-data-mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed Mar 10, 2015
2 parents eeae6ed + 5c368dd commit 0a20953
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -8,6 +8,7 @@ jdk:
env:
global:
- TERM=dumb
- MALLOC_ARENA_MAX=1
- GRADLE_OPTS="-Xmx1024m -Xms256m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled"
- GIT_NAME="Graeme Rocher"
- GIT_EMAIL="graeme.rocher@gmail.com"
Expand Down
Expand Up @@ -20,13 +20,15 @@ import grails.util.GrailsClassUtils
import grails.validation.CascadingValidator
import grails.validation.ValidationErrors
import groovy.transform.CompileStatic
import org.grails.datastore.gorm.config.GrailsDomainClassPersistentEntity
import org.grails.orm.hibernate.support.HibernateRuntimeUtils
import org.grails.orm.hibernate.validation.AbstractPersistentConstraint
import org.grails.datastore.gorm.GormValidationApi
import org.grails.datastore.mapping.engine.event.ValidationEvent
import org.springframework.validation.Errors
import org.springframework.validation.FieldError
import org.springframework.validation.ObjectError
import org.springframework.validation.Validator

@CompileStatic
abstract class AbstractHibernateGormValidationApi<D> extends GormValidationApi<D> {
Expand All @@ -53,6 +55,8 @@ abstract class AbstractHibernateGormValidationApi<D> extends GormValidationApi<D

boolean validate(D instance, List validatedFieldsList, Map arguments = Collections.emptyMap()) {
Errors errors = setupErrorsProperty(instance);

Validator validator = getValidator()
if(validator == null) return true

Boolean valid = Boolean.TRUE
Expand Down
Expand Up @@ -15,6 +15,7 @@
package org.grails.datastore.gorm

import grails.validation.CascadingValidator
import org.grails.datastore.gorm.config.GrailsDomainClassPersistentEntity
import org.grails.datastore.gorm.support.BeforeValidateHelper
import org.grails.datastore.mapping.core.Datastore
import org.grails.datastore.mapping.engine.event.ValidationEvent
Expand All @@ -34,26 +35,37 @@ import org.springframework.validation.Validator
*/
class GormValidationApi<D> extends AbstractGormApi<D> {

Validator validator
private Validator internalValidator
BeforeValidateHelper beforeValidateHelper

GormValidationApi(Class<D> persistentClass, Datastore datastore) {
super(persistentClass, datastore)
MappingContext context = datastore.mappingContext
def entity = context.getPersistentEntity(persistentClass.name)
validator = context.getEntityValidator(entity)
beforeValidateHelper = new BeforeValidateHelper()
}

Validator getValidator() {
if (!internalValidator) {
if(persistentEntity instanceof GrailsDomainClassPersistentEntity) {
internalValidator = persistentEntity.domainClass.validator
}
if(!internalValidator) {
internalValidator = datastore.mappingContext.getEntityValidator(persistentEntity)
}
}
internalValidator
}

void setValidator(Validator validator) {
internalValidator = validator
}

private boolean doValidate(D instance, Map arguments, List fields) {
beforeValidateHelper.invokeBeforeValidate instance, fields
fireEvent(instance, fields)

if (!validator) {
validator = datastore.mappingContext.getEntityValidator(persistentEntity)
if (!validator) {
return true
}
Validator validator = getValidator()
if(validator == null) {
return true
}

def localErrors = new ValidationErrors(instance)
Expand Down

0 comments on commit 0a20953

Please sign in to comment.