1 /**
2 The contents of this file are subject to the Mozilla Public License Version 1.1
3 (the "License"); you may not use this file except in compliance with the License.
4 You may obtain a copy of the License at http://www.mozilla.org/MPL/
5 Software distributed under the License is distributed on an "AS IS" basis,
6 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
7 specific language governing rights and limitations under the License.
8
9 The Original Code is "GeneratedMethod.java". Description:
10 "This class will allows the creation of a method. All members are set, then the
11 toString method is called to return the String representation of the created method."
12
13 The Initial Developer of the Original Code is University Health Network. Copyright (C)
14 2001. All Rights Reserved.
15
16 Contributor(s): James Agnew
17 Paul Brohman
18 Mitch Delachevrotiere
19 Shawn Dyck
20 Cory Metcalf
21
22 Alternatively, the contents of this file may be used under the terms of the
23 GNU General Public License (the ?GPL?), in which case the provisions of the GPL are
24 applicable instead of those above. If you wish to allow use of your version of this
25 file only under the terms of the GPL and not to allow others to use your version
26 of this file under the MPL, indicate your decision by deleting the provisions above
27 and replace them with the notice and other provisions required by the GPL License.
28 If you do not delete the provisions above, a recipient may use your version of
29 this file under either the MPL or the GPL.
30
31 */
32 package ca.uhn.hl7v2.conf.classes.generator.genclasses;
33
34 import java.util.Vector;
35
36 /** This class will allows the creation of a method. All members
37 * are set, then the toString method is called to return the String
38 * representation of the created method.
39 * @author <table><tr>James Agnew</tr>
40 * <tr>Paul Brohman</tr>
41 * <tr>Mitch Delachevrotiere</tr>
42 * <tr>Shawn Dyck</tr>
43 * <tr>Cory Metcalf</tr></table>
44 */
45 public class GeneratedMethod {
46 private final Vector<String> body;
47 private final Vector<String> comments;
48 private final Vector<String> description;
49 protected final String INDENT = " ";
50 private String name;
51 private final Vector<String> params;
52 private String returnType;
53 private String throwing;
54 private String visibility;
55
56 /** Creates a new instance of GeneratedMethod */
57 public GeneratedMethod() {
58 body = new Vector<>();
59 comments = new Vector<>();
60 params = new Vector<>();
61 description = new Vector<>();
62 }
63
64 /** A method to set the parameters of the method
65 * @param param the parameters of the created method
66 */
67 public void addParam(String param) {
68 this.params.add(param);
69 }
70
71 /** A method to set the parameters of the method
72 * @param param the parameters of the created method
73 * @param description the describing this method (for use in the JavaDoc comments)
74 */
75 public void addParam(String param, String description) {
76 this.params.add(param);
77 this.addToComments("@param " + param + " " + description);
78 }
79
80 /** A method to set the body of the method
81 * @param line a line of code to be added to the body of the created method
82 * @return a reference to the GeneratedMethod object being modified
83 */
84 public GeneratedMethod addToBody(String line) {
85 this.body.add(line);
86 return this;
87 }
88
89 /** A method to set the comments of the method
90 * @param comments a comment to be added the comments of the created method
91 */
92 public void addToComments(String comments) {
93 this.comments.add(comments);
94 }
95
96 /** A method to set the body of the method
97 * @param line a description to be added to the created method
98 */
99 public void addToDescription(String line) {
100 this.description.add(line);
101 }
102
103 /** A method to set the throws of the method
104 * @param throwing sets the throws of the created method
105 */
106 public void addToThrows(String throwing) {
107 this.throwing = throwing;
108 }
109
110 /** A method to set the name of the method
111 * @param name the name of the created method
112 */
113 public void setName(String name) {
114 this.name = name;
115 }
116
117 /** A method to set the return type of the method
118 * @param returnType the return type of the created method
119 */
120 public void setReturnType(String returnType) {
121 this.returnType = returnType + " ";
122 }
123
124 /** A method to set the visibility of the method
125 * @param visibility the visibility of the created method
126 */
127 public void setVisibility(String visibility) {
128 this.visibility = visibility + " ";
129 }
130
131 /** creates a method with the filled member variables
132 * @return the String representation of the created method
133 */
134 public String toString() {
135 String theMethod;
136
137 // add the comments and visibility to the method
138 theMethod = INDENT + "/**\n" + vectorToString(1, description, " * ") + vectorToString(1, comments, " * ") + " */\n";
139 theMethod += INDENT + visibility;
140
141 // check if its a constructor
142 if (returnType != null)
143 theMethod += returnType;
144
145 // add the paramters to the method
146 theMethod += name;
147 if (params.size() > 0)
148 theMethod += "(" + params.toString().replace('[', ' ').replace(']', ' ') + ")";
149 else
150 theMethod += "()";
151
152 // check if its throwing an exception
153 if (throwing != null)
154 theMethod += " throws " + throwing;
155
156 // create the body of the method
157 theMethod += " {\n" + vectorToString(2, body, "") + INDENT + "}\n";
158 return theMethod;
159 }
160
161 /** Creates a string based on a vector representing the individual lines of a string
162 * @param indentLevel the indentation level to use. For example, a level of 2 would use two "tabs" before each line.
163 * @param vec the vector to be converted
164 * @param prefix a String to prepend to each line
165 * example " * " for a comment)
166 * @return The generated string
167 */
168 private String vectorToString(int indentLevel, Vector<?> vec, String prefix) {
169 StringBuilder pString = new StringBuilder();
170 StringBuilder indent = new StringBuilder("".concat(prefix));
171
172 // Create indentation string
173 for (int i = 0; i < indentLevel; i++)
174 indent.insert(0, INDENT);
175
176 // Convert the vector to a string
177 for (Object o : vec) pString.append(indent).append(o.toString()).append("\n");
178 return pString.toString();
179 }
180 }