1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.javagen.agile.db.visitor;
17
18 import org.javagen.agile.db.model.Table;
19
20 /***
21 * Identify and flag pure link or association tables - that is tables
22 * whose only function is to link one table to another.
23 *
24 * @author Richard Easterling
25 */
26 public class LinkTableFinderVisitor extends DefaultDatabaseVisitor {
27
28 private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LinkTableFinderVisitor.class);
29
30 public LinkTableFinderVisitor() {
31 this.setItinerary(new String[] {Table.DEFAULT_MODEL_TYPE});
32 }
33
34 /***
35 * Identify and flag link tables. Link tables are determined here as having
36 * exactly two foreign key columns.
37 */
38 public void visit(Table table) {
39 if ( ! Boolean.TRUE.equals(table.isLinkTable())
40 && table.getFkColumns()!=null && table.getFkColumns().size()==2
41 && table.getColumns()!=null && table.getColumns().size()==2
42 && table.getColumns().get(0).isKey()
43 && table.getColumns().get(1).isKey()
44 )
45 {
46 table.setLinkTable(true);
47 if (log.isInfoEnabled())
48 log.info("Removing "+table.getName()+" link table from mapping");
49 }
50 }
51 }