From fece4c141b996d75c200a4619ac341b271bf2502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Nov 2011 00:36:19 +0200 Subject: [PATCH] #48 : worked on Manifests --- querydsl-scala/.cache | Bin 36096 -> 36335 bytes .../mysema/query/scala/EntitySerializer.scala | 8 ++--- .../scala/com/mysema/query/scala/Paths.scala | 33 ++++++++++-------- .../com/mysema/query/scala/sql/Paths.scala | 22 ++++++------ .../com/mysema/query/scala/sql/Queries.scala | 22 +++++++++++- .../com/mysema/scala/ManifestUtils.scala | 11 ++++++ .../com/mysema/scala/ReflectionUtils.scala | 31 ++++++++++++++++ .../com/mysema/query/scala/QPerson.scala | 22 ++++++------ .../com/mysema/query/scala/QPersonTest.scala | 2 +- .../mysema/query/scala/sql/PathsTest.scala | 17 +++++++++ .../mysema/query/scala/sql/QueriesTest.scala | 3 +- .../src/test/scala/test/QEmployee.scala | 4 +-- .../src/test/scala/test/QSurvey.scala | 2 +- 13 files changed, 130 insertions(+), 47 deletions(-) create mode 100644 querydsl-scala/src/main/scala/com/mysema/scala/ManifestUtils.scala create mode 100644 querydsl-scala/src/main/scala/com/mysema/scala/ReflectionUtils.scala create mode 100644 querydsl-scala/src/test/scala/com/mysema/query/scala/sql/PathsTest.scala diff --git a/querydsl-scala/.cache b/querydsl-scala/.cache index b8afccdee61ea2676e94377631b4dd927c7a2285..b1c75fd61e34858a49533e36e788fc7315593d80 100644 GIT binary patch delta 35020 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 delta 34855 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 E04XalssI20 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 28a85af69..2d7be06c8 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 @@ -129,17 +129,15 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se case LIST | SET | COLLECTION => { val componentType = writer.getGenericName(true, property.getParameter(0)) val queryType = typeMappings.getPathType(getRaw(property.getParameter(0)), model, false) - methodName + "(\"" + property.getName + "\", classOf[" + componentType + "], classOf[" + - writer.getGenericName(true, queryType) + "])" + methodName + "["+componentType+","+writer.getGenericName(true, queryType)+"](\"" + property.getName + "\")" } case MAP => { val keyType = writer.getGenericName(true, property.getParameter(0)) val valueType = writer.getGenericName(true, property.getParameter(1)) val queryType = typeMappings.getPathType(getRaw(property.getParameter(1)), model, false) - methodName + "(\"" + property.getName + "\", classOf[" + keyType + "], classOf[" + valueType + "], classOf[" + - writer.getGenericName(true, queryType) + "])" + methodName + "["+keyType+","+valueType+","+writer.getGenericName(true, queryType)+"](\"" + property.getName + "\")" } - case _ => methodName + "(\"" + property.getName + "\", classOf[" + writer.getRawName(property.getType) + "])" + case _ => methodName + "[" + writer.getRawName(property.getType) + "](\"" + property.getName + "\")" } (property.getEscapedName, value) } diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Paths.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Paths.scala index b3ba76913..1b391c1e4 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/Paths.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/Paths.scala @@ -6,6 +6,7 @@ import com.mysema.query.codegen._; import com.mysema.codegen.model.TypeCategory +import com.mysema.scala.ManifestUtils._ import TypeDefs._ /** @@ -17,7 +18,7 @@ import TypeDefs._ object Paths { type Metadata[X] = PathMetadata[X] - + def array[T <: Array[_]](t: Class[T], md: Metadata[_]) = new ArrayPath[T](t, md) def simple[T](t: Class[_ <: T], md: Metadata[_]) = new SimplePath[T](t, md) @@ -76,40 +77,42 @@ class ArrayPath[T <: Array[_]](t: Class[T], md: PathMetadata[_]) class BeanPath[T](t: Class[_ <: T], md: PathMetadata[_]) extends PathImpl[T](t, md) with SimpleExpression[T] { - + import Paths._ + type Mf[X] = Manifest[X] + def add[P <: Path[_]](path: P): P = path - def createArray[T <: Array[_]](property: String, t: Class[T]) = add(array(t, forProperty(property))) + def createArray[T <: Array[_]](property: String)(implicit mf: Mf[T]) = add(array(mf, forProperty(property))) - def createSimple[T](property: String, t: Class[T]) = add(simple(t, forProperty(property))) + def createSimple[T](property: String)(implicit mf: Mf[T]) = add(simple(mf, forProperty(property))) - def createEntity[T](property: String, t: Class[T]) = add(entity(t, forProperty(property))) + def createEntity[T](property: String)(implicit mf: Mf[T]) = add(entity(t, forProperty(property))) - def createCollection[T, Q <: Ex[_ >: T]](property: String, t: Class[T], q: Class[Q]) = add(collection(t, q, forProperty(property))) + def createCollection[T, Q <: Ex[_ >: T]](property: String)(implicit t: Mf[T], q: Mf[Q]) = add(collection(t, q, forProperty(property))) - def createSet[T, Q <: Ex[_ >: T]](property: String, t: Class[T], q: Class[Q]) = add(set(t, q, forProperty(property))) + def createSet[T, Q <: Ex[_ >: T]](property: String)(implicit t: Mf[T], q: Mf[Q]) = add(set(t, q, forProperty(property))) - def createList[T, Q <: Ex[_ >: T]](property: String, t: Class[T], q: Class[Q]) = add(list(t, q, forProperty(property))) + def createList[T, Q <: Ex[_ >: T]](property: String)(implicit t: Mf[T], q: Mf[Q]) = add(list(t, q, forProperty(property))) - def createMap[K, V, Q <: Ex[_ >: V]](property: String, k: Class[K], v: Class[V], q: Class[Q]) = add(map(k, v, q, forProperty(property))) + def createMap[K, V, Q <: Ex[_ >: V]](property: String)(implicit k: Mf[K], v: Mf[V], q: Mf[Q]) = add(map(k, v, q, forProperty(property))) - def createComparable[T <: Comparable[_]](property: String, t: Class[T]) = add(comparable(t, forProperty(property))) + def createComparable[T <: Comparable[_]](property: String)(implicit mf: Mf[T]) = add(comparable(mf, forProperty(property))) - def createDate[T <: Comparable[_]](property: String, t: Class[T]) = add(date(t, forProperty(property))) + def createDate[T <: Comparable[_]](property: String)(implicit mf: Mf[T]) = add(date(mf, forProperty(property))) - def createDateTime[T <: Comparable[_]](property: String, t: Class[T]) = add(dateTime(t, forProperty(property))) + def createDateTime[T <: Comparable[_]](property: String)(implicit mf: Mf[T]) = add(dateTime(mf, forProperty(property))) - def createTime[T <: Comparable[_]](property: String, t: Class[T]) = add(time(t, forProperty(property))) + def createTime[T <: Comparable[_]](property: String)(implicit mf: Mf[T]) = add(time(mf, forProperty(property))) - def createNumber[T <: Number with Comparable[T]](property: String, t: Class[T]) = add(number(t, forProperty(property))) + def createNumber[T <: Number with Comparable[T]](property: String)(implicit mf: Mf[T]) = add(number(mf, forProperty(property))) def createBoolean(property: String) = add(boolean(forProperty(property))) def createString(property: String) = add(string(forProperty(property))) - def createEnum[T <: Enum[T]](property: String, t: Class[T]) = add(enum(t, forProperty(property))) + def createEnum[T <: Enum[T]](property: String)(implicit mf: Mf[T]) = add(enum(mf, forProperty(property))) private def forProperty(property: String) = PathMetadataFactory.forProperty(this, property) diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Paths.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Paths.scala index 84d6c098d..838eb50f7 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Paths.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Paths.scala @@ -1,4 +1,6 @@ package com.mysema.query.scala.sql; + +import com.mysema.scala.ReflectionUtils._ import com.mysema.query.scala.BeanPath import com.mysema.query.sql._ import com.mysema.query.types._ @@ -7,6 +9,7 @@ import java.util.ArrayList; import java.lang.reflect._ import scala.reflect.BeanProperty import com.mysema.query.scala.TypeDefs._ +import scala.collection.JavaConversions.mapAsJavaMap /** * Implementation of RelationsPathImpl for Scala @@ -30,19 +33,18 @@ class RelationalPathImpl[T](md: PathMetadata[_], schema: String, table: String)( @BeanProperty val inverseForeignKeys: JList[ForeignKey[_]] = new ArrayList[ForeignKey[_]] - // TODO : implementation into Utility class @BeanProperty - lazy val projection: FactoryExpression[T] = { + lazy val projection: FactoryExpression[T] = { val rp = RelationalPathImpl.this - val bindings = new java.util.HashMap[String, Ex[_]] - def supers(cl: Class[_]): List[Class[_]] = cl :: Option(cl.getSuperclass).map(supers).getOrElse(Nil) - supers(getClass).flatMap(_.getDeclaredFields) + val bindings = getFields(getClass()) + // only non static Path typed fields .filter(f => classOf[Path[_]].isAssignableFrom(f.getType) && !Modifier.isStatic(f.getModifiers)) - .foreach(f => { - f.setAccessible(true) - val col = f.get(rp).asInstanceOf[Path[_]] - if (rp == col.getMetadata.getParent) bindings.put(f.getName, col) - }) + // map to property,value tuples + .map(f => getNameAndValue[Path[_]](rp,f)) + // filter non related tuples out + .filter(rp == _._2.getMetadata.getParent) + .toMap + new QBean[T](getType.asInstanceOf[Class[T]], true, bindings) } diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Queries.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Queries.scala index 44e220f6a..f46977d88 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Queries.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/sql/Queries.scala @@ -11,6 +11,16 @@ import com.mysema.query.scala.TypeDefs._ import com.mysema.query.scala.RichProjectable import com.mysema.query.scala.Projections._ +/** + * RichSimpleQuery provides a simplied query DSL for Querydsl SQL + Scala + * + * @author tiwe + * + * @param + * @param

+ * @param + * @param + */ class RichSimpleQuery[PT, P <: RelationalPath[PT], T, E <: Ex[T]](path: P, expr: E, qry: SQLQuery) extends RichProjectable(qry) { @@ -88,7 +98,7 @@ object ExprToTarget { implicit def pathToTuple2[T,E <: RP[T],T2,E2 <: RP[T2]] = { new ExprToTarget[T,E,T2,E2,(T,T2),Tu2Ex[T,T2]]() { - def toTarget(e: E, rp: E2) = new Tu2Ex[T,T2](e,rp) + def toTarget(e: E, rp: E2) = new Tu2Ex[T,T2](e, rp) }} implicit def tuple2ToTuple3[T1,E1 <: Ex[T1],T2,E2 <: Ex[T2],T3,E3 <: RP[T3]] = { @@ -96,6 +106,16 @@ object ExprToTarget { def toTarget(e: Tu2Ex[T1,T2], rp: E3) = new Tu3Ex[T1,T2,T3](e(0), e(1), rp) }} + implicit def tuple3ToTuple4[T1,E1 <: Ex[T1],T2,E2 <: Ex[T2],T3,E3 <: Ex[T3],T4,E4 <: RP[T4]] = { + new ExprToTarget[(T1,T2,T3),Tu3Ex[T1,T2,T3],T4,E4,(T1,T2,T3,T4),Tu4Ex[T1,T2,T3,T4]]() { + def toTarget(e: Tu3Ex[T1,T2,T3], rp: E4) = new Tu4Ex[T1,T2,T3,T4](e(0), e(1), e(2), rp) + }} + + implicit def tuple4ToTuple5[T1,E1 <: Ex[T1],T2,E2 <: Ex[T2],T3,E3 <: Ex[T3],T4,E4 <: Ex[T4],T5,E5 <: RP[T5]] = { + new ExprToTarget[(T1,T2,T3,T4),Tu4Ex[T1,T2,T3,T4],T5,E5,(T1,T2,T3,T4,T5),Tu5Ex[T1,T2,T3,T4,T5]]() { + def toTarget(e: Tu4Ex[T1,T2,T3,T4], rp: E5) = new Tu5Ex[T1,T2,T3,T4,T5](e(0), e(1), e(2), e(3), rp) + }} + } // combine E1 and E2 into E3 diff --git a/querydsl-scala/src/main/scala/com/mysema/scala/ManifestUtils.scala b/querydsl-scala/src/main/scala/com/mysema/scala/ManifestUtils.scala new file mode 100644 index 000000000..58b04509e --- /dev/null +++ b/querydsl-scala/src/main/scala/com/mysema/scala/ManifestUtils.scala @@ -0,0 +1,11 @@ +package com.mysema.scala + +/** + * @author tiwe + * + */ +object ManifestUtils { + + implicit def toClass[X](mf: Manifest[X]) = mf.erasure.asInstanceOf[Class[X]] + +} \ No newline at end of file diff --git a/querydsl-scala/src/main/scala/com/mysema/scala/ReflectionUtils.scala b/querydsl-scala/src/main/scala/com/mysema/scala/ReflectionUtils.scala new file mode 100644 index 000000000..74de048d4 --- /dev/null +++ b/querydsl-scala/src/main/scala/com/mysema/scala/ReflectionUtils.scala @@ -0,0 +1,31 @@ +package com.mysema.scala; + +import java.lang.reflect._ +import javax.annotation.Nullable; +import scala.collection.mutable.ListBuffer + +/** + * @author tiwe + * + */ +object ReflectionUtils { + + def getSuperClasses(cl: Class[_]): List[Class[_]] = { + if (cl != null) Nil else cl :: getSuperClasses(cl.getSuperclass) + } + + def getFields(cl: Class[_]): List[Field] = { + getSuperClasses(cl).flatMap(_.getDeclaredFields) + } + + def getImplementedInterfaces(cl: Class[_]): Set[Class[_]] = { + getSuperClasses(cl).flatMap(_.getInterfaces).toSet + } + + def getNameAndValue[T](o: AnyRef, field: Field): (String,T) = { + field.setAccessible(true) + val v = field.get(o).asInstanceOf[T] + (field.getName, v) + } + +} diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/QPerson.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/QPerson.scala index 8f7d545d4..98a351b89 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/QPerson.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/QPerson.scala @@ -19,30 +19,30 @@ class QPerson(cl: Class[_ <: Person], md: PathMetadata[_]) extends EntityPathImp lazy val other = new QPerson(this, "other") - val array = createArray("array", classOf[Array[String]]) + val array = createArray[Array[String]]("array") val firstName = createString("firstName") - val javaCollection = createCollection("javaCollection", classOf[String], classOf[StringPath]) + val javaCollection = createCollection[String,StringPath]("javaCollection") - val javaDouble = createNumber("javaDouble", classOf[java.lang.Double]) + val javaDouble = createNumber[java.lang.Double]("javaDouble") - val javaInt = createNumber("javaInt", classOf[Integer]) + val javaInt = createNumber[Integer]("javaInt") - val javaList = createList("javaList", classOf[String], classOf[StringPath]) + val javaList = createList[String,StringPath]("javaList") - val javaMap = createMap("javaMap", classOf[String], classOf[String], classOf[StringPath]) + val javaMap = createMap[String,String,StringPath]("javaMap") - val javaSet = createSet("javaSet", classOf[String], classOf[StringPath]) + val javaSet = createSet[String,StringPath]("javaSet") val lastName = createString("lastName") - val listOfPersons = createList("listOfPersons", classOf[Person], classOf[QPerson]) + val listOfPersons = createList[Person,QPerson]("listOfPersons") - val scalaInt = createNumber("scalaInt", classOf[Integer]) + val scalaInt = createNumber[Integer]("scalaInt") - val scalaList = createList("scalaList", classOf[String], classOf[StringPath]) + val scalaList = createList[String,StringPath]("scalaList") - val scalaMap = createMap("scalaMap", classOf[String], classOf[String], classOf[StringPath]) + val scalaMap = createMap[String,String,StringPath]("scalaMap") } \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/QPersonTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/QPersonTest.scala index 4e3911f20..02a62ce2e 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/QPersonTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/QPersonTest.scala @@ -9,7 +9,7 @@ import Matchers._ class QPersonTest { val person = QPerson as "person" - + @Test def EntityPath { assertEquals("person.other.firstName", person.other.firstName) diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/PathsTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/PathsTest.scala new file mode 100644 index 000000000..9904ca679 --- /dev/null +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/PathsTest.scala @@ -0,0 +1,17 @@ +package com.mysema.query.scala.sql + +import org.junit._ +import org.junit.Assert._ +import com.mysema.query.sql._ +import com.mysema.query.types._ +import test._ + +class PathsTest { + + @Test + def Projection { + val projection = Employee.getProjection.asInstanceOf[FactoryExpression[_]] + assertEquals(4, projection.getArgs.size) + } + +} \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QueriesTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QueriesTest.scala index 022e44c36..0b9a49e66 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QueriesTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/QueriesTest.scala @@ -3,6 +3,7 @@ package com.mysema.query.scala.sql import org.junit._ import org.junit.Assert._ import com.mysema.query.sql._ +import com.mysema.query.types._ import java.sql.Connection import test._ @@ -12,7 +13,7 @@ class QueriesTest extends SQLHelpers { val templates = new H2Templates() def connection: Connection = null - + @Test def From { assertEquals("from EMPLOYEE employee", Employee.query.toString) diff --git a/querydsl-scala/src/test/scala/test/QEmployee.scala b/querydsl-scala/src/test/scala/test/QEmployee.scala index 1d3b8a7d3..ec2d10296 100644 --- a/querydsl-scala/src/test/scala/test/QEmployee.scala +++ b/querydsl-scala/src/test/scala/test/QEmployee.scala @@ -21,11 +21,11 @@ class QEmployee(md: PathMetadata[_]) extends RelationalPathImpl[Employee](md, "P val firstname = createString("FIRSTNAME") - val id = createNumber("ID", classOf[Integer]) + val id = createNumber[Integer]("ID") val lastname = createString("LASTNAME") - val superiorId = createNumber("SUPERIOR_ID", classOf[Integer]) + val superiorId = createNumber[Integer]("SUPERIOR_ID") val sysIdx55: PrimaryKey[Employee] = createPrimaryKey(id); diff --git a/querydsl-scala/src/test/scala/test/QSurvey.scala b/querydsl-scala/src/test/scala/test/QSurvey.scala index 74068bebd..d554895e9 100644 --- a/querydsl-scala/src/test/scala/test/QSurvey.scala +++ b/querydsl-scala/src/test/scala/test/QSurvey.scala @@ -18,7 +18,7 @@ class QSurvey(md: PathMetadata[_]) extends RelationalPathImpl[Survey](md, "PUBLI def this(parent: Path[_], variable: String) = this(forProperty(parent, variable)) - val id = createNumber("ID", classOf[Integer]) + val id = createNumber[Integer]("ID") val name = createString("NAME")