Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
mpriatel committed Mar 9, 2010
1 parent ab4331a commit badb08b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 11 deletions.
19 changes: 17 additions & 2 deletions MongodbToolsGrailsPlugin.groovy
Expand Up @@ -54,6 +54,23 @@ class MongodbToolsGrailsPlugin
mongo.addMapperModel(typeName,mmm)
}

/**
* inserts the Domain object into mongo and assigns the generated mongo document id
* to _id
*/
clz.clazz.metaClass.mongoInsert = { coll ->
def doc = delegate.toMongoDoc()
coll.insert( doc )
delegate._id = doc._id
}


clz.clazz.metaClass.mongoRemove = { coll ->
if ( delegate._id ){
coll.remove( new BasicDBObject([_id:delegate._id]))
}
}

clz.clazz.metaClass.toMongoDoc = {

def mapper = mongo.getMapperForClass(clazz)
Expand All @@ -66,11 +83,9 @@ class MongodbToolsGrailsPlugin
{
return mapper.buildMongoDoc(delegate)
}

}
}


// go through all the registered mappers, and inspect their fields to see
// if the field class types are mapped. if so, associate the mapper
mongo.mappersByClass.each { mappedClz, mapper ->
Expand Down
17 changes: 12 additions & 5 deletions src/groovy/com/iolog/mongodbtools/MongoDbWrapper.groovy
Expand Up @@ -240,7 +240,7 @@ public class MongoDbWrapper implements InitializingBean


Mongo mongo = new Mongo(dbConfig.host, port)
mongo.getDB("X").a


mongos.put(name, mongo)
return mongo
Expand All @@ -253,7 +253,7 @@ public class MongoDbWrapper implements InitializingBean
*/
public void addMapperModel(String typeName, MongoMapperModel mmm)
{
println mmm

typeForClassMap.put(mmm.clazz, typeName)
mappersByTypeName.put(typeName, mmm)
mappersByClass.put(mmm.clazz, mmm)
Expand All @@ -264,7 +264,6 @@ public class MongoDbWrapper implements InitializingBean
*/
void afterPropertiesSet()
{

Mongo.metaClass.propertyMissing = { String name ->
return ((Mongo) delegate).getDB(name)
}
Expand All @@ -281,9 +280,17 @@ public class MongoDbWrapper implements InitializingBean
}
}

BasicDBObject.metaClass.toObject = {

Collection.metaClass.toMongoDoc = {
BasicDBList newList = new BasicDBList()
delegate.each {
def mapper = mappersByClass.get(it.getClass())
if ( mapper ) newList << mapper.buildMongoDoc(it)
else newList << it
}
return newList
}

BasicDBObject.metaClass.toObject = {
def typeName = delegate.get("_t")

if (!typeName)
Expand Down
1 change: 1 addition & 0 deletions src/groovy/com/iolog/mongodbtools/MongoMapperField.groovy
Expand Up @@ -31,6 +31,7 @@ class MongoMapperField
String mongoFieldName
Class fieldType
MongoMapperModel mapper
boolean isGrailsHasMany

/**
* flag which indicates that this field's class type has a registered mapper.
Expand Down
37 changes: 33 additions & 4 deletions src/groovy/com/iolog/mongodbtools/MongoMapperModel.groovy
Expand Up @@ -51,11 +51,23 @@ class MongoMapperModel {
fieldNames.each { alias,fieldName ->
MongoMapperField mmf = new MongoMapperField();

Class type = GrailsClassUtils.getPropertyType(this.clazz,fieldName)
mmf.fieldType = type
Map hasManyDef = GrailsClassUtils.getStaticPropertyValue(this.clazz,"hasMany")
if ( hasManyDef && hasManyDef.containsKey(fieldName))
{
mmf.isGrailsHasMany = true
mmf.fieldType = hasManyDef.get(fieldName)
}
else
{
Class type = GrailsClassUtils.getPropertyType(this.clazz,fieldName)
mmf.fieldType = type
}

mmf.domainFieldName = fieldName
mmf.mongoFieldName = alias

println "${mmf.domainFieldName} = ${mmf.fieldType} (${mmf.isGrailsHasMany})"

fields[idx++] = mmf
}
}
Expand All @@ -77,8 +89,25 @@ class MongoMapperModel {
def val = o."${f.domainFieldName}"
if ( val )
{
if ( f.mapper ) doc.put( f.mongoFieldName , f.mapper.buildMongoDoc(val))
else doc.put( f.mongoFieldName , val )
if ( f.mapper )
{
if ( f.isGrailsHasMany )
{
doc.put( f.mongoFieldName , val.toMongoDoc() )
}
else
{
doc.put( f.mongoFieldName , f.mapper.buildMongoDoc(val))
}
}
else if ( val instanceof Collection )
{
doc.put(f.mongoFieldName, val.toMongoDoc() )
}
else // no mapper associated, store the object as-is
{
doc.put( f.mongoFieldName , val )
}
}
}
return doc
Expand Down

0 comments on commit badb08b

Please sign in to comment.