1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sourceforge.addam.ddlgen.generic;
20
21 import net.sourceforge.addam.ddlgen.generic.ForeignKey;
22
23 import org.apache.velocity.VelocityContext;
24
25 import java.sql.Connection;
26 import java.sql.DatabaseMetaData;
27 import java.sql.ResultSet;
28 import java.util.Map;
29 import java.util.TreeMap;
30
31
32 /**
33 * User: mkrishna
34 * Date: Nov 17, 2004
35 */
36
37 public class ForeignKeyGenerator extends net.sourceforge.addam.ddlgen.generic.VelocityGenerator {
38
39 protected VelocityContext getContext(String catalog, String schema, String object,
40 Connection connection, DatabaseMetaData metadata)
41 throws Exception {
42 VelocityContext context = new VelocityContext();
43 ResultSet importedKeys = null;
44 try {
45 Map<String,ForeignKey> foreignKeyMap = new TreeMap<String, ForeignKey>();
46 importedKeys = metadata.getImportedKeys(catalog, schema, object);
47 while (importedKeys.next()) {
48 String foreignKeyName = importedKeys.getString(12);
49 if (foreignKeyMap.get(foreignKeyName) == null) {
50 net.sourceforge.addam.ddlgen.generic.ForeignKey foreignKey = new ForeignKey(importedKeys.getString(7),foreignKeyName, importedKeys.getString(3));
51 foreignKey.addForeignKeyColumn(importedKeys.getString(8));
52 foreignKey.addPrimaryKeyColumn(importedKeys.getString(4));
53 foreignKeyMap.put(foreignKeyName, foreignKey);
54 } else {
55
56 ForeignKey addedForeignKey = (ForeignKey) foreignKeyMap.get(foreignKeyName);
57 addedForeignKey.addForeignKeyColumn(importedKeys.getString(8));
58 addedForeignKey.addPrimaryKeyColumn(importedKeys.getString(4));
59 }
60 }
61 context.put("foreignKeys", foreignKeyMap.values());
62 } finally {
63 if (importedKeys != null) importedKeys.close();
64 }
65 return context;
66 }
67 }