View Javadoc

1   /** 2008, Digitalis Informatica. All rights reserved.
2    *
3    * Distribuicao e Gestao de Informatica, Lda.
4    * Estrada de Paco de Arcos num.9 - Piso -1
5    * 2780-666 Paco de Arcos
6    * Telefone: (351) 21 4408990
7    * Fax: (351) 21 4408999
8    * http://www.digitalis.pt
9    */
10  
11  package pt.digitalis.maven.ormgenerator.hibernate;
12  
13  import java.util.List;
14  
15  import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
16  import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
17  import org.hibernate.cfg.reveng.TableIdentifier;
18  
19  /**
20   * Hibernate tools reverse engeneering strategy Custom implementation
21   *
22   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a><br/>
23   * @created Jan 9, 2009
24   */
25  public class CustomReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
26  
27      /**
28       * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#foreignKeyToCollectionName(java.lang.String,
29       *      org.hibernate.cfg.reveng.TableIdentifier, java.util.List, org.hibernate.cfg.reveng.TableIdentifier,
30       *      java.util.List, boolean)
31       */
32      @SuppressWarnings("unchecked")
33      @Override
34      public String foreignKeyToCollectionName(String keyname, TableIdentifier fromTable, List fromColumns,
35              TableIdentifier referencedTable, List referencedColumns, boolean uniqueReference) {
36  
37          String newTableName = referencedTable.getName().toUpperCase();
38  
39          if (newTableName.startsWith("T_"))
40              newTableName = newTableName.substring(2);
41  
42          if (newTableName.startsWith("TB"))
43              newTableName = newTableName.replaceFirst("TB", "TABLE_");
44  
45          if (!newTableName.equals(referencedTable.getName()))
46              referencedTable =
47                      new TableIdentifier(referencedTable.getCatalog(), referencedTable.getSchema(), newTableName);
48  
49          newTableName = fromTable.getName().toUpperCase();
50  
51          if (newTableName.startsWith("T_"))
52              newTableName = newTableName.substring(2);
53  
54          if (newTableName.startsWith("TB"))
55              newTableName = newTableName.replaceFirst("TB", "TABLE_");
56  
57          if (!newTableName.equals(fromTable.getName()))
58              fromTable =
59                      new TableIdentifier(fromTable.getCatalog(), fromTable.getSchema(), newTableName);
60  
61          String collectionName =
62                  super.foreignKeyToCollectionName(keyname, fromTable, fromColumns, referencedTable, referencedColumns,
63                          uniqueReference);
64  
65          // int pos = collectionName.lastIndexOf(".");
66          //
67          // collectionName =
68          // collectionName.substring(0, pos) + "." + referencedTable.getSchema().toLowerCase() + "."
69          // + collectionName.substring(pos + 1);
70  
71          return collectionName;
72      }
73  
74      /**
75       * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#foreignKeyToEntityName(java.lang.String,
76       *      org.hibernate.cfg.reveng.TableIdentifier, java.util.List, org.hibernate.cfg.reveng.TableIdentifier,
77       *      java.util.List, boolean)
78       */
79      @SuppressWarnings("unchecked")
80      @Override
81      public String foreignKeyToEntityName(String keyname, TableIdentifier fromTable, List fromColumnNames,
82              TableIdentifier referencedTable, List referencedColumnNames, boolean uniqueReference) {
83  
84          // The column name must not be translated here. It is the real column name in the data base used for mappinf
85          // purposes. The table name however can be translated for more human readable since it is only the name that
86          // will be given to the relation.
87          String newTableName = referencedTable.getName().toUpperCase();
88  
89          if (newTableName.startsWith("T_"))
90              newTableName = newTableName.substring(2);
91  
92          if (newTableName.startsWith("TB"))
93              newTableName = newTableName.replaceFirst("TB", "TABLE_");
94  
95          if (!newTableName.equals(referencedTable.getName()))
96              referencedTable =
97                      new TableIdentifier(referencedTable.getCatalog(), referencedTable.getSchema(), newTableName);
98  
99          return super.foreignKeyToEntityName(keyname, fromTable, fromColumnNames, referencedTable,
100                 referencedColumnNames, uniqueReference);
101     }
102 
103     /**
104      * @param delegate
105      */
106     public CustomReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
107         super(delegate);
108     }
109 
110     /**
111      * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#columnToPropertyName(org.hibernate.cfg.reveng.TableIdentifier,
112      *      java.lang.String)
113      */
114     @Override
115     public String columnToPropertyName(TableIdentifier table, String column) {
116 
117         column = column.toUpperCase();
118 
119         if (column.startsWith("CD_"))
120             column = column.replaceFirst("CD_", "CODE_");
121         else if (column.startsWith("NM_"))
122             column = column.replaceFirst("NM_", "NAME_");
123         else if (column.startsWith("DS_"))
124             column = column.replaceFirst("DS_", "DESC_");
125         else if (column.startsWith("HR_"))
126             column = column.replaceFirst("HR_", "HOUR_");
127         else if (column.startsWith("DT_"))
128             column = column.replaceFirst("DT_", "DATE_");
129         else if (column.startsWith("NR_"))
130             column = column.replaceFirst("NR_", "NUMBER_");
131 
132         if (column.startsWith("T_"))
133             column = column.substring(2);
134 
135         if (column.startsWith("TB"))
136             column = column.replaceFirst("TB", "TABLE_");
137 
138         return super.columnToPropertyName(table, column);
139     }
140 
141     /**
142      * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#excludeColumn(org.hibernate.cfg.reveng.TableIdentifier,
143      *      java.lang.String)
144      */
145     @Override
146     public boolean excludeColumn(TableIdentifier identifier, String columnName) {
147 
148         if (columnName.equalsIgnoreCase("REGISTER_ID"))
149             return true;
150         else
151             return super.excludeColumn(identifier, columnName);
152     }
153 
154     /**
155      * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#excludeTable(org.hibernate.cfg.reveng.TableIdentifier)
156      */
157     @Override
158     public boolean excludeTable(TableIdentifier ti) {
159         return super.excludeTable(ti);
160     }
161 
162     /**
163      * @see org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy#tableToClassName(org.hibernate.cfg.reveng.TableIdentifier)
164      */
165     @Override
166     public String tableToClassName(TableIdentifier tableIdentifier) {
167 
168         String newTableName = tableIdentifier.getName().toUpperCase();
169 
170         if (newTableName.startsWith("T_"))
171             newTableName = newTableName.substring(2);
172 
173         if (newTableName.startsWith("TB"))
174             newTableName = newTableName.replaceFirst("TB", "TABLE_");
175 
176         if (!newTableName.equals(tableIdentifier.getName()))
177             tableIdentifier =
178                     new TableIdentifier(tableIdentifier.getCatalog(), tableIdentifier.getSchema(), newTableName);
179 
180         return super.tableToClassName(tableIdentifier);
181     }
182 }