View Javadoc
1   /**
2    *    Copyright 2006-2016 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.generator.codegen.ibatis2.sqlmap;
17  
18  import static org.mybatis.generator.internal.util.messages.Messages.getString;
19  
20  import org.mybatis.generator.api.FullyQualifiedTable;
21  import org.mybatis.generator.api.dom.xml.Attribute;
22  import org.mybatis.generator.api.dom.xml.Document;
23  import org.mybatis.generator.api.dom.xml.XmlElement;
24  import org.mybatis.generator.codegen.AbstractXmlGenerator;
25  import org.mybatis.generator.codegen.XmlConstants;
26  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.AbstractXmlElementGenerator;
27  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.BaseColumnListElementGenerator;
28  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.BlobColumnListElementGenerator;
29  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.CountByExampleElementGenerator;
30  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.DeleteByExampleElementGenerator;
31  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.DeleteByPrimaryKeyElementGenerator;
32  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.ExampleWhereClauseElementGenerator;
33  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.InsertElementGenerator;
34  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.InsertSelectiveElementGenerator;
35  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.ResultMapWithBLOBsElementGenerator;
36  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.ResultMapWithoutBLOBsElementGenerator;
37  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.SelectByExampleWithBLOBsElementGenerator;
38  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.SelectByExampleWithoutBLOBsElementGenerator;
39  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.SelectByPrimaryKeyElementGenerator;
40  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByExampleSelectiveElementGenerator;
41  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByExampleWithBLOBsElementGenerator;
42  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByExampleWithoutBLOBsElementGenerator;
43  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByPrimaryKeySelectiveElementGenerator;
44  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByPrimaryKeyWithBLOBsElementGenerator;
45  import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.UpdateByPrimaryKeyWithoutBLOBsElementGenerator;
46  
47  /**
48   * 
49   * @author Jeff Butler
50   * 
51   */
52  public class SqlMapGenerator extends AbstractXmlGenerator {
53  
54      public SqlMapGenerator() {
55          super();
56      }
57  
58      protected XmlElement getSqlMapElement() {
59          FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
60          progressCallback.startTask(getString(
61                  "Progress.12", table.toString())); //$NON-NLS-1$
62          XmlElement answer = new XmlElement("sqlMap"); //$NON-NLS-1$
63          answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
64                  introspectedTable.getIbatis2SqlMapNamespace()));
65  
66          context.getCommentGenerator().addRootComment(answer);
67  
68          addResultMapWithoutBLOBsElement(answer);
69          addResultMapWithBLOBsElement(answer);
70          addExampleWhereClauseElement(answer);
71          addBaseColumnListElement(answer);
72          addBlobColumnListElement(answer);
73          addSelectByExampleWithBLOBsElement(answer);
74          addSelectByExampleWithoutBLOBsElement(answer);
75          addSelectByPrimaryKeyElement(answer);
76          addDeleteByPrimaryKeyElement(answer);
77          addDeleteByExampleElement(answer);
78          addInsertElement(answer);
79          addInsertSelectiveElement(answer);
80          addCountByExampleElement(answer);
81          addUpdateByExampleSelectiveElement(answer);
82          addUpdateByExampleWithBLOBsElement(answer);
83          addUpdateByExampleWithoutBLOBsElement(answer);
84          addUpdateByPrimaryKeySelectiveElement(answer);
85          addUpdateByPrimaryKeyWithBLOBsElement(answer);
86          addUpdateByPrimaryKeyWithoutBLOBsElement(answer);
87  
88          return answer;
89      }
90  
91      protected void addResultMapWithoutBLOBsElement(XmlElement parentElement) {
92          if (introspectedTable.getRules().generateBaseResultMap()) {
93              AbstractXmlElementGenerator elementGenerator = new ResultMapWithoutBLOBsElementGenerator();
94              initializeAndExecuteGenerator(elementGenerator, parentElement);
95          }
96      }
97  
98      protected void addResultMapWithBLOBsElement(XmlElement parentElement) {
99          if (introspectedTable.getRules().generateResultMapWithBLOBs()) {
100             AbstractXmlElementGenerator elementGenerator = new ResultMapWithBLOBsElementGenerator();
101             initializeAndExecuteGenerator(elementGenerator, parentElement);
102         }
103     }
104 
105     protected void addExampleWhereClauseElement(XmlElement parentElement) {
106         if (introspectedTable.getRules().generateSQLExampleWhereClause()) {
107             AbstractXmlElementGenerator elementGenerator = new ExampleWhereClauseElementGenerator();
108             initializeAndExecuteGenerator(elementGenerator, parentElement);
109         }
110     }
111 
112     protected void addBaseColumnListElement(XmlElement parentElement) {
113         if (introspectedTable.getRules().generateBaseColumnList()) {
114             AbstractXmlElementGenerator elementGenerator = new BaseColumnListElementGenerator();
115             initializeAndExecuteGenerator(elementGenerator, parentElement);
116         }
117     }
118 
119     protected void addBlobColumnListElement(XmlElement parentElement) {
120         if (introspectedTable.getRules().generateBlobColumnList()) {
121             AbstractXmlElementGenerator elementGenerator = new BlobColumnListElementGenerator();
122             initializeAndExecuteGenerator(elementGenerator, parentElement);
123         }
124     }
125 
126     protected void addSelectByExampleWithoutBLOBsElement(
127             XmlElement parentElement) {
128         if (introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
129             AbstractXmlElementGenerator elementGenerator = new SelectByExampleWithoutBLOBsElementGenerator();
130             initializeAndExecuteGenerator(elementGenerator, parentElement);
131         }
132     }
133 
134     protected void addSelectByExampleWithBLOBsElement(XmlElement parentElement) {
135         if (introspectedTable.getRules().generateSelectByExampleWithBLOBs()) {
136             AbstractXmlElementGenerator elementGenerator = new SelectByExampleWithBLOBsElementGenerator();
137             initializeAndExecuteGenerator(elementGenerator, parentElement);
138         }
139     }
140 
141     protected void addSelectByPrimaryKeyElement(XmlElement parentElement) {
142         if (introspectedTable.getRules().generateSelectByPrimaryKey()) {
143             AbstractXmlElementGenerator elementGenerator = new SelectByPrimaryKeyElementGenerator();
144             initializeAndExecuteGenerator(elementGenerator, parentElement);
145         }
146     }
147 
148     protected void addDeleteByExampleElement(XmlElement parentElement) {
149         if (introspectedTable.getRules().generateDeleteByExample()) {
150             AbstractXmlElementGenerator elementGenerator = new DeleteByExampleElementGenerator();
151             initializeAndExecuteGenerator(elementGenerator, parentElement);
152         }
153     }
154 
155     protected void addDeleteByPrimaryKeyElement(XmlElement parentElement) {
156         if (introspectedTable.getRules().generateDeleteByPrimaryKey()) {
157             AbstractXmlElementGenerator elementGenerator = new DeleteByPrimaryKeyElementGenerator();
158             initializeAndExecuteGenerator(elementGenerator, parentElement);
159         }
160     }
161 
162     protected void addInsertElement(XmlElement parentElement) {
163         if (introspectedTable.getRules().generateInsert()) {
164             AbstractXmlElementGenerator elementGenerator = new InsertElementGenerator();
165             initializeAndExecuteGenerator(elementGenerator, parentElement);
166         }
167     }
168 
169     protected void addInsertSelectiveElement(XmlElement parentElement) {
170         if (introspectedTable.getRules().generateInsertSelective()) {
171             AbstractXmlElementGenerator elementGenerator = new InsertSelectiveElementGenerator();
172             initializeAndExecuteGenerator(elementGenerator, parentElement);
173         }
174     }
175 
176     protected void addCountByExampleElement(XmlElement parentElement) {
177         if (introspectedTable.getRules().generateCountByExample()) {
178             AbstractXmlElementGenerator elementGenerator = new CountByExampleElementGenerator();
179             initializeAndExecuteGenerator(elementGenerator, parentElement);
180         }
181     }
182 
183     protected void addUpdateByExampleSelectiveElement(XmlElement parentElement) {
184         if (introspectedTable.getRules().generateUpdateByExampleSelective()) {
185             AbstractXmlElementGenerator elementGenerator = new UpdateByExampleSelectiveElementGenerator();
186             initializeAndExecuteGenerator(elementGenerator, parentElement);
187         }
188     }
189 
190     protected void addUpdateByExampleWithBLOBsElement(XmlElement parentElement) {
191         if (introspectedTable.getRules().generateUpdateByExampleWithBLOBs()) {
192             AbstractXmlElementGenerator elementGenerator = new UpdateByExampleWithBLOBsElementGenerator();
193             initializeAndExecuteGenerator(elementGenerator, parentElement);
194         }
195     }
196 
197     protected void addUpdateByExampleWithoutBLOBsElement(
198             XmlElement parentElement) {
199         if (introspectedTable.getRules().generateUpdateByExampleWithoutBLOBs()) {
200             AbstractXmlElementGenerator elementGenerator = new UpdateByExampleWithoutBLOBsElementGenerator();
201             initializeAndExecuteGenerator(elementGenerator, parentElement);
202         }
203     }
204 
205     protected void addUpdateByPrimaryKeySelectiveElement(
206             XmlElement parentElement) {
207         if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
208             AbstractXmlElementGenerator elementGenerator = new UpdateByPrimaryKeySelectiveElementGenerator();
209             initializeAndExecuteGenerator(elementGenerator, parentElement);
210         }
211     }
212 
213     protected void addUpdateByPrimaryKeyWithBLOBsElement(
214             XmlElement parentElement) {
215         if (introspectedTable.getRules().generateUpdateByPrimaryKeyWithBLOBs()) {
216             AbstractXmlElementGenerator elementGenerator = new UpdateByPrimaryKeyWithBLOBsElementGenerator();
217             initializeAndExecuteGenerator(elementGenerator, parentElement);
218         }
219     }
220 
221     protected void addUpdateByPrimaryKeyWithoutBLOBsElement(
222             XmlElement parentElement) {
223         if (introspectedTable.getRules()
224                 .generateUpdateByPrimaryKeyWithoutBLOBs()) {
225             AbstractXmlElementGenerator elementGenerator = new UpdateByPrimaryKeyWithoutBLOBsElementGenerator();
226             initializeAndExecuteGenerator(elementGenerator, parentElement);
227         }
228     }
229 
230     protected void initializeAndExecuteGenerator(
231             AbstractXmlElementGenerator elementGenerator,
232             XmlElement parentElement) {
233         elementGenerator.setContext(context);
234         elementGenerator.setIntrospectedTable(introspectedTable);
235         elementGenerator.setProgressCallback(progressCallback);
236         elementGenerator.setWarnings(warnings);
237         elementGenerator.addElements(parentElement);
238     }
239 
240     @Override
241     public Document getDocument() {
242         Document document = new Document(
243                 XmlConstants.IBATIS2_SQL_MAP_PUBLIC_ID,
244                 XmlConstants.IBATIS2_SQL_MAP_SYSTEM_ID);
245         document.setRootElement(getSqlMapElement());
246 
247         if (!context.getPlugins().sqlMapDocumentGenerated(document,
248                 introspectedTable)) {
249             document = null;
250         }
251 
252         return document;
253     }
254 }