diff --git a/.gitignore b/.gitignore index c32d6033..51f718fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .idea *.iml +*.iws +*.ipr out data target diff --git a/application.properties b/application.properties index c00fc6af..88d6a3b8 100755 --- a/application.properties +++ b/application.properties @@ -1,4 +1,4 @@ #Grails Metadata file #Tue Apr 21 20:14:27 CST 2015 -app.grails.version=2.4.4 +app.grails.version=2.4.5 app.name=elasticsearch diff --git a/grails-app/domain/test/transients/Palette.groovy b/grails-app/domain/test/transients/Palette.groovy index e62fb923..33ea3761 100644 --- a/grails-app/domain/test/transients/Palette.groovy +++ b/grails-app/domain/test/transients/Palette.groovy @@ -15,13 +15,16 @@ class Palette { } } + List getComplementaryColors() { + colors.collect { it.complementary() } + } static transients = ['complementaries'] static searchable = { - only = ['colors', 'complementaries'] + only = ['colors', 'complementaries', 'complementaryColors'] } - static hasMany = [colors : Color, tags:String, complementaries: String] + static hasMany = [colors : Color, tags:String, complementaries: String, complementaryColors: Color] static constraints = { } diff --git a/grails-elasticsearch-0.0.4.5.X-SNAPSHOT.zip.sha1 b/grails-elasticsearch-0.0.4.5.X-SNAPSHOT.zip.sha1 new file mode 100644 index 00000000..355702be --- /dev/null +++ b/grails-elasticsearch-0.0.4.5.X-SNAPSHOT.zip.sha1 @@ -0,0 +1 @@ +e9eaaac75e078818fc4180b6bda7acb67abbe113 \ No newline at end of file diff --git a/grails-elasticsearch-0.0.4.7-SNAPSHOT.zip.sha1 b/grails-elasticsearch-0.0.4.7-SNAPSHOT.zip.sha1 new file mode 100644 index 00000000..d725b8ea --- /dev/null +++ b/grails-elasticsearch-0.0.4.7-SNAPSHOT.zip.sha1 @@ -0,0 +1 @@ +deb2863a5dcd035642d5fa38f18decb8878d6edb \ No newline at end of file diff --git a/grails-elasticsearch-0.0.4.x-SNAPSHOT.zip.sha1 b/grails-elasticsearch-0.0.4.x-SNAPSHOT.zip.sha1 new file mode 100644 index 00000000..2fc8d3e0 --- /dev/null +++ b/grails-elasticsearch-0.0.4.x-SNAPSHOT.zip.sha1 @@ -0,0 +1 @@ +fc810e0826e746b06e3c5f578638adb1212bb438 \ No newline at end of file diff --git a/grailsw b/grailsw index c033fa68..b337e6f3 100755 --- a/grailsw +++ b/grailsw @@ -132,7 +132,7 @@ fi if [ -z "$STARTER_CONF" ]; then STARTER_CONF="$GRAILS_HOME/conf/groovy-starter.conf" fi -STARTER_CLASSPATH="wrapper/grails-wrapper-runtime-2.4.4.jar:wrapper:." +STARTER_CLASSPATH="wrapper/grails-wrapper-runtime-2.4.5.jar:wrapper:." # Allow access to Cocoa classes on OS X if $darwin; then @@ -200,7 +200,7 @@ if $mingw ; then fi if [ -z "$GRAILS_AGENT_CACHE_DIR" ]; then - GRAILS_AGENT_CACHE_DIR=~/.grails/2.4.4/ + GRAILS_AGENT_CACHE_DIR=~/.grails/2.4.5/ fi SPRINGLOADED_PARAMS=profile=grails\;cacheDir=$GRAILS_AGENT_CACHE_DIR if [ ! -d "$GRAILS_AGENT_CACHE_DIR" ]; then @@ -208,7 +208,7 @@ if [ ! -d "$GRAILS_AGENT_CACHE_DIR" ]; then fi # Process JVM args -AGENT_STRING="-javaagent:wrapper/springloaded-1.2.1.RELEASE.jar -Xverify:none -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=$SPRINGLOADED_PARAMS" +AGENT_STRING="-javaagent:wrapper/springloaded-1.2.3.RELEASE.jar -Xverify:none -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=$SPRINGLOADED_PARAMS" CMD_LINE_ARGS="" DISABLE_RELOADING=true diff --git a/grailsw.bat b/grailsw.bat index 3e5aa5eb..2bfff677 100644 --- a/grailsw.bat +++ b/grailsw.bat @@ -60,7 +60,7 @@ if "%GRAILS_HOME:~-1%"=="\" SET GRAILS_HOME=%GRAILS_HOME:~0,-1% :init for %%x in ("%USERPROFILE%") do set SHORTHOME=%%~fsx -if "x%GRAILS_AGENT_CACHE_DIR%" == "x" set GRAILS_AGENT_CACHE_DIR=%SHORTHOME%/.grails/2.4.4/ +if "x%GRAILS_AGENT_CACHE_DIR%" == "x" set GRAILS_AGENT_CACHE_DIR=%SHORTHOME%/.grails/2.4.5/ set SPRINGLOADED_PARAMS="profile=grails;cacheDir=%GRAILS_AGENT_CACHE_DIR%" if not exist "%GRAILS_AGENT_CACHE_DIR%" mkdir "%GRAILS_AGENT_CACHE_DIR%" @@ -69,7 +69,7 @@ if "%GRAILS_NO_PERMGEN%" == "" ( if not errorlevel 1 set GRAILS_NO_PERMGEN=1 ) -set AGENT_STRING=-javaagent:wrapper/springloaded-1.2.1.RELEASE.jar -Xverify:none -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=\"%SPRINGLOADED_PARAMS%\" +set AGENT_STRING=-javaagent:wrapper/springloaded-1.2.3.RELEASE.jar -Xverify:none -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=\"%SPRINGLOADED_PARAMS%\" set DISABLE_RELOADING= if "%GRAILS_OPTS%" == "" ( set GRAILS_OPTS=-server -Xmx768M -Xms64M -Dfile.encoding=UTF-8 @@ -140,7 +140,7 @@ set CMD_LINE_ARGS=%$ :execute @rem Setup the command line -set STARTER_CLASSPATH=wrapper/grails-wrapper-runtime-2.4.4.jar;wrapper;. +set STARTER_CLASSPATH=wrapper/grails-wrapper-runtime-2.4.5.jar;wrapper;. if exist "%USERPROFILE%/.groovy/init.bat" call "%USERPROFILE%/.groovy/init.bat" @@ -169,7 +169,7 @@ set JAVA_OPTS=%GRAILS_OPTS% %JAVA_OPTS% %AGENT% set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name="%PROGNAME%" set JAVA_OPTS=%JAVA_OPTS% -Dgrails.home="%GRAILS_HOME%" -set JAVA_OPTS=%JAVA_OPTS% -Dgrails.version=2.4.4 +set JAVA_OPTS=%JAVA_OPTS% -Dgrails.version=2.4.5 set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir=. set JAVA_OPTS=%JAVA_OPTS% -Dtools.jar="%TOOLS_JAR%" set JAVA_OPTS=%JAVA_OPTS% -Dgroovy.starter.conf="%STARTER_CONF%" diff --git a/src/groovy/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactory.groovy b/src/groovy/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactory.groovy index c5d84bc8..1bf6c970 100644 --- a/src/groovy/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactory.groovy +++ b/src/groovy/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactory.groovy @@ -63,6 +63,24 @@ class ElasticSearchMappingFactory { mapping } + static Class getReferencedType(SearchableClassPropertyMapping scpm) { + getReferencedType(scpm.grailsProperty) + } + static Class getReferencedType(GrailsDomainClassProperty domainClassProperty) { + Class referencedType = domainClassProperty.getReferencedPropertyType() + + if(Collection.isAssignableFrom(referencedType) || referencedType.isArray()) { + //Handle collections explictly mapped (needed for dealing with transients) + if (domainClassProperty.domainClass.associationMap[domainClassProperty.name]) { + referencedType = domainClassProperty.domainClass.associationMap[domainClassProperty.name] + } + if (referencedType.isArray()) { + referencedType = referencedType.getComponentType() + } + } + referencedType + } + private static Map getMappingProperties(SearchableClassMapping scm) { Map elasticTypeMappingProperties = [:] @@ -90,7 +108,7 @@ class ElasticSearchMappingFactory { props = [:] propOptions.properties = props } - GrailsDomainClass referencedDomainClass = scpm.grailsProperty.getReferencedDomainClass() + GrailsDomainClass referencedDomainClass = Holders.grailsApplication.getDomainClass(getReferencedType(scpm).canonicalName) GrailsDomainClassProperty idProperty = referencedDomainClass.getPropertyByName('id') String idType = idProperty.getTypePropertyName() @@ -152,13 +170,7 @@ class ElasticSearchMappingFactory { //Preprocess collections and arrays to work with it's element types Class referencedPropertyType = scpm.grailsProperty.getReferencedPropertyType() if(Collection.isAssignableFrom(referencedPropertyType) || referencedPropertyType.isArray()) { - //Handle collections explictly mapped (needed for dealing with transients) - if (scpm.grailsProperty.domainClass.associationMap[scpm.grailsProperty.name]) { - referencedPropertyType = scpm.grailsProperty.domainClass.associationMap[scpm.grailsProperty.name] - } - if (referencedPropertyType.isArray()) { - referencedPropertyType = referencedPropertyType.getComponentType() - } + referencedPropertyType = getReferencedType(scpm) String basicType = getTypeSimpleName(referencedPropertyType) if (SUPPORTED_FORMAT.contains(basicType)) { propType = basicType diff --git a/src/groovy/org/grails/plugins/elasticsearch/mapping/SearchableClassMappingConfigurator.groovy b/src/groovy/org/grails/plugins/elasticsearch/mapping/SearchableClassMappingConfigurator.groovy index 736024e2..59f6498f 100644 --- a/src/groovy/org/grails/plugins/elasticsearch/mapping/SearchableClassMappingConfigurator.groovy +++ b/src/groovy/org/grails/plugins/elasticsearch/mapping/SearchableClassMappingConfigurator.groovy @@ -67,7 +67,7 @@ class SearchableClassMappingConfigurator { for (SearchableClassMapping scm : mappings) { for (SearchableClassPropertyMapping scpm : scm.getPropertiesMapping()) { if (scpm.isComponent()) { - Class componentType = scpm.getGrailsProperty().getReferencedPropertyType() + Class componentType = ElasticSearchMappingFactory.getReferencedType(scpm) scpm.setComponentPropertyMapping(elasticSearchContext.getMappingContextByType(componentType)) } } diff --git a/test/integration/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy b/test/integration/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy index d7c7ea7d..8c6de3b1 100644 --- a/test/integration/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy +++ b/test/integration/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy @@ -42,25 +42,26 @@ class ElasticSearchMappingFactorySpec extends IntegrationSpec { mapping[clazz.simpleName.toLowerCase()]['properties'][property].type == expectedType where: - clazz | property || expectedType + clazz | property || expectedType - Building | 'name' || 'string' - Building | 'date' || 'date' - Building | 'location' || 'geo_point' + Building | 'name' || 'string' + Building | 'date' || 'date' + Building | 'location' || 'geo_point' - Product | 'price' || 'float' - Product | 'json' || 'object' + Product | 'price' || 'float' + Product | 'json' || 'object' - Catalog | 'pages' || 'object' + Catalog | 'pages' || 'object' - Person | 'fullName' || 'string' - Person | 'nickNames' || 'string' + Person | 'fullName' || 'string' + Person | 'nickNames' || 'string' - Palette | 'colors' || 'string' - Palette | 'complementaries' || 'string' + Palette | 'colors' || 'string' + Palette | 'complementaries' || 'string' + Palette | 'complementaryColors' || 'boolean' - Anagram | 'length' || 'integer' - Anagram | 'palindrome' || 'boolean' + Anagram | 'length' || 'integer' + Anagram | 'palindrome' || 'boolean' } } //['string', 'integer', 'long', 'float', 'double', 'boolean', 'null', 'date'] \ No newline at end of file diff --git a/test/unit/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy b/test/unit/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy new file mode 100644 index 00000000..f89a229e --- /dev/null +++ b/test/unit/org/grails/plugins/elasticsearch/mapping/ElasticSearchMappingFactorySpec.groovy @@ -0,0 +1,28 @@ +package org.grails.plugins.elasticsearch.mapping + +import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass +import org.codehaus.groovy.grails.commons.GrailsDomainClass +import spock.lang.Specification +import test.transients.Color +import test.transients.Palette + +/** + * Created by @marcos-carceles on 27/07/15. + */ +class ElasticSearchMappingFactorySpec extends Specification { + + void "identifies correct component classes"() { + given: + GrailsDomainClass domainClass = new DefaultGrailsDomainClass(clazz) + expect: + ElasticSearchMappingFactory.getReferencedType(domainClass.getPropertyByName(property)) == referencedClass + + where: + clazz | property || referencedClass + Palette | 'author' || String + Palette | 'colors' || Color + Palette | 'tags' || String + Palette | 'complementaryColors' || Color + + } +} diff --git a/wrapper/grails-wrapper-runtime-2.4.4.jar b/wrapper/grails-wrapper-runtime-2.4.5.jar similarity index 87% rename from wrapper/grails-wrapper-runtime-2.4.4.jar rename to wrapper/grails-wrapper-runtime-2.4.5.jar index 2f605f3d..191f633d 100644 Binary files a/wrapper/grails-wrapper-runtime-2.4.4.jar and b/wrapper/grails-wrapper-runtime-2.4.5.jar differ diff --git a/wrapper/springloaded-1.2.1.RELEASE.jar b/wrapper/springloaded-1.2.3.RELEASE.jar similarity index 70% rename from wrapper/springloaded-1.2.1.RELEASE.jar rename to wrapper/springloaded-1.2.3.RELEASE.jar index 86b648f0..7e8cb3f4 100644 Binary files a/wrapper/springloaded-1.2.1.RELEASE.jar and b/wrapper/springloaded-1.2.3.RELEASE.jar differ