1 package org.apache.torque.templates.transformer.om;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.torque.generator.control.ControllerState;
26 import org.apache.torque.generator.source.SourceElement;
27 import org.apache.torque.generator.source.transform.SourceTransformer;
28 import org.apache.torque.generator.source.transform.SourceTransformerException;
29 import org.apache.torque.templates.TemplateOptionName;
30 import org.apache.torque.templates.TorqueSchemaAttributeName;
31 import org.apache.torque.templates.TorqueSchemaElementName;
32 import org.apache.torque.templates.transformer.om.mapInit.DatabaseMapInitTransformer;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 public class OMTransformer implements SourceTransformer
56 {
57
58
59
60
61
62
63 private static final OMForeignKeyColumnTransformer foreignKeyColumnTransformer
64 = new OMForeignKeyColumnTransformer();
65
66
67
68
69
70
71
72 private static final OMForeignKeyTransformer foreignKeyTransformer
73 = new OMForeignKeyTransformer();
74
75
76
77
78
79
80
81 private static final OMTableAndViewTransformer tableOrViewTransformer;
82
83
84
85
86
87
88 private static final SourceTransformer loadExternalSchemaTransformer
89 = new LoadExternalSchemaTransformer();
90
91
92
93
94
95
96 private static final SourceTransformer includeSchemaTransformer
97 = new IncludeSchemaTransformer();
98
99 static
100 {
101 try
102 {
103 tableOrViewTransformer = new OMTableAndViewTransformer();
104 }
105 catch (SourceTransformerException e)
106 {
107 throw new RuntimeException(e);
108 }
109 }
110
111
112
113
114
115
116
117
118
119 public SourceElement transform(
120 SourceElement root,
121 ControllerState controllerState)
122 throws SourceTransformerException
123 {
124 TemplateOptionName.checkRequiredOptions(
125 controllerState,
126 TemplateOptionName.OM_PACKAGE);
127
128 setRootDatabaseNameAttribute(root);
129 DatabaseMapInitTransformer.setDatabaseMapInitClassNameAttributes(
130 root,
131 (String) root.getAttribute(TorqueSchemaAttributeName.NAME),
132 controllerState);
133
134 includeSchemaTransformer.transform(root, controllerState);
135
136 loadExternalSchemaTransformer.transform(root, controllerState);
137
138 List<SourceElement> allTablesAndViews = new ArrayList<SourceElement>();
139 allTablesAndViews.addAll(
140 root.getChild(DatabaseChildElementName.ALL_TABLES)
141 .getChildren(TorqueSchemaElementName.TABLE));
142 allTablesAndViews.addAll(
143 root.getChild(DatabaseChildElementName.ALL_VIEWS)
144 .getChildren(TorqueSchemaElementName.VIEW));
145
146 for (SourceElement tableOrViewElement : allTablesAndViews)
147 {
148 tableOrViewTransformer.transform(
149 tableOrViewElement,
150 controllerState);
151 }
152
153 for (SourceElement tableOrViewElement : allTablesAndViews)
154 {
155 for (SourceElement columnElement : tableOrViewElement.getChildren(
156 TorqueSchemaElementName.COLUMN))
157 {
158 foreignKeyColumnTransformer.transform(
159 columnElement,
160 controllerState);
161 }
162 for (SourceElement foreignKeyElement
163 : tableOrViewElement.getChildren(
164 TorqueSchemaElementName.FOREIGN_KEY))
165 {
166 foreignKeyTransformer.transform(
167 foreignKeyElement,
168 controllerState);
169 }
170 }
171
172 for (SourceElement tableOrViewElement : allTablesAndViews)
173 {
174 for (SourceElement foreignKeyElement
175 : tableOrViewElement.getChildren(
176 TorqueSchemaElementName.FOREIGN_KEY))
177 {
178 foreignKeyTransformer.transformSecondPass(
179 foreignKeyElement,
180 controllerState);
181 }
182 }
183
184 return root;
185 }
186
187
188
189
190
191
192
193 public static void setRootDatabaseNameAttribute(SourceElement databaseElement)
194 {
195 String databaseName = (String) databaseElement.getAttribute(
196 TorqueSchemaAttributeName.NAME);
197 databaseElement.setAttribute(
198 DatabaseAttributeName.ROOT_DATABASE_NAME,
199 databaseName);
200 }
201 }