KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > www > WUtil


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("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.compiere.org/license.html
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
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.www;
15
16 import javax.servlet.*;
17 import javax.servlet.http.*;
18 import java.util.*;
19 import java.sql.*;
20 import java.io.*;
21 import javax.mail.internet.*;
22
23 import org.apache.ecs.*;
24 import org.apache.ecs.xhtml.*;
25 import org.apache.log4j.Logger;
26
27 import org.compiere.wstore.*;
28 import org.compiere.util.*;
29 import org.compiere.model.*;
30
31 /**
32  * Servlet Utilities
33  *
34  * @author Jorg Janke
35  * @version $Id: WUtil.java,v 1.12 2003/07/19 05:21:44 jjanke Exp $
36  */

37 public final class WUtil
38 {
39     /** Logging */
40     private static Logger s_log = Logger.getLogger("org.compiere.www.WUtil");
41
42     /**
43      * Create Timeout Message
44      *
45      * @param request request
46      * @param response response
47      * @param servlet servlet
48      * @param ctx context
49      * @param message - optional message
50      * @throws ServletException
51      * @throws IOException
52      */

53     public static void createTimeoutPage (HttpServletRequest request, HttpServletResponse response,
54         HttpServlet servlet, Properties ctx, String JavaDoc message) throws ServletException, IOException
55     {
56         s_log.info("createTimeoutPage - " + message);
57         String JavaDoc windowTitle = "Timeout";
58         if (ctx != null)
59             windowTitle = Msg.getMsg(ctx, "Timeout");
60
61         WDoc doc = WDoc.create (windowTitle);
62
63         // Body
64
body body = doc.getBody();
65         // optional message
66
if (message != null && message.length() > 0)
67             body.addElement(new p(message));
68
69         // login button
70
body.addElement(getLoginButton(ctx));
71
72         //
73
body.addElement(new hr());
74         body.addElement(new small(servlet.getClass().getName()));
75         // fini
76
createResponse (request, response, servlet, null, doc, false);
77     } // createTimeoutPage
78

79     /**
80      * Create Error Message
81      *
82      * @param request request
83      * @param response response
84      * @param servlet servlet
85      * @param ctx context
86      * @param message message
87      * @throws ServletException
88      * @throws IOException
89      */

90     public static void createErrorPage (HttpServletRequest request, HttpServletResponse response,
91         HttpServlet servlet, Properties ctx, String JavaDoc message) throws ServletException, IOException
92     {
93         s_log.info("createErrorPage - " + message);
94         String JavaDoc windowTitle = "Error";
95         if (ctx != null)
96             windowTitle = Msg.getMsg(ctx, "Error"); // JUST TO GET LANGUAGE ??
97
if (message != null)
98             windowTitle += ": " + message;
99
100         WDoc doc = WDoc.create (windowTitle);
101
102         // Body
103
body b = doc.getBody();
104
105         b.addElement(new p(servlet.getServletName(), AlignType.center));
106         b.addElement(new br());
107
108         // fini
109
createResponse (request, response, servlet, null, doc, true);
110     } // createErrorPage
111

112     /**
113      * Create Exit Page "Log-off".
114      * <p>
115      * - End Session
116      * - Go to start page (e.g. /compiere/index.html)
117      *
118      * @param request request
119      * @param response response
120      * @param servlet servlet
121      * @param ctx context
122      * @param AD_Message messahe
123      * @throws ServletException
124      * @throws IOException
125      */

126     public static void createLoginPage (HttpServletRequest request, HttpServletResponse response,
127         HttpServlet servlet, Properties ctx, String JavaDoc AD_Message) throws ServletException, IOException
128     {
129         request.getSession().invalidate();
130         String JavaDoc url = WEnv.getBaseDirectory("index.html");
131         //
132
WDoc doc = null;
133         if (ctx != null && AD_Message != null && !AD_Message.equals(""))
134             doc = WDoc.create (Msg.getMsg(ctx, AD_Message));
135         else if (AD_Message != null)
136             doc = WDoc.create (AD_Message);
137         else
138             doc = WDoc.create (false);
139         script script = new script("window.top.location.replace('" + url + "');");
140         doc.getBody().addElement(script);
141         //
142
createResponse (request, response, servlet, null, doc, false);
143     } // createLoginPage
144

145     /**
146      * Create Login Button - replace Window
147      *
148      * @param ctx context
149      * @return Button
150      */

151     public static button getLoginButton(Properties ctx)
152     {
153         String JavaDoc text = Msg.getMsg(ctx, "Login");
154         button button = new button();
155         button.setType("button").setName("Login").addElement(text);
156         StringBuffer JavaDoc cmd = new StringBuffer JavaDoc ("window.top.location.replace('");
157         cmd.append(WEnv.getBaseDirectory("index.html"));
158         cmd.append("');");
159         button.setOnClick(cmd.toString());
160         return button;
161     } // getLoginButton
162

163     /*************************************************************************/
164
165     /**
166      * Get Cookie Properties
167      *
168      * @param request request
169      * @return Properties
170      */

171     public static Properties getCookieProprties(HttpServletRequest request)
172     {
173         // Get Properties
174
Cookie[] cookies = request.getCookies();
175         if (cookies != null)
176         {
177             for (int i = 0; i < cookies.length; i++)
178             {
179                 if (cookies[i].getName().equals(WEnv.COOKIE_INFO))
180                     return propertiesDecode(cookies[i].getValue());
181             }
182         }
183         return new Properties();
184     } // getProperties
185

186     /**
187      * Get numeric Parameter - 0 if not defined
188      *
189      * @param request request
190      * @param parameter parameter
191      * @return int result or 0
192      */

193     public static int getParameterAsInt(HttpServletRequest request, String JavaDoc parameter)
194     {
195         if (request == null || parameter == null)
196             return 0;
197         String JavaDoc data = request.getParameter(parameter);
198         if (data == null || data.length() == 0)
199             return 0;
200         try
201         {
202             return Integer.parseInt(data);
203         }
204         catch (Exception JavaDoc e)
205         {
206             s_log.debug("getParameterAsInt - " + parameter + "=" + data, e);
207         }
208         return 0;
209     } // getParameter
210

211     /*************************************************************************/
212
213     /**
214      * Create Standard Response Header with optional Cookie and print document.
215      * D:\j2sdk1.4.0\docs\guide\intl\encoding.doc.html
216      *
217      * @param request request
218      * @param response response
219      * @param servlet servlet
220      * @param cookieProperties cookie properties
221      * @param doc doc
222      * @param debug debug
223      * @throws IOException
224      */

225     public static void createResponse (HttpServletRequest request, HttpServletResponse response,
226         HttpServlet servlet, Properties cookieProperties, WDoc doc, boolean debug) throws IOException
227     {
228         response.setHeader("Cache-Control", "no-cache");
229     // response.setContentType("text/html; charset=ISO-8859-1"); // default
230
response.setContentType("text/html; charset=UTF-8");
231
232         //
233
// Update Cookie - overwrite
234
if (cookieProperties != null)
235         {
236             Cookie cookie = new Cookie (WEnv.COOKIE_INFO, propertiesEncode(cookieProperties));
237             cookie.setComment("(c) ComPiere, Inc - Jorg Janke");
238             cookie.setSecure(false);
239             cookie.setPath("/");
240             if (cookieProperties.size() == 0)
241                 cookie.setMaxAge(0); // delete cookie
242
else
243                 cookie.setMaxAge(2592000); // 30 days in seconds 60*60*24*30
244
response.addCookie(cookie);
245         }
246         // add diagnostics
247
if (debug && WEnv.DEBUG)
248         {
249         // doc.output(System.out);
250
WEnv.addFooter(request, response, servlet, doc.getBody());
251         // doc.output(System.out);
252
}
253     // String content = doc.toString();
254
// response.setContentLength(content.length()); // causes problems at the end of the output
255

256         // print document
257
PrintWriter out = response.getWriter(); // with character encoding support
258
doc.output(out);
259         out.flush();
260         if (out.checkError())
261             s_log.error("createResponse - error writing");
262         // binary output (is faster but does not do character set conversion)
263
// OutputStream out = response.getOutputStream();
264
// byte[] data = doc.toString().getBytes();
265
// response.setContentLength(data.length);
266
// out.write(doc.toString().getBytes());
267
//
268
out.close();
269     } // createResponse
270

271     /*************************************************************************/
272
273     /**
274      * Create Java Script to clear Target frame and display message
275      *
276      * @param target target
277      * @return Clear Frame Script
278      */

279     public static script getClearFrame (String JavaDoc target)
280     {
281         StringBuffer JavaDoc cmd = new StringBuffer JavaDoc();
282         cmd.append("var d = parent.").append(target).append(".document;\n");
283         cmd.append("d.open();\n");
284         cmd.append("d.write('<link HREF=\"").append(WEnv.getStylesheetURL()).append("\" rel=\"stylesheet\">');\n");
285         cmd.append("d.close();");
286         //
287
return new script(cmd.toString());
288     } // getClearFrame
289

290
291     /**
292      * Return a link and script with new location.
293      * Wait 2 seconds
294      * @param url forward url
295      * @return html
296      */

297     public static HtmlCode getForward (String JavaDoc url)
298     {
299         HtmlCode retValue = new HtmlCode();
300         // Link
301
a a = new a(url);
302         a.addElement(url);
303         retValue.addElement(a);
304         // Java Script - document.location - 2.5 sec delay
305
script script = new script("setTimeout(\"window.top.location.replace('" + url + "')\",2500);");
306         retValue.addElement(script);
307         //
308
return retValue;
309     } // getForward
310

311     /**
312      * Create Forward Page
313      * @param response response
314      * @param title page title
315      * @param forwardURL url
316      * @throws ServletException
317      * @throws IOException
318      */

319     public static void createForwardPage (HttpServletResponse response,
320         String JavaDoc title, String JavaDoc forwardURL) throws ServletException, IOException
321     {
322         response.setContentType("text/html; charset=UTF-8");
323         WDoc doc = WDoc.create(title);
324         body b = doc.getBody();
325         b.addElement(getForward(forwardURL));
326         PrintWriter out = response.getWriter();
327         doc.output(out);
328         out.flush();
329         if (out.checkError())
330             s_log.error("createForwardPage - error writing");
331         out.close();
332         s_log.debug("createForwardPage - " + forwardURL + " - " + title);
333     } // createForwardPage
334

335
336     /**
337      * Does Test exist
338      * @param test string
339      * @return true if String with data
340      */

341     public static boolean exists (String JavaDoc test)
342     {
343         if (test == null)
344             return false;
345         return test.length() > 0;
346     } // exists
347

348     /**
349      * Does Parameter exist
350      * @param request request
351      * @param parameter string
352      * @return true if String with data
353      */

354     public static boolean exists (HttpServletRequest request, String JavaDoc parameter)
355     {
356         if (request == null || parameter == null)
357             return false;
358         return exists (request.getParameter(parameter));
359     } // exists
360

361
362     /**
363      * Is EMail address valid
364      * @param email mail address
365      * @return true if valid
366      */

367     public static boolean isEmailValid (String JavaDoc email)
368     {
369         if (email == null || email.length () == 0)
370             return false;
371         try
372         {
373             InternetAddress ia = new InternetAddress (email, true);
374             return true;
375         }
376         catch (AddressException ex)
377         {
378             s_log.warn ("isEmailValid - " + email + " - "
379                 + ex.getLocalizedMessage ());
380         }
381         return false;
382     } // isEmailValid
383

384
385     /*************************************************************************/
386
387     /**
388      * Decode Properties into String (URL encoded)
389      *
390      * @param pp properties
391      * @return Encoded String
392      */

393     public static String JavaDoc propertiesEncode (Properties pp)
394     {
395         ByteArrayOutputStream bos = new ByteArrayOutputStream();
396         try
397         {
398             pp.store(bos, "Compiere"); // Header
399
}
400         catch (IOException e)
401         {
402             s_log.error("propertiesEncode-store", e);
403         }
404         String JavaDoc result = new String JavaDoc (bos.toByteArray());
405     // System.out.println("String=" + result);
406
String JavaDoc enc = "UTF-8";
407         try
408         {
409             result = java.net.URLEncoder.encode(result, enc);
410         }
411         catch (UnsupportedEncodingException e)
412         {
413             s_log.error("propertiesEncode-encode-" + enc, e);
414             enc = System.getProperty("file.encoding"); // Windows default is Cp1252
415
try
416             {
417                 result = java.net.URLEncoder.encode(result, enc);
418             }
419             catch (Exception JavaDoc ex)
420             {
421                 s_log.error("propertiesEncode-encode", ex);
422             }
423         }
424     // System.out.println("String-Encoded=" + result);
425
return result;
426     } // propertiesEncode
427

428     /**
429      * Decode data String (URL encoded) into Properties
430      *
431      * @param data data
432      * @return Properties
433      */

434     public static Properties propertiesDecode (String JavaDoc data)
435     {
436         String JavaDoc result = null;
437     // System.out.println("String=" + data);
438
String JavaDoc enc = "UTF-8";
439         try
440         {
441             result = java.net.URLDecoder.decode(data, enc);
442         }
443         catch (UnsupportedEncodingException e)
444         {
445             s_log.error("propertiesDecode-decode-" + enc, e);
446             enc = System.getProperty("file.encoding"); // Windows default is Cp1252
447
try
448             {
449                 result = java.net.URLEncoder.encode(data, enc);
450             }
451             catch (Exception JavaDoc ex)
452             {
453                 s_log.error("propertiesDecode-decode", ex);
454             }
455         }
456     // System.out.println("String-Decoded=" + result);
457

458         ByteArrayInputStream bis = new ByteArrayInputStream(result.getBytes());
459         Properties pp = new Properties();
460         try
461         {
462             pp.load(bis);
463         }
464         catch (IOException e)
465         {
466             s_log.error("propertiesDecode-load", e);
467         }
468         return pp;
469     } // propertiesDecode
470

471     /*************************************************************************/
472
473     /**
474      * Convert Array of NamePair to HTTP Option Array.
475      * <p>
476      * If the ArrayList does not contain NamePairs, the String value is used
477      * @see org.compiere.util.NamePair
478      * @param list ArrayList containing NamePair values
479      * @param default_ID Sets the default if the key/ID value is found.
480      * If the value is null or empty, the first value is selected
481      * @return Option Array
482      */

483     public static option[] convertToOption (NamePair[] list, String JavaDoc default_ID)
484     {
485         int size = list.length;
486         option[] retValue = new option[size];
487         for (int i = 0; i < size; i++)
488         {
489             boolean selected = false;
490             // select first entry
491
if (i == 0 && (default_ID == null || default_ID.length() == 0))
492                 selected = true;
493
494             // Create option
495
retValue[i] = new option(list[i].getID()).addElement(list[i].getName());
496
497             // Select if ID/Key is same as default ID
498
if (default_ID != null && default_ID.equals(list[i].getID()))
499                 selected = true;
500             retValue[i].setSelected(selected);
501         }
502         return retValue;
503     } // convertToOption
504

505     /**
506      * Create label/field table row
507      *
508      * @param line - null for new line (table row)
509      * @param FORMNAME form name
510      * @param PARAMETER parameter name
511      * @param labelText label
512      * @param inputType HTML input type
513      * @param value data value
514      * @param sizeDisplay display size
515      * @param size data size
516      * @param longField field spanning two columns
517      * @param mandatory mark as mandatory
518      * @param onChange onChange call
519      * @param script script
520      * @return tr table row
521      */

522     static public tr createField (tr line, String JavaDoc FORMNAME, String JavaDoc PARAMETER,
523         String JavaDoc labelText, String JavaDoc inputType, Object JavaDoc value,
524         int sizeDisplay, int size, boolean longField, boolean mandatory, String JavaDoc onChange, StringBuffer JavaDoc script)
525     {
526         if (line == null)
527             line = new tr();
528         String JavaDoc labelInfo = labelText;
529         if (mandatory)
530         {
531             labelInfo += "&nbsp;<font color=\"red\">*</font>";
532             String JavaDoc fName = "document." + FORMNAME + "." + PARAMETER;
533             script.append(fName).append(".required=true; ");
534         }
535
536         label llabel = new label().setFor(PARAMETER).addElement(labelInfo);
537         llabel.setID("ID_" + PARAMETER + "_Label");
538     // label.setTitle(description);
539
line.addElement(new td().addElement(llabel).setAlign(AlignType.right));
540         input iinput = new input(inputType, PARAMETER, value == null ? "" : value.toString());
541         iinput.setSize(sizeDisplay).setMaxlength(size);
542         iinput.setID("ID_" + PARAMETER);
543         if (onChange != null && onChange.length() > 0)
544             iinput.setOnChange(onChange);
545         iinput.setTitle(labelText);
546         td field = new td().addElement(iinput).setAlign(AlignType.LEFT);
547         if (longField)
548             field.setColSpan(3);
549         line.addElement(field);
550         return line;
551     } // addField
552

553 } // WUtil
554
Popular Tags