mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-27 21:01:15 +08:00
#54 : added first version of case class serializer
This commit is contained in:
parent
480e5978e5
commit
dd08c76382
@ -31,7 +31,7 @@
|
||||
<commons.collections.version>4.01</commons.collections.version>
|
||||
<commons.lang.version>3.0.1</commons.lang.version>
|
||||
<commons.io.version>2.1</commons.io.version>
|
||||
<codegen.version>0.4.4</codegen.version>
|
||||
<codegen.version>0.4.5</codegen.version>
|
||||
<mysema.lang.version>0.2.2</mysema.lang.version>
|
||||
<cglib.version>2.2</cglib.version>
|
||||
<findbugs.version>1.3.2</findbugs.version>
|
||||
|
||||
Binary file not shown.
@ -2,7 +2,7 @@ package com.mysema.query.scala
|
||||
|
||||
import com.mysema.query.codegen._
|
||||
import com.mysema.codegen.{ CodeWriter, ScalaWriter }
|
||||
import com.mysema.codegen.model.Type
|
||||
import com.mysema.codegen.model.{ Parameter, Type }
|
||||
import com.mysema.query
|
||||
|
||||
import javax.inject.Inject
|
||||
@ -14,19 +14,50 @@ import scala.reflect.BeanProperty
|
||||
import scala.collection.JavaConversions._
|
||||
import scala.collection.mutable.Set
|
||||
|
||||
/**
|
||||
* BeanSerializer for Scala
|
||||
*
|
||||
* @author tiwe
|
||||
*
|
||||
*/
|
||||
class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Serializer {
|
||||
class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends BeanSerializer(typeMappings) {
|
||||
|
||||
var javadocSuffix = " is a Querydsl bean type"
|
||||
|
||||
var javaBeanSupport = true
|
||||
|
||||
def writeClass(model: EntityType, writer: ScalaWriter) = {
|
||||
// javadoc
|
||||
writer.javadoc(model.getSimpleName + javadocSuffix)
|
||||
|
||||
// header
|
||||
model.getAnnotations foreach (writer.annotation(_))
|
||||
writer.beginClass(model)
|
||||
|
||||
// properties
|
||||
model.getProperties foreach { property =>
|
||||
property.getAnnotations.foreach(writer.annotation(_))
|
||||
if (javaBeanSupport) writer.line("@BeanProperty")
|
||||
writer.publicField(property.getType(), property.getEscapedName, "_")
|
||||
}
|
||||
|
||||
writer.end()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class CaseClassSerializer @Inject() (typeMappings: TypeMappings) extends BeanSerializer(typeMappings) {
|
||||
|
||||
def javaBeanSupport = false
|
||||
|
||||
def writeClass(model: EntityType, writer: ScalaWriter) = {
|
||||
model.getAnnotations foreach (writer.annotation(_))
|
||||
val parameters = model.getProperties.map(p => new Parameter(p.getEscapedName, p.getType)).toArray
|
||||
writer.caseClass(model.getSimpleName, parameters:_*)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
abstract class BeanSerializer(typeMappings: TypeMappings) extends Serializer {
|
||||
|
||||
var createCompanionObject = true
|
||||
|
||||
var javaBeanSupport = true
|
||||
|
||||
var javadocSuffix = " is a Querydsl bean type"
|
||||
def javaBeanSupport: Boolean
|
||||
|
||||
def serialize(model: EntityType, serializerConfig: SerializerConfig, writer: CodeWriter) {
|
||||
val simpleName = model.getSimpleName
|
||||
@ -47,24 +78,12 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali
|
||||
writeCompanionObject(model, queryType, writer.asInstanceOf[ScalaWriter])
|
||||
}
|
||||
|
||||
// javadoc
|
||||
writer.javadoc(simpleName + javadocSuffix)
|
||||
|
||||
// header
|
||||
model.getAnnotations foreach (writer.annotation(_))
|
||||
writer.beginClass(model)
|
||||
|
||||
// properties
|
||||
model.getProperties foreach { property =>
|
||||
property.getAnnotations.foreach(writer.annotation(_))
|
||||
if (javaBeanSupport) writer.line("@BeanProperty")
|
||||
writer.publicField(property.getType(), property.getEscapedName, "_")
|
||||
}
|
||||
|
||||
writer.end()
|
||||
writeClass(model, writer.asInstanceOf[ScalaWriter])
|
||||
}
|
||||
|
||||
private def writeCompanionObject(model: EntityType, queryType: Type, writer: ScalaWriter) = {
|
||||
def writeClass(model: EntityType, writer: ScalaWriter)
|
||||
|
||||
def writeCompanionObject(model: EntityType, queryType: Type, writer: ScalaWriter) = {
|
||||
val modelName = writer.getRawName(model)
|
||||
val queryTypeName = writer.getRawName(queryType)
|
||||
val variable = model.getUncapSimpleName
|
||||
@ -75,7 +94,6 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali
|
||||
writer.end()
|
||||
}
|
||||
|
||||
|
||||
private def getAnnotationTypes(model: EntityType): Set[String] = {
|
||||
val imports = Set() ++ model.getAnnotations.map(_.annotationType.getName);
|
||||
// flatMap flattens the results of the map-function.
|
||||
@ -83,4 +101,6 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali
|
||||
imports ++ model.getProperties.flatMap(_.getAnnotations.map(_.annotationType.getName));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,58 @@
|
||||
package com.mysema.query.scala
|
||||
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
import com.mysema.codegen._;
|
||||
import com.mysema.codegen.model._;
|
||||
import com.mysema.query.codegen._;
|
||||
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.junit._
|
||||
import org.junit.Assert._
|
||||
|
||||
import scala.collection.JavaConversions._
|
||||
|
||||
class CaseClassSerializerTest extends CompileTestUtils {
|
||||
|
||||
val typeMappings = ScalaTypeMappings.create
|
||||
|
||||
var entityType: EntityType = null
|
||||
|
||||
var writer = new StringWriter()
|
||||
|
||||
@Before
|
||||
def setUp() {
|
||||
// type
|
||||
val typeModel = new SimpleType(TypeCategory.ENTITY, "com.mysema.query.DomainClass", "com.mysema.query", "DomainClass", false, false)
|
||||
entityType = new EntityType(typeModel)
|
||||
|
||||
// property
|
||||
entityType.addProperty(new Property(entityType, "entityField", entityType, new Array[String](0)))
|
||||
entityType.addProperty(new Property(entityType, "collection", new SimpleType(Types.COLLECTION, typeModel), new Array[String](0)))
|
||||
entityType.addProperty(new Property(entityType, "listField", new SimpleType(Types.LIST, typeModel), new Array[String](0)))
|
||||
entityType.addProperty(new Property(entityType, "setField", new SimpleType(Types.SET, typeModel), new Array[String](0)))
|
||||
entityType.addProperty(new Property(entityType, "arrayField", new ClassType(TypeCategory.ARRAY, classOf[Array[String]]), new Array[String](0)))
|
||||
entityType.addProperty(new Property(entityType, "mapField", new SimpleType(Types.MAP, typeModel, typeModel), new Array[String](0)))
|
||||
}
|
||||
|
||||
@Test
|
||||
def Print {
|
||||
val serializer = new CaseClassSerializer(typeMappings)
|
||||
typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType))
|
||||
serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer))
|
||||
|
||||
println(writer.toString)
|
||||
}
|
||||
|
||||
@Test
|
||||
def Compile {
|
||||
val serializer = new CaseClassSerializer(typeMappings)
|
||||
serializer.createCompanionObject = false
|
||||
typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType))
|
||||
serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer))
|
||||
val str = writer.toString()
|
||||
assertCompileSuccess(str)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user