From 9d682e5f81cc60fa15650b022ad872e36ba2f42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 16 Nov 2011 20:26:20 +0200 Subject: [PATCH] added more convenience wrappers --- .../mysema/query/scala/EntitySerializer.scala | 7 ++++++- .../com/mysema/query/scala/sql/Relation.scala | 16 ++++++++++++++++ .../com/mysema/query/scala/sql/Serializers.scala | 16 ++++++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Relation.scala diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala index 2b30e905c..5dd4a3574 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala @@ -79,16 +79,21 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se val queryTypeName = writer.getRawName(queryType) val classHeader = String.format(classHeaderFormat, queryTypeName, modelName) - writer.beginObject(queryTypeName) + writer.beginObject(enhanceCompanionClass(queryTypeName, modelName)) writer.line("def as(variable: String) = new ", queryTypeName, "(variable)") writer.line("") writer.line("val ", model.getUncapSimpleName, " = as(\"", model.getUncapSimpleName, "\")") + writeAdditionalCompanionContent(model, writer) writer.end() // header model.getAnnotations.foreach(writer.annotation(_)) writer.beginClass(classHeader) } + + def enhanceCompanionClass(name: String, modelName: String): String = name + + def writeAdditionalCompanionContent(model: EntityType, writer: ScalaWriter) = {} private def serializeEntityProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) = { for (property <- properties if property.getType.getCategory == ENTITY) yield { diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Relation.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Relation.scala new file mode 100644 index 000000000..4047b055b --- /dev/null +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Relation.scala @@ -0,0 +1,16 @@ +package com.mysema.query.scala.sql + +import com.mysema.query.sql._ + +/** + * To be used with RelationalPath companion objects for access to the default path + * + * @author tiwe + * + * @param + */ +trait Relation[T] { + + def path: RelationalPath[T] + +} \ No newline at end of file diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Serializers.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Serializers.scala index 320419adb..d14f6f315 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Serializers.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Serializers.scala @@ -24,7 +24,8 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS override def writeHeader(model: EntityType, writer: ScalaWriter) { writer.imports(classOf[RelationalPathImpl[_]]) - writer.imports(classOf[PrimaryKey[_]].getPackage) + writer.imports(classOf[Relation[_]]) + writer.imports(classOf[PrimaryKey[_]].getPackage) super.writeHeader(model, writer) } @@ -44,7 +45,18 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS model.getData.get(classOf[InverseForeignKeyData]).asInstanceOf[Collection[InverseForeignKeyData]] if (inverseForeignKeys != null) serializeForeignKeys(model, writer, inverseForeignKeys, true) } - + + override def enhanceCompanionClass(name: String, modelName: String) = { + name + " extends Relation[" + modelName + "]" + } + + override def writeAdditionalCompanionContent(model: EntityType, writer: ScalaWriter) = { + if (model.getUncapSimpleName != "path") { + writer.line("") + writer.line("def path = ", model.getUncapSimpleName()) + } + } + def serializePrimaryKeys(model: EntityType, writer: CodeWriter, primaryKeys: Collection[PrimaryKeyData]) { primaryKeys foreach { primaryKey => val fieldName = namingStrategy.getPropertyNameForPrimaryKey(primaryKey.getName(), model)