Added additional integration test provided by Fabio Heer
[hibernate4-maven-plugin] / src / it / multimodule / shared / src / main / java / ch / dvbern / demo / persistence / DemoPhysicalNamingStrategyImpl.java
diff --git a/src/it/multimodule/shared/src/main/java/ch/dvbern/demo/persistence/DemoPhysicalNamingStrategyImpl.java b/src/it/multimodule/shared/src/main/java/ch/dvbern/demo/persistence/DemoPhysicalNamingStrategyImpl.java
new file mode 100644 (file)
index 0000000..7984c7f
--- /dev/null
@@ -0,0 +1,36 @@
+package ch.dvbern.demo.persistence;
+
+import java.util.Locale;
+
+import org.hibernate.boot.model.naming.Identifier;
+import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
+
+public class DemoPhysicalNamingStrategyImpl extends PhysicalNamingStrategyStandardImpl {
+
+       private static final long serialVersionUID = 7069586216789441113L;
+
+       public static final DemoPhysicalNamingStrategyImpl INSTANCE = new DemoPhysicalNamingStrategyImpl();
+
+       @Override
+       public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
+               return new Identifier(addUnderscores(name.getText()), name.isQuoted());
+       }
+
+       @Override
+       public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
+               return new Identifier(addUnderscores(name.getText()), name.isQuoted());
+       }
+
+
+       protected static String addUnderscores(String name) {
+               final StringBuilder buf = new StringBuilder(name.replace('.', '_'));
+               for (int i = 1; i < buf.length() - 1; i++) {
+                       if (Character.isLowerCase(buf.charAt(i - 1)) && Character.isUpperCase(buf.charAt(i))
+                                       && Character.isLowerCase(buf.charAt(i + 1))) {
+                               buf.insert(i++, '_');
+                       }
+               }
+               return buf.toString().toLowerCase(Locale.ROOT);
+       }
+}