View Javadoc
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 }