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 "GeneratedClass.java".  Description: 
10  "This Class generates a Class File which is used by the Conformance Builder Classes" 
11  
12  The Initial Developer of the Original Code is University Health Network. Copyright (C) 
13  2001.  All Rights Reserved. 
14  
15  Contributor(s): James Agnew
16                  Paul Brohman
17                  Mitch Delachevrotiere
18                  Shawn Dyck
19    				Cory Metcalf
20    				
21  Alternatively, the contents of this file may be used under the terms of the 
22  GNU General Public License (the  ?GPL?), in which case the provisions of the GPL are 
23  applicable instead of those above.  If you wish to allow use of your version of this 
24  file only under the terms of the GPL and not to allow others to use your version 
25  of this file under the MPL, indicate your decision by deleting  the provisions above 
26  and replace  them with the notice and other provisions required by the GPL License.  
27  If you do not delete the provisions above, a recipient may use your version of 
28  this file under either the MPL or the GPL. 
29  
30  */
31  package ca.uhn.hl7v2.conf.classes.generator.genclasses;
32  import java.util.*;
33  import ca.uhn.hl7v2.conf.classes.generator.builders.*;
34  
35  /** This Class generates a Class File which is used by the Conformance Builder Classes
36   * @author <table><tr>James Agnew</tr>
37   *                <tr>Paul Brohman</tr>
38   *                <tr>Mitch Delachevrotiere</tr>
39   *                <tr>Shawn Dyck</tr>
40   * 				  <tr>Cory Metcalf</tr></table>
41   */
42  public class GeneratedClass {
43  
44     private static final String INDENT = "   ";
45     private final Vector<String> classComments;
46     private final Vector<String> classImports;
47     private String classPackage;
48     private GeneratedMethod constructor;
49     private final Vector<String> license;
50     private final Vector<String> memberVariables;
51     private final Vector<GeneratedMethod> methods;
52     private String name;
53     private String properties;
54  
55     /** Creates a new instance of GeneratedClass,
56      *  creates a new instance of the all the memberVariables 
57      */
58     public GeneratedClass() {
59        classImports = new Vector<>();
60        memberVariables = new Vector<>();
61        methods = new Vector<>();
62        classComments = new Vector<>();
63        license = new Vector<>();
64        constructor = new GeneratedMethod();
65        constructor.setVisibility("public");
66        classPackage = "";
67        properties = "";
68     }
69  
70     /** This method adds a new comment to the class contained within the generated Java source file
71      *  @param classComment adds a comment to the class
72      */
73     public void addClassComment(String classComment) {
74        this.classComments.add(classComment);
75     }
76  
77     /** This method adds a new import statement to the class contained within the generated Java source file
78      *  @param classImport the import path to import
79      */
80     public void addClassImport(String classImport) {
81        this.classImports.add("import " + classImport + ";");
82     }
83  
84     /** This method adds a new member variable to the class contained within the generated Java source file
85      *  @param memberVariable the member variable to add
86      */
87     public void addMemberVariable(String memberVariable) {
88        memberVariables.add(memberVariable);
89     }
90  
91     /** This method adds a new method to the class contained within the generated Java source file
92      *  @param method the generated method to add
93      */
94     public void addMethod(GeneratedMethod method) {
95        methods.add(method);
96     }
97  
98     /** This method sets the class comments for the class contained within the generated Java source file
99      *  @param comments the comments to add to the class comments
100     */
101    public void addToClassComments(String comments) {
102       this.classComments.add(comments);
103    }
104 
105    /** This method returns the constructor for the class contained within the generated Java source file
106     *  @return the generated methods constructor
107     */
108    public GeneratedMethod getConstructor() {
109       return this.constructor;
110    }
111 
112    /** This method returns the class name of the class contained within the generated Java source file
113     *  @return the class name
114     */
115    public String getName() {
116       return this.name;
117    }
118 
119    /** This method sets the classPackage for the class contained within the generated Java source file
120     *  @param classPackage the classPackage to set
121     */
122    public void setClassPackage(String classPackage) {
123       if (classPackage != null)
124          this.classPackage = classPackage;
125       else
126          this.classPackage = "";
127    }
128 
129    /** This method sets the constructor for the class contained within the generated Java source file
130      *  @return the generated methods constructor
131     */
132    public void setConstructor(GeneratedMethod constructor) {
133       this.constructor = constructor;
134    }
135 
136    /** This method sets the class name for the class contained within the generated Java source file
137     *  @param name the class name
138     */
139    public void setName(String name) {
140       this.name = name + " ";
141       this.constructor.setName(name);
142    }
143 
144    /** This method sets the class properties for the class contained within the generated Java source file
145     *  @param properties properties to set
146     */
147    public void setProperties(String properties) {
148       if (properties != null)
149          this.properties = properties + " ";
150       else
151          this.properties = "";
152    }
153 
154    /** This method will return a String representation of the class contained within the generated 
155     * Java source file 
156     * @return a String representation of the class
157     */
158    public String toString() {
159       String theClass = "";
160 
161       theClass += DocumentationBuilder.getDocumentationBuilder().getGeneratedClassHeader();
162       theClass += vectorToString(0, license, "").concat("\n\n"); // License block
163       theClass += "package " + classPackage + ";\n\n"; // Package statement
164       theClass += vectorToString(0, classImports, "").concat("\n\n"); // Package and import statements
165       theClass += "/**\n" + vectorToString(0, classComments, " * ").concat(" */\n"); // Class comments
166 
167       theClass += "public class " + name + properties + "{\n\n"; // Class statement
168       theClass += vectorToString(1, memberVariables, "").concat("\n\n"); // member variables
169       theClass += constructor.toString() + "\n\n"; // Constructor
170       theClass += vectorToString(0, methods, "").concat("\n"); // methods (no indentation because methods indent themselves)
171       theClass += "}\n";
172       return theClass;
173    }
174 
175    /** Creates a string based on a vector representing the individual lines of a string
176     * @param indentLevel the indentation level to use. For example, a level of 2 would use two "tabs" before each line.
177     * @param vec the vector to be converted
178     * @param prefix a string to prepend to each line (ie <example>" * "</example> for a comment)
179     * @return the generated string
180     */
181    private String vectorToString(int indentLevel, Vector<?> vec, String prefix) {
182       StringBuilder pString = new StringBuilder();
183       StringBuilder indent = new StringBuilder("".concat(prefix));
184 
185       // Create indentation string
186       for (int i = 0; i < indentLevel; i++)
187          indent.insert(0, INDENT);
188 
189       // Convert the vector to a string
190       for (Object o : vec) pString.append(indent).append(o.toString()).append("\n");
191       return pString.toString();
192    }
193 
194 }