Skip to content
This repository has been archived by the owner on Dec 11, 2024. It is now read-only.

Identifying referenced properties properly when not automatically obt… #125

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
.idea
*.iml
*.iws
*.ipr
out
data
target
Expand Down
2 changes: 1 addition & 1 deletion application.properties
Original file line number Diff line number Diff line change
@@ -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
7 changes: 5 additions & 2 deletions grails-app/domain/test/transients/Palette.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@ class Palette {
}
}

List<Color> 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 = {
}
Expand Down
1 change: 1 addition & 0 deletions grails-elasticsearch-0.0.4.5.X-SNAPSHOT.zip.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e9eaaac75e078818fc4180b6bda7acb67abbe113
1 change: 1 addition & 0 deletions grails-elasticsearch-0.0.4.7-SNAPSHOT.zip.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
deb2863a5dcd035642d5fa38f18decb8878d6edb
1 change: 1 addition & 0 deletions grails-elasticsearch-0.0.4.x-SNAPSHOT.zip.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fc810e0826e746b06e3c5f578638adb1212bb438
6 changes: 3 additions & 3 deletions grailsw
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -200,15 +200,15 @@ 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
mkdir -p "$GRAILS_AGENT_CACHE_DIR"
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

Expand Down
8 changes: 4 additions & 4 deletions grailsw.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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%"

Expand All @@ -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
Expand Down Expand Up @@ -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"

Expand Down Expand Up @@ -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%"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, Object> getMappingProperties(SearchableClassMapping scm) {
Map<String, Object> elasticTypeMappingProperties = [:]

Expand Down Expand Up @@ -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()

Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Original file line number Diff line number Diff line change
@@ -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

}
}
Binary file not shown.
Binary file not shown.