From d984801c812eb73caab2e8af1ac153e62bcbd401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 19 Sep 2010 16:13:08 +0000 Subject: [PATCH] --- .../query/scala/ScalaBeanSerializer.scala | 8 +-- .../scala/sql/ScalaMetaDataSerializer.scala | 68 +++++++++++++++++++ .../sql/ScalaMetaDataSerializerTest.scala | 43 ++++++++++++ 3 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala create mode 100644 querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializerTest.scala diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala index e023ba056..ecf6f7144 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala @@ -56,7 +56,7 @@ class ScalaBeanSerializer extends Serializer { // properties for (property <- model.getProperties()){ - property.getAnnotations.foreach( {writer.annotation(_);} ) + property.getAnnotations.foreach( {writer.annotation(_);} ) if (javaBeanSupport){ //writer.annotation(classOf[BeanProperty]); writer.line("@BeanProperty"); @@ -73,9 +73,9 @@ class ScalaBeanSerializer extends Serializer { imports.add(annotation.annotationType.getName); } for (property <- model.getProperties){ - for (annotation <- property.getAnnotations){ - imports.add(annotation.annotationType.getName); - } + for (annotation <- property.getAnnotations){ + imports.add(annotation.annotationType.getName); + } } imports; } diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala new file mode 100644 index 000000000..94ed12b2d --- /dev/null +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala @@ -0,0 +1,68 @@ +package com.mysema.query.scala.sql + +import com.mysema.query.codegen.{Serializer, EntityType, SerializerConfig} +import com.mysema.codegen.CodeWriter +import com.mysema.query + +import java.util._ +import java.io.IOException + +import scala.reflect.BeanProperty +import scala.collection.JavaConversions._ + +class ScalaMetaDataSerializer extends Serializer { + + val javadocSuffix = " is a Querydsl query type"; + + @throws(classOf[IOException]) + def serialize(model: EntityType, serializerConfig: SerializerConfig, writer: CodeWriter) { + val simpleName: String = model.getSimpleName; + + // package + if (!model.getPackageName.isEmpty()){ + writer.packageDecl(model.getPackageName); + } + + // imports + var importedClasses: Set[String] = getAnnotationTypes(model); + if (model.hasLists()){ + importedClasses.add(classOf[List[_]].getName); + } + if (model.hasMaps()){ + importedClasses.add(classOf[Map[_,_]].getName); + } + + importedClasses.foreach( { writer.importClasses(_)} ) + + // javadoc + writer.javadoc(simpleName + javadocSuffix); + + // header + for (annotation <- model.getAnnotations){ + writer.annotation(annotation); + } + writer.beginClass(model); + + // properties + for (property <- model.getProperties()){ + writer.publicField(property.getType(), property.getEscapedName); + } + + // TODO : primary key + + // TODO : foreign keys + + // TODO : inverse foreign keys + + writer.end(); + } + + def getAnnotationTypes(model: EntityType): Set[String] = { + var imports = new HashSet[String](); + for (annotation <- model.getAnnotations){ + imports.add(annotation.annotationType.getName); + } + imports; + } + +} \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializerTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializerTest.scala new file mode 100644 index 000000000..876822f21 --- /dev/null +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializerTest.scala @@ -0,0 +1,43 @@ +package com.mysema.query.scala.sql + +import org.apache.commons.lang.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 ScalaMetaDataSerializerTest { + + var entityType: EntityType = null; + + var writer = new StringWriter(); + + @Before + def setUp(){ + // type + var typeModel = new SimpleType(TypeCategory.ENTITY, "com.mysema.query.DomainClass", "com.mysema.query", "DomainClass", false,false); + entityType = new EntityType("Q", typeModel); + + // properties + List(classOf[Boolean], classOf[Comparable[_]], classOf[Integer], classOf[java.util.Date], classOf[java.sql.Date], classOf[java.sql.Time]) + .foreach(cl => { + var classType = new ClassType(TypeCategory.get(cl.getName), cl); + entityType.addProperty(new Property(entityType, StringUtils.uncapitalize(cl.getSimpleName), classType, new Array[String](0))); + }) + } + + @Test + @throws(classOf[java.io.IOException]) + def Print(){ + var serializer = new ScalaMetaDataSerializer(); + serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)); + var str = writer.toString(); + System.err.println(str); + } +} \ No newline at end of file