diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 8e0230e2c..ac843c27a 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -29,6 +29,14 @@ ${scala.version} provided + + + + com.mysema.querydsl + querydsl-sql + ${project.parent.version} + provided + @@ -38,12 +46,7 @@ test test-jar - - com.mysema.querydsl - querydsl-sql - ${project.parent.version} - test - + com.mysema.querydsl querydsl-jpa diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaBeanSerializer.scala similarity index 95% rename from querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala rename to querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaBeanSerializer.scala index ecf6f7144..5b12e620d 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/ScalaBeanSerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaBeanSerializer.scala @@ -3,9 +3,9 @@ * All rights reserved. * */ -package com.mysema.query.scala +package com.mysema.query.scala.sql -import com.mysema.query.codegen.{Serializer, EntityType, SerializerConfig} +import com.mysema.query.codegen._ import com.mysema.codegen.CodeWriter import com.mysema.query diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala similarity index 54% rename from querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala rename to querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala index 94ed12b2d..12b7ef5cc 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/ScalaMetaDataSerializer.scala @@ -1,7 +1,8 @@ package com.mysema.query.scala.sql -import com.mysema.query.codegen.{Serializer, EntityType, SerializerConfig} +import com.mysema.query.codegen._ import com.mysema.codegen.CodeWriter +import com.mysema.codegen.model.TypeCategory._ import com.mysema.query import java.util._ @@ -12,6 +13,8 @@ import scala.collection.JavaConversions._ class ScalaMetaDataSerializer extends Serializer { + val typeMappings = new TypeMappings(); + val javadocSuffix = " is a Querydsl query type"; @throws(classOf[IOException]) @@ -24,6 +27,9 @@ class ScalaMetaDataSerializer extends Serializer { } // imports + writer.importPackages("com.mysema.query.sql"); + writer.importPackages("com.mysema.query.types.path"); + var importedClasses: Set[String] = getAnnotationTypes(model); if (model.hasLists()){ importedClasses.add(classOf[List[_]].getName); @@ -41,14 +47,34 @@ class ScalaMetaDataSerializer extends Serializer { for (annotation <- model.getAnnotations){ writer.annotation(annotation); } - writer.beginClass(model); + + val queryType = typeMappings.getPathType(model, model, true); + writer.beginClass(queryType); // properties for (property <- model.getProperties()){ - writer.publicField(property.getType(), property.getEscapedName); + val methodName: String = property.getType.getCategory match { + case COMPARABLE => "createComparable"; + case BOOLEAN => "createBoolean"; + case DATE => "createDate"; + case DATETIME => "createDateTime"; + case ENUM => "createEnum"; + case NUMERIC => "createNumber"; + case STRING => "createString"; + case SIMPLE => "createSimple"; + case TIME => "createTime"; + } + var ptype = typeMappings.getPathType(property.getType, model, false); + var value: String = null; + if (property.getType.getCategory == BOOLEAN || property.getType.getCategory == STRING){ + value = methodName + "(\"" + property.getName + "\")"; + }else{ + value = methodName + "(\"" + property.getName + "\", classOf[" + writer.getRawName(property.getType) + "])"; + } + writer.publicFinal(ptype, property.getEscapedName, value); } - // TODO : primary key + // TODO : primary keys // TODO : foreign keys diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/ExampleSchema.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ExampleSchema.scala similarity index 85% rename from querydsl-scala/src/test/scala/com/mysema/query/scala/ExampleSchema.scala rename to querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ExampleSchema.scala index fac91bf89..50d046ff1 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/ExampleSchema.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ExampleSchema.scala @@ -1,9 +1,13 @@ -package com.mysema.query.scala +package com.mysema.query.scala.sql import com.mysema.query.sql._ import com.mysema.query.types.path._ import java.util.{Arrays, Collections} +object QUser { + def as(path: String) = new QUser(path); +} + @Table("USER") class QUser(path: String) extends RelationalPathBase[QUser](classOf[QUser], path){ val id = createNumber("ID", classOf[Integer]); @@ -14,6 +18,10 @@ class QUser(path: String) extends RelationalPathBase[QUser](classOf[QUser], path val superiorIdKey: ForeignKey[QUser] = createForeignKey(superiorId,"ID"); } +object QDepartment { + def as(path: String) = new QDepartment(path); +} + @Table("DEPARTMENT") class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path){ val id = createNumber("ID", classOf[Integer]); @@ -22,6 +30,10 @@ class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[ val companyKey: ForeignKey[QCompany] = createForeignKey(company, "ID"); } +object QCompany { + def as(path: String) = new QCompany(path); +} + @Table("COMPANY") class QCompany(path: String) extends RelationalPathBase[QCompany](classOf[QCompany], path){ val id = createNumber("ID", classOf[Integer]); @@ -34,6 +46,10 @@ class QCompany(path: String) extends RelationalPathBase[QCompany](classOf[QCompa // val books = oneToMany(Book.category) // allows navigating between associations transparently //} +object QCategory { + def as(path: String) = new QCategory(path); +} + @Table("CATEGORY") class QCategory(path: String) extends RelationalPathBase[QCategory](classOf[QCategory], path){ val id = createNumber("ID", classOf[Integer]); @@ -48,6 +64,10 @@ class QCategory(path: String) extends RelationalPathBase[QCategory](classOf[QCat // val category = manyToOne(Book.category) //} +object QBook { + def as(path: String) = new QBook(path); +} + @Table("BOOK") class QBook(path: String) extends RelationalPathBase[QBook](classOf[QBook], path){ val id = createNumber("ID",classOf[Integer]); diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/QuerySyntaxTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QuerySyntaxTest.scala similarity index 87% rename from querydsl-scala/src/test/scala/com/mysema/query/scala/QuerySyntaxTest.scala rename to querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QuerySyntaxTest.scala index abcbf9ba0..09d2b5fda 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/QuerySyntaxTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QuerySyntaxTest.scala @@ -1,4 +1,4 @@ -package com.mysema.query.scala +package com.mysema.query.scala.sql import com.mysema.query.sql._ import org.junit.Test @@ -6,6 +6,13 @@ import org.junit.Assert._ class QuerySyntaxTest { + @Test + def Path_Creation(){ + var c1 = new QCategory("c"); + var c2 = QCategory as "c"; + assertEquals(c1, c2); + } + @Test def Query_Syntax(){ // select() diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaBeanSerializerTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaBeanSerializerTest.scala similarity index 100% rename from querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaBeanSerializerTest.scala rename to querydsl-scala/src/test/scala/com/mysema/query/scala/sql/ScalaBeanSerializerTest.scala 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 index 876822f21..0f7771210 100644 --- 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 @@ -25,7 +25,7 @@ class ScalaMetaDataSerializerTest { 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]) + List(classOf[java.lang.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)));