Added additional integration test provided by Fabio Heer
[hibernate4-maven-plugin] / src / it / multimodule / shared / src / main / java / ch / dvbern / demo / persistence / DemoPhysicalNamingStrategyImpl.java
1 package ch.dvbern.demo.persistence;
2
3 import java.util.Locale;
4
5 import org.hibernate.boot.model.naming.Identifier;
6 import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
7 import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
8
9 public class DemoPhysicalNamingStrategyImpl extends PhysicalNamingStrategyStandardImpl {
10
11         private static final long serialVersionUID = 7069586216789441113L;
12
13         public static final DemoPhysicalNamingStrategyImpl INSTANCE = new DemoPhysicalNamingStrategyImpl();
14
15         @Override
16         public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
17                 return new Identifier(addUnderscores(name.getText()), name.isQuoted());
18         }
19
20         @Override
21         public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
22                 return new Identifier(addUnderscores(name.getText()), name.isQuoted());
23         }
24
25
26         protected static String addUnderscores(String name) {
27                 final StringBuilder buf = new StringBuilder(name.replace('.', '_'));
28                 for (int i = 1; i < buf.length() - 1; i++) {
29                         if (Character.isLowerCase(buf.charAt(i - 1)) && Character.isUpperCase(buf.charAt(i))
30                                         && Character.isLowerCase(buf.charAt(i + 1))) {
31                                 buf.insert(i++, '_');
32                         }
33                 }
34                 return buf.toString().toLowerCase(Locale.ROOT);
35         }
36 }