View Javadoc
1   /**
2    *    Copyright 2006-2015 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.internal;
17  
18  import static org.mybatis.generator.internal.util.StringUtility.isTrue;
19  
20  import java.util.Date;
21  import java.util.Properties;
22  
23  import org.mybatis.generator.api.CommentGenerator;
24  import org.mybatis.generator.api.IntrospectedColumn;
25  import org.mybatis.generator.api.IntrospectedTable;
26  import org.mybatis.generator.api.dom.java.CompilationUnit;
27  import org.mybatis.generator.api.dom.java.Field;
28  import org.mybatis.generator.api.dom.java.InnerClass;
29  import org.mybatis.generator.api.dom.java.InnerEnum;
30  import org.mybatis.generator.api.dom.java.JavaElement;
31  import org.mybatis.generator.api.dom.java.Method;
32  import org.mybatis.generator.api.dom.java.Parameter;
33  import org.mybatis.generator.api.dom.xml.TextElement;
34  import org.mybatis.generator.api.dom.xml.XmlElement;
35  import org.mybatis.generator.config.MergeConstants;
36  import org.mybatis.generator.config.PropertyRegistry;
37  
38  /**
39   * @author Jeff Butler
40   * 
41   */
42  public class DefaultCommentGenerator implements CommentGenerator {
43  
44      private Properties properties;
45      private boolean suppressDate;
46      private boolean suppressAllComments;
47  
48      public DefaultCommentGenerator() {
49          super();
50          properties = new Properties();
51          suppressDate = false;
52          suppressAllComments = false;
53      }
54  
55      public void addJavaFileComment(CompilationUnit compilationUnit) {
56          // add no file level comments by default
57          return;
58      }
59  
60      /**
61       * Adds a suitable comment to warn users that the element was generated, and
62       * when it was generated.
63       */
64      public void addComment(XmlElement xmlElement) {
65          if (suppressAllComments) {
66              return;
67          }
68  
69          xmlElement.addElement(new TextElement("<!--")); //$NON-NLS-1$
70  
71          StringBuilder sb = new StringBuilder();
72          sb.append("  WARNING - "); //$NON-NLS-1$
73          sb.append(MergeConstants.NEW_ELEMENT_TAG);
74          xmlElement.addElement(new TextElement(sb.toString()));
75          xmlElement
76                  .addElement(new TextElement(
77                          "  This element is automatically generated by MyBatis Generator, do not modify.")); //$NON-NLS-1$
78  
79          String s = getDateString();
80          if (s != null) {
81              sb.setLength(0);
82              sb.append("  This element was generated on "); //$NON-NLS-1$
83              sb.append(s);
84              sb.append('.');
85              xmlElement.addElement(new TextElement(sb.toString()));
86          }
87  
88          xmlElement.addElement(new TextElement("-->")); //$NON-NLS-1$
89      }
90  
91      public void addRootComment(XmlElement rootElement) {
92          // add no document level comments by default
93          return;
94      }
95  
96      public void addConfigurationProperties(Properties properties) {
97          this.properties.putAll(properties);
98  
99          suppressDate = isTrue(properties
100                 .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
101         
102         suppressAllComments = isTrue(properties
103                 .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
104     }
105 
106     /**
107      * This method adds the custom javadoc tag for. You may do nothing if you do
108      * not wish to include the Javadoc tag - however, if you do not include the
109      * Javadoc tag then the Java merge capability of the eclipse plugin will
110      * break.
111      * 
112      * @param javaElement
113      *            the java element
114      */
115     protected void addJavadocTag(JavaElement javaElement,
116             boolean markAsDoNotDelete) {
117         javaElement.addJavaDocLine(" *"); //$NON-NLS-1$
118         StringBuilder sb = new StringBuilder();
119         sb.append(" * "); //$NON-NLS-1$
120         sb.append(MergeConstants.NEW_ELEMENT_TAG);
121         if (markAsDoNotDelete) {
122             sb.append(" do_not_delete_during_merge"); //$NON-NLS-1$
123         }
124         String s = getDateString();
125         if (s != null) {
126             sb.append(' ');
127             sb.append(s);
128         }
129         javaElement.addJavaDocLine(sb.toString());
130     }
131 
132     /**
133      * This method returns a formated date string to include in the Javadoc tag
134      * and XML comments. You may return null if you do not want the date in
135      * these documentation elements.
136      * 
137      * @return a string representing the current timestamp, or null
138      */
139     protected String getDateString() {
140         if (suppressDate) {
141             return null;
142         } else {
143             return new Date().toString();
144         }
145     }
146 
147     public void addClassComment(InnerClass innerClass,
148             IntrospectedTable introspectedTable) {
149         if (suppressAllComments) {
150             return;
151         }
152         
153         StringBuilder sb = new StringBuilder();
154 
155         innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
156         innerClass
157                 .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
158 
159         sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
160         sb.append(introspectedTable.getFullyQualifiedTable());
161         innerClass.addJavaDocLine(sb.toString());
162 
163         addJavadocTag(innerClass, false);
164 
165         innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
166     }
167 
168     public void addEnumComment(InnerEnum innerEnum,
169             IntrospectedTable introspectedTable) {
170         if (suppressAllComments) {
171             return;
172         }
173 
174         StringBuilder sb = new StringBuilder();
175 
176         innerEnum.addJavaDocLine("/**"); //$NON-NLS-1$
177         innerEnum
178                 .addJavaDocLine(" * This enum was generated by MyBatis Generator."); //$NON-NLS-1$
179 
180         sb.append(" * This enum corresponds to the database table "); //$NON-NLS-1$
181         sb.append(introspectedTable.getFullyQualifiedTable());
182         innerEnum.addJavaDocLine(sb.toString());
183 
184         addJavadocTag(innerEnum, false);
185 
186         innerEnum.addJavaDocLine(" */"); //$NON-NLS-1$
187     }
188 
189     public void addFieldComment(Field field,
190             IntrospectedTable introspectedTable,
191             IntrospectedColumn introspectedColumn) {
192         if (suppressAllComments) {
193             return;
194         }
195 
196         StringBuilder sb = new StringBuilder();
197 
198         field.addJavaDocLine("/**"); //$NON-NLS-1$
199         field
200                 .addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$
201 
202         sb.append(" * This field corresponds to the database column "); //$NON-NLS-1$
203         sb.append(introspectedTable.getFullyQualifiedTable());
204         sb.append('.');
205         sb.append(introspectedColumn.getActualColumnName());
206         field.addJavaDocLine(sb.toString());
207 
208         addJavadocTag(field, false);
209 
210         field.addJavaDocLine(" */"); //$NON-NLS-1$
211     }
212 
213     public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
214         if (suppressAllComments) {
215             return;
216         }
217 
218         StringBuilder sb = new StringBuilder();
219 
220         field.addJavaDocLine("/**"); //$NON-NLS-1$
221         field
222                 .addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$
223 
224         sb.append(" * This field corresponds to the database table "); //$NON-NLS-1$
225         sb.append(introspectedTable.getFullyQualifiedTable());
226         field.addJavaDocLine(sb.toString());
227 
228         addJavadocTag(field, false);
229 
230         field.addJavaDocLine(" */"); //$NON-NLS-1$
231     }
232 
233     public void addGeneralMethodComment(Method method,
234             IntrospectedTable introspectedTable) {
235         if (suppressAllComments) {
236             return;
237         }
238 
239         StringBuilder sb = new StringBuilder();
240 
241         method.addJavaDocLine("/**"); //$NON-NLS-1$
242         method
243                 .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
244 
245         sb.append(" * This method corresponds to the database table "); //$NON-NLS-1$
246         sb.append(introspectedTable.getFullyQualifiedTable());
247         method.addJavaDocLine(sb.toString());
248 
249         addJavadocTag(method, false);
250 
251         method.addJavaDocLine(" */"); //$NON-NLS-1$
252     }
253 
254     public void addGetterComment(Method method,
255             IntrospectedTable introspectedTable,
256             IntrospectedColumn introspectedColumn) {
257         if (suppressAllComments) {
258             return;
259         }
260 
261         StringBuilder sb = new StringBuilder();
262 
263         method.addJavaDocLine("/**"); //$NON-NLS-1$
264         method
265                 .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
266 
267         sb.append(" * This method returns the value of the database column "); //$NON-NLS-1$
268         sb.append(introspectedTable.getFullyQualifiedTable());
269         sb.append('.');
270         sb.append(introspectedColumn.getActualColumnName());
271         method.addJavaDocLine(sb.toString());
272 
273         method.addJavaDocLine(" *"); //$NON-NLS-1$
274 
275         sb.setLength(0);
276         sb.append(" * @return the value of "); //$NON-NLS-1$
277         sb.append(introspectedTable.getFullyQualifiedTable());
278         sb.append('.');
279         sb.append(introspectedColumn.getActualColumnName());
280         method.addJavaDocLine(sb.toString());
281 
282         addJavadocTag(method, false);
283 
284         method.addJavaDocLine(" */"); //$NON-NLS-1$
285     }
286 
287     public void addSetterComment(Method method,
288             IntrospectedTable introspectedTable,
289             IntrospectedColumn introspectedColumn) {
290         if (suppressAllComments) {
291             return;
292         }
293 
294         StringBuilder sb = new StringBuilder();
295 
296         method.addJavaDocLine("/**"); //$NON-NLS-1$
297         method
298                 .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
299 
300         sb.append(" * This method sets the value of the database column "); //$NON-NLS-1$
301         sb.append(introspectedTable.getFullyQualifiedTable());
302         sb.append('.');
303         sb.append(introspectedColumn.getActualColumnName());
304         method.addJavaDocLine(sb.toString());
305 
306         method.addJavaDocLine(" *"); //$NON-NLS-1$
307 
308         Parameter parm = method.getParameters().get(0);
309         sb.setLength(0);
310         sb.append(" * @param "); //$NON-NLS-1$
311         sb.append(parm.getName());
312         sb.append(" the value for "); //$NON-NLS-1$
313         sb.append(introspectedTable.getFullyQualifiedTable());
314         sb.append('.');
315         sb.append(introspectedColumn.getActualColumnName());
316         method.addJavaDocLine(sb.toString());
317 
318         addJavadocTag(method, false);
319 
320         method.addJavaDocLine(" */"); //$NON-NLS-1$
321     }
322 
323     public void addClassComment(InnerClass innerClass,
324             IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
325         if (suppressAllComments) {
326             return;
327         }
328 
329         StringBuilder sb = new StringBuilder();
330 
331         innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
332         innerClass
333                 .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
334 
335         sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
336         sb.append(introspectedTable.getFullyQualifiedTable());
337         innerClass.addJavaDocLine(sb.toString());
338 
339         addJavadocTag(innerClass, markAsDoNotDelete);
340 
341         innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
342     }
343 }