KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > finalist > jaggenerator > validation > StrutsValidation


1 /* Copyright (C) 2003 Finalist IT Group
2  *
3  * This file is part of JAG - the Java J2EE Application Generator
4  *
5  * JAG is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * JAG is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  * You should have received a copy of the GNU General Public License
14  * along with JAG; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  */

17
18 package com.finalist.jaggenerator.validation;
19
20 import java.util.ArrayList JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.StringTokenizer JavaDoc;
24
25 /**
26  * Represents Struts 1.1 validations for a particular database column, ultimately destined to be
27  * included in the 'validation.xml' declarative validations configuration file.
28  * <p>
29  * This class represents a Struts validation as two parts: a 'depends' list and an XML fragment:
30  * the 'depends list' is a comma-seperated list of validation methods (e.g. 'integer', 'date', 'mask'),
31  * and the XML fragment contains any parameters needed by those validation methods.
32  *
33  * @author Michael O'Connor - Finalist IT Group
34  */

35 public class StrutsValidation {
36
37    private String JavaDoc dependsList = "";
38    private String JavaDoc xml = "";
39
40
41    /**
42     * Creates a StrutsValidation without generating the validations.
43     */

44    public StrutsValidation() {
45    }
46
47    /**
48     *
49     * @param sqlType the column type (SQL data type, e.g. NUMBER(12)).
50     * @param jdbcType the JDBC data type.
51     * @param required whether or not the field is mandatory.
52     */

53    public StrutsValidation(String JavaDoc sqlType, String JavaDoc jdbcType, boolean required) {
54       ArrayList JavaDoc validationsList = new ArrayList JavaDoc(3);
55       StringBuffer JavaDoc validations = new StringBuffer JavaDoc();
56       List JavaDoc parameters = getParams(sqlType);
57
58       if (required) {
59          validationsList.add("required");
60       }
61       if (sqlType.startsWith("NUMBER") || sqlType.equals("MEDIUMINT")) {
62          if ("INTEGER".equals(jdbcType)) {
63             validationsList.add("integer");
64          } else {
65             validationsList.add("float");
66
67             if (parameters.size() == 2) {
68                validationsList.add("decimal");
69                generateDecimalMaskXML(Integer.parseInt((String JavaDoc) parameters.get(0)),
70                      Integer.parseInt((String JavaDoc) parameters.get(1)));
71             }
72             else if (!parameters.isEmpty()) {
73                validationsList.add("maxlength");
74                generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
75             }
76          }
77       }
78       if (sqlType.startsWith("INT")) {
79          validationsList.add("integer");
80          if (!parameters.isEmpty()) {
81                validationsList.add("maxlength");
82                generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
83          }
84       }
85       if (sqlType.indexOf("CHAR") != -1 && !parameters.isEmpty()) {
86          validationsList.add("maxlength");
87          generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
88       }
89       if (sqlType.indexOf("DATE") != -1 ) {
90          validationsList.add("date");
91          generateDateXML();
92       }
93       if (sqlType.indexOf("BIGINT") != -1) {
94          validationsList.add("long");
95          if (!parameters.isEmpty()) {
96                validationsList.add("maxlength");
97                generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
98          }
99       }
100       if (sqlType.indexOf("SMALLINT") != -1) {
101          validationsList.add("short");
102          if (!parameters.isEmpty()) {
103                validationsList.add("maxlength");
104                generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
105          }
106       }
107       if (sqlType.indexOf("TINYINT") != -1) {
108          validationsList.add("byte");
109          if (!parameters.isEmpty()) {
110                validationsList.add("maxlength");
111                generateMaxlengthXML(Integer.parseInt((String JavaDoc) parameters.get(0)));
112          }
113       }
114       if (sqlType.indexOf("FLOAT") != -1) {
115          validationsList.add("float");
116       }
117
118       Iterator JavaDoc v = validationsList.iterator();
119       while (v.hasNext()) {
120          String JavaDoc item = (String JavaDoc) v.next();
121          validations.append(item);
122          if (v.hasNext()) {
123             validations.append(", ");
124          }
125       }
126       dependsList = validations.toString();
127
128    }
129
130
131    /** @see {@link #getDependsList()}. */
132    public void setDependsList(String JavaDoc dependsList) {
133       this.dependsList = dependsList;
134    }
135
136    /** @see {@link #getXml()}. */
137    public void setXml(String JavaDoc xml) {
138       this.xml = xml;
139    }
140
141    /**
142     * Gets the comma-seperated list of Struts validators to be applied to this field.
143     * @return the dependsList.
144     */

145    public String JavaDoc getDependsList() {
146       return dependsList;
147    }
148
149    /**
150     * Gets the corresponding XML fragment that complements the dependsList.
151     * @return the xml fragment.
152     */

153    public String JavaDoc getXml() {
154       return xml;
155    }
156
157
158    private void generateDateXML() {
159       StringBuffer JavaDoc temp = new StringBuffer JavaDoc(xml);
160       temp.append("<var>\n");
161       temp.append(" <var-name>datePattern</var-name>\n");
162       temp.append(" <var-value>${date_format}</var-value>\n");
163       temp.append("</var>");
164       setXml(temp.toString());
165    }
166
167    private void generateTimestampXML() {
168       StringBuffer JavaDoc temp = new StringBuffer JavaDoc(xml);
169       temp.append("<var>\n");
170       temp.append(" <var-name>datePattern</var-name>\n");
171       temp.append(" <var-value>${timestamp_format}</var-value>\n");
172       temp.append("</var>");
173       setXml(temp.toString()); }
174
175    private void generateMaxlengthXML(int maxLength) {
176       StringBuffer JavaDoc temp = new StringBuffer JavaDoc(xml);
177       temp.append("<arg1 key=\"${var:maxlength}\" name=\"maxlength\" resource=\"false\"/>\n");
178       temp.append("<var>\n");
179       temp.append(" <var-name>maxlength</var-name>\n");
180       temp.append(" <var-value>").append(maxLength).append("</var-value>\n");
181       temp.append("</var>");
182       setXml(temp.toString());
183    }
184
185    private void generateDecimalMaskXML(int length, int precision) {
186       StringBuffer JavaDoc temp = new StringBuffer JavaDoc(xml);
187       temp.append("<arg1 key=\"${var:decimalPrecision}\" name=\"decimal\" resource=\"false\"/>");
188       temp.append("<arg2 key=\"${var:decimalLength}\" name=\"decimal\" resource=\"false\"/>");
189       temp.append("<var>\n");
190       temp.append(" <var-name>decimalLength</var-name>\n");
191       temp.append(" <var-value>").append(length).append("</var-value>\n");
192       temp.append("</var>");
193       temp.append("<var>\n");
194       temp.append(" <var-name>decimalPrecision</var-name>\n");
195       temp.append(" <var-value>").append(precision).append("</var-value>\n");
196       temp.append("</var>");
197       setXml(temp.toString());
198    }
199
200    public static List JavaDoc getParams(String JavaDoc sqlType) {
201       String JavaDoc trimmed = sqlType.trim();
202       ArrayList JavaDoc params = new ArrayList JavaDoc();
203       int openBracketPos = trimmed.indexOf('(');
204       int closeBracketPos = trimmed.indexOf(')');
205       if (openBracketPos != -1 && closeBracketPos == (trimmed.length() - 1)) {
206          StringTokenizer JavaDoc tokie = new StringTokenizer JavaDoc(trimmed.substring(openBracketPos + 1, closeBracketPos), ",");
207          while (tokie.hasMoreTokens()) {
208             params.add(tokie.nextToken().trim());
209          }
210       }
211
212       return params;
213    }
214
215 }
216
Popular Tags