001    /**
002    The contents of this file are subject to the Mozilla Public License Version 1.1 
003    (the "License"); you may not use this file except in compliance with the License. 
004    You may obtain a copy of the License at http://www.mozilla.org/MPL/ 
005    Software distributed under the License is distributed on an "AS IS" basis, 
006    WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 
007    specific language governing rights and limitations under the License. 
008    
009    The Original Code is "DataTypeGenerator.java".  Description: 
010    "Creates source code for RIM DataTypes" 
011    
012    The Initial Developer of the Original Code is University Health Network. Copyright (C) 
013    2001.  All Rights Reserved. 
014    
015    Contributor(s): ______________________________________. 
016    
017    Alternatively, the contents of this file may be used under the terms of the 
018    GNU General Public License (the "GPL"), in which case the provisions of the GPL are 
019    applicable instead of those above.  If you wish to allow use of your version of this 
020    file only under the terms of the GPL and not to allow others to use your version 
021    of this file under the MPL, indicate your decision by deleting  the provisions above 
022    and replace  them with the notice and other provisions required by the GPL License.  
023    If you do not delete the provisions above, a recipient may use your version of 
024    this file under either the MPL or the GPL. 
025    
026    */
027    
028    package ca.uhn.hl7v3.sourcegen;
029    
030    /**
031     * Creates source code for RIM DataTypes.  
032     * @author Bryan Tripp
033     * @deprecated
034     */
035    public class DataTypeGenerator {
036    
037        /** Creates a new instance of DataTypeGenerator */
038        public DataTypeGenerator() {
039        }
040        
041        public String makeDataType(DataTypeDefinition type) {
042            String code = null;
043            if (type.getType().equalsIgnoreCase("Primitive")) {
044                code = makePrimitive(type);
045            } else if (type.getType().equalsIgnoreCase("Composite")) {
046                code = makeComposite(type);
047            } else if (type.getType().equalsIgnoreCase("Generic")) {
048                code = makeGeneric(type);
049            } else if (type.getType().equalsIgnoreCase("Instance")) {
050                code = makeInstance(type);
051            }
052            return code;
053        }
054        
055        public String makePrimitive(DataTypeDefinition primitiveType) {
056            StringBuffer code = new StringBuffer();
057            code.append("package ");
058            code.append(SourceGenerator.getRIMDataTypePackage());
059            code.append("; \r\n\r\n");
060            code.append(SourceGenerator.makeJavaDocComment(primitiveType.getDescription(), 0));
061            code.append("public class ");
062            code.append(primitiveType.getName());
063            code.append(" extends ");
064            if (primitiveType.getSuperClass() != null) {
065                code.append(primitiveType.getSuperClass());
066            } else {
067                code.append("Primitive");
068            }
069            code.append(" { \r\n\r\n");
070            code.append("} \r\n");
071            return code.toString();
072        }
073            
074        public String makeComposite(DataTypeDefinition compositeType) {
075            StringBuffer code = new StringBuffer();
076            code.append("package ");
077            code.append(SourceGenerator.getRIMDataTypePackage());
078            code.append("; \r\n\r\n");
079            code.append(SourceGenerator.makeJavaDocComment(compositeType.getDescription(), 0));
080            code.append("public class ");
081            code.append(compositeType.getName());
082            code.append(" extends ");
083            if (compositeType.getSuperClass() != null) {
084                code.append(compositeType.getSuperClass());
085            } else {
086                code.append("Composite");
087            }
088            code.append(" { \r\n\r\n");
089            ComponentDefinition[] components = compositeType.getComponents();
090            for (int i = 0; i < components.length; i++) {
091                code.append(makeAttributeDeclaration(components[i]));
092            }
093            code.append("\r\n");
094            for (int i = 0; i < components.length; i++) {
095                code.append(makeSetter(components[i]));
096                code.append(makeGetter(components[i]));
097                code.append("\r\n");
098            }       
099            code.append("} \r\n");        
100            return code.toString();
101        }
102    
103        public String makeGeneric(DataTypeDefinition genericType) {
104            StringBuffer code = new StringBuffer();
105            code.append("package ");
106            code.append(SourceGenerator.getRIMDataTypePackage());
107            code.append("; \r\n\r\n");
108            code.append(SourceGenerator.makeJavaDocComment(genericType.getDescription(), 0));
109            code.append("public class ");
110            code.append(genericType.getName());
111            code.append(" extends ");
112            if (genericType.getSuperClass() != null) {
113                code.append(genericType.getSuperClass());
114            } else {
115                code.append("Generic");
116            }
117            code.append(" { \r\n\r\n");
118            code.append("} \r\n");
119            return code.toString();
120        }
121        
122        public String makeInstance(DataTypeDefinition instanceType) {
123            StringBuffer code = new StringBuffer();
124            code.append("package ");
125            code.append(SourceGenerator.getRIMDataTypePackage());
126            code.append("; \r\n\r\n");
127            code.append(SourceGenerator.makeJavaDocComment(instanceType.getDescription(), 0));
128            code.append("public class ");
129            code.append(DataTypeDefinition.mapInstanceName(instanceType.getName()));
130            code.append(" extends ");
131            code.append(DataTypeDefinition.getAssociatedGeneric(instanceType.getName()));
132            code.append(" { \r\n");
133            code.append("} \r\n");
134            return code.toString();        
135        }
136       
137        public String makeAttributeDeclaration(ComponentDefinition component) {
138            StringBuffer code = new StringBuffer();
139            code.append("    public ");
140            code.append(component.getDataType());
141            code.append(" ");
142            code.append(component.getName());
143            code.append("; \r\n");
144            return code.toString();
145        }
146        
147        public String makeGetter(ComponentDefinition component) {
148            StringBuffer code = new StringBuffer();
149            code.append(SourceGenerator.makeJavaDocComment(component.getDescription(), 4));
150            code.append("    public ");
151            code.append(component.getDataType());
152            code.append(" get");
153            code.append(capitalize(component.getName()));
154            code.append("() { \r\n");
155            code.append("        return this.");
156            code.append(component.getName());
157            code.append("; \r\n");
158            code.append("    } \r\n");
159            return code.toString();
160        }
161        
162        public String makeSetter(ComponentDefinition component) {
163            StringBuffer code = new StringBuffer();
164            code.append(SourceGenerator.makeJavaDocComment(component.getDescription(), 4));
165            code.append("    public void set");
166            code.append(capitalize(component.getName()));
167            code.append("(");
168            code.append(component.getDataType());
169            code.append(" ");
170            code.append(component.getName());
171            code.append(") { \r\n");
172            code.append("        this.");
173            code.append(component.getName());
174            code.append(" = ");
175            code.append(component.getName());        
176            code.append("; \r\n");
177            code.append("    } \r\n");        
178            return code.toString();
179        }
180        
181        private static String capitalize(String s) {
182            StringBuffer result = new StringBuffer();
183            if (s != null && s.length() > 0) { 
184                result.append(s.substring(0, 1).toUpperCase());
185                if (s.length() > 1) result.append(s.substring(1, s.length()));
186            }
187            return result.toString();
188        }
189    }