KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > core > util > XForm


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12  *
13  * @created Mar 22, 2005
14  * @author James Dixon
15  *
16  */

17 package org.pentaho.core.util;
18
19 import java.util.HashMap JavaDoc;
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
22 import java.util.Map JavaDoc;
23
24 import org.dom4j.Node;
25 import org.pentaho.core.session.IPentahoSession;
26 import org.pentaho.messages.util.LocaleHelper;
27
28 public class XForm {
29
30     public static final int TYPE_RADIO = 1;
31
32     public static final int TYPE_SELECT = 2;
33
34     public static final int TYPE_LIST = 3;
35
36     public static final int TYPE_LIST_MULTI = 4;
37
38     public static final int TYPE_CHECK_MULTI = 5;
39
40     public static final int TYPE_CHECK_MULTI_SCROLL = 6;
41
42     public static final int TYPE_CHECK_MULTI_SCROLL_2_COLUMN = 7;
43
44     public static final int TYPE_CHECK_MULTI_SCROLL_3_COLUMN = 8;
45
46     public static final int TYPE_CHECK_MULTI_SCROLL_4_COLUMN = 9;
47
48     public static final int TYPE_TEXT = 10;
49
50     public static final int OUTPUT_XFORM = 1;
51
52     public static final int OUTPUT_HTML = 2;
53
54     public static final int OUTPUT_HTML_PAGE = 3;
55
56     public static String JavaDoc transformSnippet(Node xForm, IPentahoSession session) {
57
58         return transformSnippet(xForm.asXML(), null, session);
59
60     }
61
62     public static String JavaDoc transformSnippet(String JavaDoc xFormSnippet, String JavaDoc method, IPentahoSession session) {
63
64         try {
65             StringBuffer JavaDoc xForm = null;
66
67             xForm = new StringBuffer JavaDoc().append("<?xml version=\"1.0\" encoding=\"" + LocaleHelper.getSystemEncoding() + "\" ?>") //$NON-NLS-1$ //$NON-NLS-2$
68
.append("<pho:snippet xmlns:xf=\"http://www.w3.org/2002/xforms\" xmlns:pho=\"http://www.w3.org/1999/homl\">") //$NON-NLS-1$
69
.append(xFormSnippet).append("</pho:snippet>"); //$NON-NLS-1$
70

71             String JavaDoc html = transform(xForm.toString(), method, session);
72
73             // This is required so that we don't get a new form for each control
74
// TODO fix the transform so that this code is not required...
75
int pos1 = html.indexOf("<form name=\"pentaho-form\""); //$NON-NLS-1$
76
int pos2 = html.indexOf("enctype=\"application/x-www-form-urlencoded\">", pos1); //$NON-NLS-1$
77
if (pos2 > 0) {
78                 html = html.substring(pos2 + 44);
79                 pos2 = html.indexOf("</form>"); //$NON-NLS-1$
80
if (pos2 > 0) {
81                     html = html.substring(0, pos2);
82                 }
83             }
84
85             return html;
86         } catch (Exception JavaDoc ex) {
87             // TODO log this
88
}
89
90         return null;
91
92     }
93
94     public static String JavaDoc transform(String JavaDoc xForm, String JavaDoc method, IPentahoSession session) {
95
96         try {
97             HashMap JavaDoc parameters = new HashMap JavaDoc();
98             if (method != null) {
99                 parameters.put("form-method", method); //$NON-NLS-1$
100
} else {
101                 parameters.put("form-method", "GET"); //$NON-NLS-1$ //$NON-NLS-2$
102
}
103             return XmlHelper.transformXml("html4.xsl", null, xForm, null, session).toString(); //$NON-NLS-1$
104
} catch (Exception JavaDoc ex) {
105         }
106
107         return null;
108
109     }
110
111     public static void createXFormHeader(String JavaDoc formName, StringBuffer JavaDoc xformHeader) {
112
113         xformHeader.append("<head>") //$NON-NLS-1$
114
.append("<link rel=\"stylesheet\" type=\"text/css\" HREF=\"/pentaho-style/active/default.css\" />") //$NON-NLS-1$
115
.append("<xf:model id=\"").append(formName).append("\">") //$NON-NLS-1$ //$NON-NLS-2$
116
.append("<xf:instance>"); //$NON-NLS-1$
117

118     }
119
120     public static void completeXFormHeader(String JavaDoc formName, StringBuffer JavaDoc xformHeader) {
121
122         xformHeader.append("</xf:instance>") //$NON-NLS-1$
123
.append("<xf:submission action=\"\" separator=\"&amp;\" method=\"urlencoded-get\" id=\"").append(formName).append("\" />") //$NON-NLS-1$ //$NON-NLS-2$
124
.append("</xf:model>") //$NON-NLS-1$
125
.append("</head>"); //$NON-NLS-1$
126

127     }
128
129     public static void createXFormSubmit(String JavaDoc formName, StringBuffer JavaDoc xformBody, String JavaDoc buttonText) {
130
131         xformBody.append("<xf:submit id=\"").append(formName).append("\" submission=\"").append(formName).append("\">") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
132
.append("<xf:label>").append(buttonText).append("</xf:label>") //$NON-NLS-1$ //$NON-NLS-2$
133
.append("</xf:submit>"); //$NON-NLS-1$
134

135     }
136
137     public static String JavaDoc completeXForm(int outputType, String JavaDoc formName, StringBuffer JavaDoc xformHeader, StringBuffer JavaDoc xformBody, IPentahoSession session) {
138         xformHeader.append("</xf:instance>") //$NON-NLS-1$
139
.append("<xf:submission action=\"\" separator=\"&amp;\" method=\"urlencoded-get\" id=\"").append(formName).append("\" />") //$NON-NLS-1$ //$NON-NLS-2$
140
.append("</xf:model>") //$NON-NLS-1$
141
.append("</head>"); //$NON-NLS-1$
142

143         if (outputType == OUTPUT_XFORM) {
144             xformHeader.append(xformBody);
145             return xformHeader.toString();
146         } else if (outputType == OUTPUT_HTML) {
147             xformHeader.append("<body dir=\"").append(LocaleHelper.getTextDirection()).append("\">"); //$NON-NLS-1$ //$NON-NLS-2$
148
xformHeader.append(xformBody);
149             xformHeader.append("</body>"); //$NON-NLS-1$
150
return transformSnippet(xformHeader.toString(), "GET", session); //$NON-NLS-1$
151
} else if (outputType == OUTPUT_HTML_PAGE) {
152             StringBuffer JavaDoc xForm = new StringBuffer JavaDoc();
153             xForm.append("<html xmlns=\"http://www.w3.org/2002/06/xhtml2\" xmlns:xf=\"http://www.w3.org/2002/xforms\" xmlns:pho=\"http://www.w3.org/2002/xhoml\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"); //$NON-NLS-1$
154
if (xformBody.indexOf("{xform-header}") > -1) { //$NON-NLS-1$
155
String JavaDoc header = xformHeader.toString();
156                 header = header.replaceFirst("<head>", ""); //$NON-NLS-1$ //$NON-NLS-2$
157
header = header.replaceFirst("</head>", ""); //$NON-NLS-1$ //$NON-NLS-2$
158
String JavaDoc tmp = xformBody.toString();
159                 tmp = tmp.replaceFirst("\\{xform-header\\}", header); //$NON-NLS-1$
160
String JavaDoc html = transform(tmp, "GET", session); //$NON-NLS-1$
161
return html;
162             } else {
163                 xForm.append(xformHeader);
164                 xForm.append(xformBody);
165                 xForm.append("</html>"); //$NON-NLS-1$
166

167                 String JavaDoc html = transform(xForm.toString(), "GET", session); //$NON-NLS-1$
168
return "<html><body dir=\"" + LocaleHelper.getTextDirection() + "\">" + html + "</body></html>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
169
}
170
171         } else {
172             return null;
173         }
174
175     }
176
177     public static void createXFormControl(String JavaDoc fieldName, Object JavaDoc defaultValues, String JavaDoc formName, StringBuffer JavaDoc xformHeader, StringBuffer JavaDoc xformBody, boolean visible) {
178
179         // create some xform to represent this parameter...
180

181         if (xformHeader.length() == 0) {
182             // this is the first parameter, need to create the header...
183
createXFormHeader(formName, xformHeader);
184         }
185
186         setDefaultValues(fieldName, defaultValues, xformHeader);
187
188         if (visible) {
189             xformBody.append("<xf:input model=\"").append(formName).append("\" id=\"").append(fieldName).append("\" ref=\"").append(fieldName).append("\"></xf:input>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
190
}
191
192     }
193
194     private static void setDefaultValues(String JavaDoc fieldName, Object JavaDoc defaultValues, StringBuffer JavaDoc xformHeader) {
195
196         xformHeader.append("<data xmlns=\"\">"); //$NON-NLS-1$
197
if (defaultValues instanceof String JavaDoc) {
198             xformHeader.append("<").append(fieldName).append(">").append(XmlHelper.encode((String JavaDoc) defaultValues)).append("</").append(fieldName).append(">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
199
} else if (defaultValues instanceof String JavaDoc[]) {
200             String JavaDoc values[] = (String JavaDoc[]) defaultValues;
201             for (int i = 0; i < values.length; i++) {
202                 xformHeader.append("<").append(fieldName).append(">").append( XmlHelper.encode(values[i])).append("</").append(fieldName).append(">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
203
}
204         } else if (defaultValues instanceof Object JavaDoc[]) {
205             Object JavaDoc values[] = (String JavaDoc[]) defaultValues;
206             for (int i = 0; i < values.length; i++) {
207                 xformHeader.append("<").append(fieldName).append(">").append(XmlHelper.encode(values[i].toString())).append("</").append(fieldName).append(">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
208
}
209         } else if (defaultValues == null) {
210             xformHeader.append("<").append(fieldName).append("></").append(fieldName).append(">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
211
} else {
212             xformHeader.append("<").append(fieldName).append(">").append(XmlHelper.encode(defaultValues.toString())).append("</").append(fieldName).append(">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
213
}
214
215         xformHeader.append("</data>"); //$NON-NLS-1$
216

217     }
218
219     public static void createXFormControl(int type, String JavaDoc fieldName, Object JavaDoc defaultValues, List JavaDoc values, Map JavaDoc displayNames, String JavaDoc formName, StringBuffer JavaDoc xformHeader, StringBuffer JavaDoc xformBody) {
220
221         if (values == null) {
222             return;
223         }
224         // create some xform to represent this parameter...
225

226         if (xformHeader.length() == 0) {
227             // this is the first parameter, need to create the header...
228
createXFormHeader(formName, xformHeader);
229         }
230
231         // if there is only one item in the list make it the default
232
if (values.size() == 1) {
233             defaultValues = XmlHelper.encode(values.get(0).toString());
234         }
235
236         setDefaultValues(fieldName, defaultValues, xformHeader);
237
238         String JavaDoc appearance = ""; //$NON-NLS-1$
239
if (type == TYPE_TEXT ) {
240             xformBody.append("<xf:input model=\"").append(formName).append("\" id=\"").append(fieldName).append("\" ref=\"").append(fieldName).append("\"></xf:input>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
241
}
242         else if (type == TYPE_RADIO || type == TYPE_SELECT || type == TYPE_LIST) {
243             switch (type) {
244             case TYPE_RADIO:
245                 appearance = "appearance=\"full\"";break; //$NON-NLS-1$
246
case TYPE_SELECT:
247                 appearance = "";break; //$NON-NLS-1$
248
case TYPE_LIST:
249                 appearance = "appearance=\"compact\"";break; //$NON-NLS-1$
250
}
251             xformBody.append("<xf:select1 ").append(appearance).append(" model=\"").append(formName).append("\" id=\"").append(fieldName).append("\" ref=\"").append(fieldName).append("\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
252
Iterator JavaDoc listIterator = values.iterator();
253             while (listIterator.hasNext()) {
254                 String JavaDoc value = XmlHelper.encode(listIterator.next().toString());
255                 String JavaDoc displayValue = (displayNames != null) ? XmlHelper.encode((String JavaDoc) displayNames.get(value)) : value;
256                 if (displayValue == null) {
257                     displayValue = value;
258                 }
259                 xformBody.append("<xf:item><xf:label>").append(displayValue).append("</xf:label><xf:value>").append(value).append("</xf:value></xf:item>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
260
}
261             xformBody.append("</xf:select1>"); //$NON-NLS-1$
262
}
263         else if (type == TYPE_LIST_MULTI || type == TYPE_CHECK_MULTI || type == TYPE_CHECK_MULTI_SCROLL || type == TYPE_CHECK_MULTI_SCROLL_2_COLUMN || type == TYPE_CHECK_MULTI_SCROLL_3_COLUMN || type == TYPE_CHECK_MULTI_SCROLL_4_COLUMN) {
264             switch (type) {
265             case TYPE_CHECK_MULTI:
266                 appearance = "appearance=\"full\"";break; //$NON-NLS-1$
267
case TYPE_LIST_MULTI:
268                 appearance = "appearance=\"compact\"";break; //$NON-NLS-1$
269
case TYPE_CHECK_MULTI_SCROLL:
270                 appearance = "appearance=\"full-scroll\" columns=\"1\"";break; //$NON-NLS-1$
271
case TYPE_CHECK_MULTI_SCROLL_2_COLUMN:
272                 appearance = "appearance=\"full-scroll\" columns=\"2\"";break; //$NON-NLS-1$
273
case TYPE_CHECK_MULTI_SCROLL_3_COLUMN:
274                 appearance = "appearance=\"full-scroll\" columns=\"3\"";break; //$NON-NLS-1$
275
case TYPE_CHECK_MULTI_SCROLL_4_COLUMN:
276                 appearance = "appearance=\"full-scroll\" columns=\"4\"";break; //$NON-NLS-1$
277
}
278             xformBody.append("<xf:select ").append(appearance).append(" model=\"").append(formName).append("\" id=\"").append(fieldName).append("\" ref=\"").append(fieldName).append("\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
279
Iterator JavaDoc listIterator = values.iterator();
280             while (listIterator.hasNext()) {
281                 String JavaDoc value = XmlHelper.encode(listIterator.next().toString());
282                 String JavaDoc displayValue = (displayNames != null) ? XmlHelper.encode((String JavaDoc) displayNames.get(value)) : value;
283                 if (displayValue == null) {
284                     displayValue = value;
285                 }
286                 xformBody.append("<xf:item><xf:label>").append(displayValue).append("</xf:label><xf:value>").append(value).append("</xf:value></xf:item>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
287
}
288             xformBody.append("</xf:select>"); //$NON-NLS-1$
289
}
290
291     }
292
293 }
294
Popular Tags