1 package org.codehaus.modello.plugins.xml;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import java.util.List;
26 import java.util.Properties;
27
28 import org.codehaus.modello.ModelloException;
29 import org.codehaus.modello.model.Model;
30 import org.codehaus.modello.model.ModelClass;
31 import org.codehaus.modello.model.ModelDefault;
32 import org.codehaus.modello.model.ModelField;
33 import org.codehaus.modello.model.Version;
34 import org.codehaus.modello.plugin.java.AbstractJavaModelloGenerator;
35 import org.codehaus.modello.plugin.java.javasource.JSourceCode;
36 import org.codehaus.modello.plugins.xml.metadata.XmlAssociationMetadata;
37 import org.codehaus.modello.plugins.xml.metadata.XmlFieldMetadata;
38
39
40
41
42
43
44 public abstract class AbstractXmlJavaGenerator extends AbstractJavaModelloGenerator {
45 protected boolean strictXmlAttributes;
46
47 protected void initialize(Model model, Properties parameters) throws ModelloException {
48 super.initialize(model, parameters);
49
50 strictXmlAttributes =
51 model.getDefault(ModelDefault.STRICT_XML_ATTRIBUTES).getBoolean();
52 }
53
54 protected String getFileName(String suffix) {
55 String name = getModel().getName();
56
57 return name + suffix;
58 }
59
60
61
62
63
64
65
66 protected String resolveTagName(ModelClass modelClass) {
67 return XmlModelHelpers.resolveTagName(modelClass);
68 }
69
70
71
72
73
74
75
76
77 protected String resolveTagName(ModelField modelField, XmlFieldMetadata xmlFieldMetadata) {
78 return XmlModelHelpers.resolveTagName(modelField, xmlFieldMetadata);
79 }
80
81
82
83
84
85
86
87
88 protected String resolveTagName(String fieldTagName, XmlAssociationMetadata xmlAssociationMetadata) {
89 return XmlModelHelpers.resolveTagName(fieldTagName, xmlAssociationMetadata);
90 }
91
92
93
94
95
96
97
98 protected ModelField getContentField(List<ModelField> modelFields) {
99 return XmlModelHelpers.getContentField(modelFields);
100 }
101
102
103
104
105
106
107
108
109 protected List<ModelField> getFieldsForXml(ModelClass modelClass, Version version) {
110 return XmlModelHelpers.getFieldsForXml(modelClass, version);
111 }
112
113 protected String getValue(String type, String initialValue, XmlFieldMetadata xmlFieldMetadata) {
114 String textValue = initialValue;
115
116 if ("Date".equals(type)) {
117 String dateFormat = xmlFieldMetadata.getFormat();
118 if (xmlFieldMetadata.getFormat() == null) {
119 dateFormat = DEFAULT_DATE_FORMAT;
120 }
121
122 if ("long".equals(dateFormat)) {
123 textValue = "String.valueOf( " + textValue + ".getTime() )";
124 } else {
125 textValue = "new java.text.SimpleDateFormat( \"" + dateFormat + "\", java.util.Locale.US ).format( "
126 + textValue + " )";
127 }
128 } else if (!"String".equals(type)) {
129 textValue = "String.valueOf( " + textValue + " )";
130 }
131
132 return textValue;
133 }
134
135 protected void writeDateParsingHelper(JSourceCode sc, String exception) {
136 sc.add("if ( s != null )");
137
138 sc.add("{");
139 sc.indent();
140
141 sc.add("String effectiveDateFormat = dateFormat;");
142
143 sc.add("if ( dateFormat == null )");
144
145 sc.add("{");
146 sc.addIndented("effectiveDateFormat = \"" + DEFAULT_DATE_FORMAT + "\";");
147 sc.add("}");
148
149 sc.add("if ( \"long\".equals( effectiveDateFormat ) )");
150
151
152 sc.add("{");
153 sc.indent();
154
155 sc.add("try");
156
157 sc.add("{");
158 sc.addIndented("return new java.util.Date( Long.parseLong( s ) );");
159 sc.add("}");
160
161 sc.add("catch ( NumberFormatException e )");
162
163 sc.add("{");
164 sc.addIndented("throw " + exception + ";");
165 sc.add("}");
166
167 sc.unindent();
168 sc.add("}");
169
170 sc.add("else");
171
172
173 sc.add("{");
174 sc.indent();
175
176 sc.add("try");
177 sc.add("{");
178 sc.indent();
179
180 sc.add("DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US );");
181 sc.add("return dateParser.parse( s );");
182
183 sc.unindent();
184 sc.add("}");
185
186 sc.add("catch ( java.text.ParseException e )");
187 sc.add("{");
188 sc.addIndented("throw " + exception + ";");
189 sc.add("}");
190
191 sc.unindent();
192 sc.add("}");
193
194 sc.unindent();
195 sc.add("}");
196
197 sc.add("return null;");
198 }
199 }