Skip to content

Commit

Permalink
Support table name to be different from the class name. Class can be …
Browse files Browse the repository at this point in the history
…annotated with @table("TABLE_NAME") to specify table name.
  • Loading branch information
kdabir committed Apr 29, 2013
1 parent 3d9ba6b commit 9c977db
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/gstorm/ClassMetaData.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,17 @@ class ClassMetaData {

ClassMetaData(Class modelClass) {
this.modelClass = modelClass
this.tableName = modelClass.simpleName
this.tableName = extractTableName(modelClass)
this.fields = modelClass.declaredFields.findAll { !it.synthetic }.collect { field -> new FieldMetaData(field) }
this._fieldsMap = this.fields.collectEntries {fieldMetaData -> [fieldMetaData.name, fieldMetaData]}
}

FieldMetaData getAt(String fieldName) {
this._fieldsMap[fieldName]
}

private String extractTableName(Class modelClass) {
modelClass.getAnnotation(Table)?.value()?.trim() ?: modelClass.simpleName
}

}
9 changes: 9 additions & 0 deletions src/gstorm/Table.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package gstorm

import java.lang.annotation.Retention
import static java.lang.annotation.RetentionPolicy.RUNTIME

@Retention(RUNTIME)
@interface Table {
String value()
}
20 changes: 20 additions & 0 deletions test/gstorm/ClassMetaDataAnnotationsTest.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package gstorm

class ClassMetaDataAnnotationsTest extends GroovyTestCase {

@Table("TestTable")
class TestSubject {
String name
}

def metadata

void setUp() {
metadata = new ClassMetaData(TestSubject)
}

void "test tableName"() {
assert metadata.tableName.equalsIgnoreCase("TestTable")
}

}

0 comments on commit 9c977db

Please sign in to comment.