From cd8ee7409b353dff098e16d4b1888a01d4dbe5a5 Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 10:29:58 -0500 Subject: [PATCH] Added support for JTS Geometries --- .../query/apt/DefaultConfiguration.java | 8 ++++++ .../com/mysema/query/apt/SpatialSupport.java | 28 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java index 422eeffb2..b5524a489 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java @@ -183,6 +183,14 @@ public class DefaultConfiguration implements Configuration { } catch (Exception e) { // do nothing } + + try { + // register additional mappings, if querydsl-spatial and JTS is on the classpath + Class.forName("com.mysema.query.spatial.jts.JTSGeometryExpression"); + SpatialSupport.addJTSSupport(module); + } catch (Exception e) { + // do nothing + } defaultSerializerConfig = new SimpleSerializerConfig(entityAccessors, listAccessors, mapAccessors, createDefaultVariable, ""); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java index e2f89b81e..762bdbb99 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java @@ -31,10 +31,27 @@ public final class SpatialSupport { new SimpleType("com.mysema.query.spatial.path." + entry.getValue())); } } + + private static void registerJTSTypes(TypeMappings typeMappings) { + Map additions = Maps.newHashMap(); + additions.put("Geometry", "GeometryPath"); + additions.put("GeometryCollection", "GeometryCollectionPath"); + additions.put("LinearRing", "LinearRingPath"); + additions.put("LineString", "LineStringPath"); + additions.put("MultiLineString", "MultiLineStringPath"); + additions.put("MultiPoint", "MultiPointPath"); + additions.put("MultiPolygon", "MultiPolygonPath"); + additions.put("Point", "PointPath"); + additions.put("Polygon", "PolygonPath"); + for (Map.Entry entry : additions.entrySet()) { + typeMappings.register( + new SimpleType("com.vividsolutions.jts.geom."+ entry.getKey()), + new SimpleType("com.mysema.query.spatial.jts.path." + entry.getValue())); + } + } - private static void addImports(AbstractModule module) { + private static void addImports(AbstractModule module, String packageName) { Set imports = module.get(Set.class, CodegenModule.IMPORTS); - String packageName = "com.mysema.query.spatial.path"; if (imports.isEmpty()) { imports = ImmutableSet.of(packageName); } else { @@ -48,7 +65,12 @@ public final class SpatialSupport { public static void addSupport(AbstractModule module) { registerTypes(module.get(TypeMappings.class)); - addImports(module); + addImports(module,"com.mysema.query.spatial.path"); + } + + public static void addJTSSupport(AbstractModule module) { + registerJTSTypes(module.get(TypeMappings.class)); + addImports(module,"com.mysema.query.spatial.jts.path"); } private SpatialSupport() {}