From 207d13a12c2be2d1bc773b60a559b3d0178a9931 Mon Sep 17 00:00:00 2001 From: lgrignon Date: Wed, 15 Nov 2017 17:51:14 +0100 Subject: [PATCH] 2.2.0: Grails 3.3 support --- README.md | 6 ++ build.gradle | 8 +- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 72 ++++++++++-------- gradlew.bat | 14 +--- ...rnateSearchConfigurationInterceptor.groovy | 6 +- .../search/SearchMappingEntityConfig.groovy | 51 ++++++++----- 9 files changed, 94 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 9c53acc..f8e6c58 100644 --- a/README.md +++ b/README.md @@ -654,6 +654,12 @@ It contains several branches for each version of this plugin ## Change log +### v2.2 +* Grails 3.3.x +* GORM 6.1 +* Hibernate 5.2.9 +* Hibernate Search 5.7 + ### v2.1.2 * Supports hibernate.configClass if any * Removed dependencies to info.app.grailsVersion, info.app.name diff --git a/build.gradle b/build.gradle index e3db2fa..3e1201e 100644 --- a/build.gradle +++ b/build.gradle @@ -6,11 +6,11 @@ buildscript { } dependencies { classpath "org.grails:grails-gradle-plugin:$grailsVersion" - classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.8.2" + classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.14.4" } } -version "2.1.2" +version "2.2.0" group "org.grails.plugins" apply plugin: 'java' @@ -56,7 +56,6 @@ dependencies { compile "org.grails.plugins:cache" compile "org.grails.plugins:scaffolding" - // GORM 6 compile "org.grails.plugins:hibernate5:6.1.4" compile 'org.grails.plugins:cache' @@ -69,7 +68,7 @@ dependencies { profile "org.grails.profiles:web-plugin" provided "org.grails:grails-plugin-services" provided "org.grails:grails-plugin-domain-class" - runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2" + runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.14.4" testCompile "org.grails:grails-plugin-testing" testCompile "org.grails.plugins:geb" testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1" @@ -83,7 +82,6 @@ dependencies { grailsPublish { // user/key: useless, see https://medium.com/@benorama/how-to-publish-your-grails-3-plugin-to-bintray-c341b24f567d#.elz43j5nq user = 'lgrignon' -// key = '????' githubSlug = 'mathpere/grails-hibernate-search-plugin' license { name = 'Apache-2.0' } title = "Grails Hibernate Search Plugin" diff --git a/gradle.properties b/gradle.properties index 5a26e4b..ca94ed8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ -grailsVersion=3.2.10 -gradleWrapperVersion=3.3 -gormVersion=6.1.4.RELEASE +grailsVersion=3.3.1 +gradleWrapperVersion=3.5 +gormVersion=6.1.8.RELEASE diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 13372aef5e24af05341d49695ee84e5f9b594659..ed88a042a287c140a32e1639edfc91b2a233da8c 100644 GIT binary patch delta 28642 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..f955316 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/main/groovy/grails/plugins/hibernate/search/HibernateSearchConfigurationInterceptor.groovy b/src/main/groovy/grails/plugins/hibernate/search/HibernateSearchConfigurationInterceptor.groovy index 8ed4882..c1e7c2d 100644 --- a/src/main/groovy/grails/plugins/hibernate/search/HibernateSearchConfigurationInterceptor.groovy +++ b/src/main/groovy/grails/plugins/hibernate/search/HibernateSearchConfigurationInterceptor.groovy @@ -113,17 +113,17 @@ public class HibernateSearchConfigurationInterceptor { if (searchClosure != null) { SearchMappingEntityConfig searchMappingEntityConfig = new SearchMappingEntityConfig(searchMapping, - domainClass); + domainClass.getClazz()); searchClosure.setDelegate(searchMappingEntityConfig); searchClosure.setResolveStrategy(Closure.DELEGATE_FIRST); searchClosure.call(); Map indexedProperties = new HashMap<>(); - for (GrailsDomainClassProperty property : domainClass.getPersistentProperties()) { + for (String indexedPropertyName : searchMappingEntityConfig.getIndexedPropertyNames()) { PropertyDescriptor indexedPropertyDescriptor = searchMapping .getEntityDescriptor(domainClass.getClazz()) - .getPropertyDescriptor(property.getName(), ElementType.FIELD); + .getPropertyDescriptor(indexedPropertyName, ElementType.FIELD); if (indexedPropertyDescriptor != null) { indexedProperties.put(indexedPropertyDescriptor.getName(), indexedPropertyDescriptor); } diff --git a/src/main/groovy/grails/plugins/hibernate/search/SearchMappingEntityConfig.groovy b/src/main/groovy/grails/plugins/hibernate/search/SearchMappingEntityConfig.groovy index 5e6aedc..7f7423c 100644 --- a/src/main/groovy/grails/plugins/hibernate/search/SearchMappingEntityConfig.groovy +++ b/src/main/groovy/grails/plugins/hibernate/search/SearchMappingEntityConfig.groovy @@ -24,6 +24,7 @@ import org.hibernate.search.cfg.DocumentIdMapping; import org.hibernate.search.cfg.EntityDescriptor import org.hibernate.search.cfg.EntityMapping import org.hibernate.search.cfg.FieldMapping; +import org.hibernate.search.cfg.IndexEmbeddedMapping import org.hibernate.search.cfg.PropertyMapping; import org.hibernate.search.cfg.SearchMapping import org.slf4j.Logger @@ -32,8 +33,6 @@ import org.slf4j.LoggerFactory; import java.lang.annotation.ElementType import java.lang.reflect.Field; -import grails.core.GrailsDomainClass -import grails.core.GrailsDomainClassProperty; import grails.plugins.*; class SearchMappingEntityConfig { @@ -44,19 +43,22 @@ class SearchMappingEntityConfig { def analyzer - def mapping - private final GrailsDomainClass domainClass + private final DocumentIdMapping mapping + private final Class domainClass private final EntityMapping entityMapping private final SearchMapping searchMapping + private final List indexedPropertyNames; - public SearchMappingEntityConfig( SearchMapping searchMapping, GrailsDomainClass domainClass ) { + public SearchMappingEntityConfig( SearchMapping searchMapping, Class domainClass ) { this.domainClass = domainClass this.searchMapping = searchMapping; - this.entityMapping = searchMapping.entity( domainClass.getClazz() ) + this.entityMapping = searchMapping.entity( domainClass ) this.mapping = entityMapping.indexed().property( IDENTITY, ElementType.FIELD ).documentId() + this.indexedPropertyNames = new LinkedList<>(); + } def setClassBridge( Map classBridge ) { @@ -75,42 +77,45 @@ class SearchMappingEntityConfig { log.debug "adding indexEmbedded property: " + name - mapping = mapping.property( name, ElementType.FIELD ).indexEmbedded() + IndexEmbeddedMapping propertyMapping = mapping.property( name, ElementType.FIELD ).indexEmbedded() if ( args.indexEmbedded instanceof Map ) { def depth = args.indexEmbedded["depth"] if ( depth ) { - mapping = mapping.depth( depth ) + propertyMapping.depth( depth ) } def includeEmbeddedObjectId = args.indexEmbedded["includeEmbeddedObjectId"] if ( includeEmbeddedObjectId ) { - mapping = mapping.includeEmbeddedObjectId(includeEmbeddedObjectId) + propertyMapping.includeEmbeddedObjectId(includeEmbeddedObjectId) } } + + indexedPropertyNames.add(name); + } else if ( args.containedIn ) { log.debug "adding containedIn property: " + name - mapping = mapping.property( name, ElementType.FIELD ).containedIn() - + mapping.property( name, ElementType.FIELD ).containedIn() + + indexedPropertyNames.add(name); + } else { log.debug "adding indexed property: " + name - GrailsDomainClassProperty property = domainClass.getPersistentProperty(name); - Field backingField = null; // try to find the field in the parent class hierarchy (starting from domain class itself) - Class currentDomainClass = domainClass.getClazz(); + Class currentDomainClass = domainClass; while (currentDomainClass != null) { try { - backingField = currentDomainClass.getDeclaredField(property.getName()); + backingField = currentDomainClass.getDeclaredField(name); break; } catch (NoSuchFieldException e) { // and in groovy's traits - backingField = currentDomainClass.getDeclaredFields().find { field -> field.getName().endsWith('__' + property.getName()) }; + backingField = currentDomainClass.getDeclaredFields().find { field -> field.getName().endsWith('__' + name) }; if (backingField != null) { break; } @@ -128,8 +133,12 @@ class SearchMappingEntityConfig { EntityMapping targetEntityMapping = mapping.entity( currentDomainClass ); - FieldMapping fieldMapping = targetEntityMapping.property( backingField.getName(), ElementType.FIELD ).field().name( args.name ?: name ) + String fieldName = backingField.getName(); + FieldMapping fieldMapping = targetEntityMapping.property( fieldName, ElementType.FIELD ).field().name( args.name ?: name ) registerIndexedProperty(fieldMapping, args) + + indexedPropertyNames.add(fieldName); + } } @@ -189,7 +198,11 @@ class SearchMappingEntityConfig { } } - public EntityDescriptor getEntityDescriptor() { - return searchMapping.getEntity( domainClass.getClazz() ) + EntityDescriptor getEntityDescriptor() { + return searchMapping.getEntity( domainClass ) + } + + List getIndexedPropertyNames() { + return indexedPropertyNames; } }