From cffe40f0943db0ddc568ab7e045e8a7169b96a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 14 Feb 2015 10:56:34 +0200 Subject: [PATCH 1/2] Make all options of Configuration available in the Maven plugin --- .../maven/AbstractMetaDataExportMojo.java | 26 ++-- .../main/java/com/querydsl/maven/Mapping.java | 9 ++ .../com/querydsl/maven/NumericMapping.java | 12 +- .../com/querydsl/maven/RenameMapping.java | 59 +++++++++ .../java/com/querydsl/maven/TypeMapping.java | 23 +++- .../maven/MetadataExportMojoTest.java | 14 +++ .../com/querydsl/maven/RenameMappingTest.java | 112 ++++++++++++++++++ .../java/com/querydsl/sql/SchemaAndTable.java | 4 + 8 files changed, 248 insertions(+), 11 deletions(-) create mode 100644 querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java create mode 100644 querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java create mode 100644 querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java index f16abd017..c7bd3118f 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java @@ -211,6 +211,11 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ */ private NumericMapping[] numericMappings; + /** + * @parameter + */ + private RenameMapping[] renameMappings; + /** * @parameter default-value=false */ @@ -391,21 +396,20 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ } if (typeMappings != null) { for (TypeMapping mapping : typeMappings) { - Class typeClass = Class.forName(mapping.type); - if (Type.class.isAssignableFrom(typeClass)) { - configuration.register(mapping.table, mapping.column, (Type)typeClass.newInstance()); - } else { - configuration.register(mapping.table, mapping.column, typeClass); - } + mapping.apply(configuration); } } if (numericMappings != null) { for (NumericMapping mapping : numericMappings) { - int total = mapping.total; - int decimal = mapping.decimal; - configuration.registerNumeric(total, decimal, Class.forName(mapping.javaType)); + mapping.apply(configuration); } } + if (renameMappings != null) { + for (RenameMapping mapping : renameMappings) { + mapping.apply(configuration); + } + } + if (columnComparatorClass != null) { try { exporter.setColumnComparatorClass( (Class) Class.forName(this.columnComparatorClass).asSubclass(Comparator.class)); @@ -554,6 +558,10 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ this.numericMappings = numericMappings; } + public void setRenameMappings(RenameMapping[] renameMappings) { + this.renameMappings = renameMappings; + } + public void setImports(String[] imports) { this.imports = imports; } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java new file mode 100644 index 000000000..4f5c54972 --- /dev/null +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java @@ -0,0 +1,9 @@ +package com.querydsl.maven; + +import com.querydsl.sql.Configuration; + +public interface Mapping { + + void apply(Configuration configuration); + +} diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java index 487962506..aca0688b7 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java @@ -13,14 +13,24 @@ */ package com.querydsl.maven; +import com.querydsl.sql.Configuration; + /** * @author tiwe * */ -public class NumericMapping { +public class NumericMapping implements Mapping { public int total, decimal; public String javaType; + @Override + public void apply(Configuration configuration) { + try { + configuration.registerNumeric(total, decimal, Class.forName(javaType)); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java new file mode 100644 index 000000000..0b591d191 --- /dev/null +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java @@ -0,0 +1,59 @@ +/* + * Copyright 2015, Timo Westkämper + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.querydsl.maven; + +import com.google.common.collect.ImmutableList; +import com.querydsl.sql.Configuration; + +public class RenameMapping implements Mapping { + + String fromSchema, fromTable, fromColumn; + + String toSchema, toTable, toColumn; + + @Override + public void apply(Configuration configuration) { + if (fromSchema != null) { + if (fromTable != null && fromColumn != null && toColumn != null) { + configuration.registerColumnOverride(fromSchema, fromTable, fromColumn, toColumn); + } else if (fromTable != null && toTable != null) { + if (toSchema != null) { + configuration.registerTableOverride(fromSchema, fromTable, toSchema, toTable); + } else { + configuration.registerTableOverride(fromSchema, fromTable, toTable); + } + } else if (toSchema != null) { + configuration.registerSchemaOverride(fromSchema, toSchema); + } else { + insufficientArgs(); + } + } else if (fromTable != null) { + if (fromColumn != null && toColumn != null) { + configuration.registerColumnOverride(fromTable, fromColumn, toColumn); + } else if (toTable != null) { + configuration.registerTableOverride(fromTable, toTable); + } else { + insufficientArgs(); + } + } else { + insufficientArgs(); + } + } + + private void insufficientArgs() { + throw new IllegalArgumentException("Insufficient args " + + ImmutableList.of(fromSchema, fromTable, fromColumn) + " to " + + ImmutableList.of(toSchema, toTable, toColumn)); + } +} diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java index 033593686..104b98e3f 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java @@ -13,11 +13,14 @@ */ package com.querydsl.maven; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.types.Type; + /** * @author tiwe * */ -public class TypeMapping { +public class TypeMapping implements Mapping { public String table; @@ -25,4 +28,22 @@ public class TypeMapping { public String type; + @Override + public void apply(Configuration configuration) { + try { + Class typeClass = Class.forName(type); + if (Type.class.isAssignableFrom(typeClass)) { + configuration.register(table, column, (Type)typeClass.newInstance()); + } else { + configuration.register(table, column, typeClass); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } } diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java index 4a4fa68f1..f2ed82fb4 100644 --- a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java @@ -176,4 +176,18 @@ public class MetadataExportMojoTest { assertTrue(new File("target/export12").exists()); } + + @Test + public void ExecuteWithRenames() throws Exception { + RenameMapping mapping = new RenameMapping(); + mapping.fromSchema = "ABC"; + mapping.toSchema = "DEF"; + + mojo.setTargetFolder("target/export13"); + mojo.setRenameMappings(new RenameMapping[]{mapping}); + mojo.execute(); + + assertEquals(Collections.singletonList("target/export13"), project.getCompileSourceRoots()); + assertTrue(new File("target/export13").exists()); + } } diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java new file mode 100644 index 000000000..811754e43 --- /dev/null +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java @@ -0,0 +1,112 @@ +package com.querydsl.maven; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.querydsl.sql.Configuration; +import com.querydsl.sql.SQLTemplates; +import com.querydsl.sql.SchemaAndTable; + +public class RenameMappingTest { + + private RenameMapping mapping = new RenameMapping(); + private Configuration configuration = new Configuration(SQLTemplates.DEFAULT); + + // to schema + + @Test + public void SchemaToSchema() { + mapping.fromSchema = "ABC"; + mapping.toSchema = "DEF"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("DEF", "TABLE"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE"))); + assertEquals( + new SchemaAndTable("ABCD", "TABLE"), + configuration.getOverride(new SchemaAndTable("ABCD", "TABLE"))); + + } + + // to table + + @Test + public void TableToTable() { + mapping.fromTable = "TABLE1"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("DEF", "TABLE2"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE3"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE3"))); + } + + @Test + public void SchemaTableToTable() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("ABC", "TABLE2"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE1"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + } + + @Test + public void SchemaTableToSchemaTable() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.toSchema = "ABC"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("ABC", "TABLE2"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE1"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + } + + // to column + + @Test + public void SchemaTableColumnToColumn() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.fromColumn = "COLUMN1"; + mapping.toColumn = "COLUMN2"; + mapping.apply(configuration); + + assertEquals( + "COLUMN2", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE1"), "COLUMN1")); + assertEquals( + "COLUMN1", + configuration.getColumnOverride(new SchemaAndTable("DEF", "TABLE1"), "COLUMN1")); + } + + @Test + public void TableColumnToColumn() { + mapping.fromTable = "TABLE1"; + mapping.fromColumn = "COLUMN1"; + mapping.toColumn = "COLUMN2"; + mapping.apply(configuration); + + assertEquals( + "COLUMN2", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE1"), "COLUMN1")); + assertEquals( + "COLUMN1", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE2"), "COLUMN1")); + } +} diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java b/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java index f8072c037..d4fc3c5fd 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java @@ -54,4 +54,8 @@ public class SchemaAndTable implements Serializable { return (schema != null ? 31 * schema.hashCode() : 0) + table.hashCode(); } + @Override + public String toString() { + return "(" + schema + " " + table + ")"; + } } From 9e14dae85ee66af872b9ca5b837aad33aa6ed5bb Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 15 Feb 2015 23:20:22 +0100 Subject: [PATCH 2/2] Add documentation for *Mapping classes --- .../src/main/java/com/querydsl/maven/Mapping.java | 10 ++++++++++ .../main/java/com/querydsl/maven/NumericMapping.java | 2 ++ .../main/java/com/querydsl/maven/RenameMapping.java | 5 +++++ .../src/main/java/com/querydsl/maven/TypeMapping.java | 2 ++ 4 files changed, 19 insertions(+) diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java index 4f5c54972..ebf06be78 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java @@ -2,8 +2,18 @@ package com.querydsl.maven; import com.querydsl.sql.Configuration; +/** + * Specifies mapping customization options. + * + * @author tiwe + */ public interface Mapping { + /** + * Apply the customization to the passed in configuration. + * + * @param configuration the configuration to apply the customization to + */ void apply(Configuration configuration); } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java index aca0688b7..7c264291b 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java @@ -16,6 +16,8 @@ package com.querydsl.maven; import com.querydsl.sql.Configuration; /** + * {@linkplain NumericMapping} is used to customize mappings of various numeric precisions to data types. + * * @author tiwe * */ diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java index 0b591d191..3989c8a63 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java @@ -16,6 +16,11 @@ package com.querydsl.maven; import com.google.common.collect.ImmutableList; import com.querydsl.sql.Configuration; +/** + * {@linkplain RenameMapping} is used to override schemas, tables, columns and combinations of the three. + * + * @author tiwe + */ public class RenameMapping implements Mapping { String fromSchema, fromTable, fromColumn; diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java index 104b98e3f..d36f12adf 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java @@ -17,6 +17,8 @@ import com.querydsl.sql.Configuration; import com.querydsl.sql.types.Type; /** + * {@linkplain TypeMapping} is used to customize the mapping from table + column to a type. + * * @author tiwe * */