📄 webutil.java
字号:
cookie.setComment("(c) ComPiere, Inc - Jorg Janke");
cookie.setSecure(false);
cookie.setPath("/");
if (cookieProperties.size() == 0)
cookie.setMaxAge(0); // delete cookie
else
cookie.setMaxAge(2592000); // 30 days in seconds 60*60*24*30
response.addCookie(cookie);
}
// add diagnostics
if (debug && WebEnv.DEBUG)
{
// doc.output(System.out);
WebEnv.addFooter(request, response, servlet, doc.getBody());
// doc.output(System.out);
}
// String content = doc.toString();
// response.setContentLength(content.length()); // causes problems at the end of the output
// print document
PrintWriter out = response.getWriter(); // with character encoding support
doc.output(out);
out.flush();
if (out.checkError())
log.log(Level.SEVERE, "error writing");
// binary output (is faster but does not do character set conversion)
// OutputStream out = response.getOutputStream();
// byte[] data = doc.toString().getBytes();
// response.setContentLength(data.length);
// out.write(doc.toString().getBytes());
//
out.close();
} // createResponse
/**************************************************************************
* Create Java Script to clear Target frame
*
* @param targetFrame target frame
* @return Clear Frame Script
*/
public static script getClearFrame (String targetFrame)
{
StringBuffer cmd = new StringBuffer();
cmd.append("<!-- clear frame\n")
.append("var d = parent.").append(targetFrame).append(".document;\n")
.append("d.open();\n")
.append("d.write('<link href=\"").append(WebEnv.getStylesheetURL()).append("\" rel=\"stylesheet\">');\n")
.append("d.close();\n")
.append("// -- clear frame -->");
//
return new script(cmd.toString());
} // getClearFrame
/**
* Return a link and script with new location.
* @param url forward url
* @param delaySec delay in seconds (default 3)
* @return html
*/
public static HtmlCode getForward (String url, int delaySec)
{
if (delaySec <= 0)
delaySec = 3;
HtmlCode retValue = new HtmlCode();
// Link
a a = new a(url);
a.addElement(url);
retValue.addElement(a);
// Java Script - document.location -
script script = new script("setTimeout(\"window.top.location.replace('" + url
+ "')\"," + (delaySec+1000) + ");");
retValue.addElement(script);
//
return retValue;
} // getForward
/**
* Create Forward Page
* @param response response
* @param title page title
* @param forwardURL url
* @param delaySec delay in seconds (default 3)
* @throws ServletException
* @throws IOException
*/
public static void createForwardPage (HttpServletResponse response,
String title, String forwardURL, int delaySec) throws ServletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
WebDoc doc = WebDoc.create(title);
body b = doc.getBody();
b.addElement(getForward(forwardURL, delaySec));
PrintWriter out = response.getWriter();
doc.output(out);
out.flush();
if (out.checkError())
log.log(Level.SEVERE, "Error writing");
out.close();
log.fine(forwardURL + " - " + title);
} // createForwardPage
/**
* Does Test exist
* @param test string
* @return true if String with data
*/
public static boolean exists (String test)
{
if (test == null)
return false;
return test.length() > 0;
} // exists
/**
* Does Parameter exist
* @param request request
* @param parameter string
* @return true if String with data
*/
public static boolean exists (HttpServletRequest request, String parameter)
{
if (request == null || parameter == null)
return false;
try
{
String enc = request.getCharacterEncoding();
if (enc == null)
request.setCharacterEncoding(WebEnv.ENCODING);
}
catch (Exception e)
{
log.log(Level.SEVERE, "Set CharacterEncoding=" + WebEnv.ENCODING, e);
}
return exists (request.getParameter(parameter));
} // exists
/**
* Is EMail address valid
* @param email mail address
* @return true if valid
*/
public static boolean isEmailValid (String email)
{
if (email == null || email.length () == 0)
return false;
try
{
InternetAddress ia = new InternetAddress (email, true);
return true;
}
catch (AddressException ex)
{
log.warning (email + " - "
+ ex.getLocalizedMessage ());
}
return false;
} // isEmailValid
/**************************************************************************
* Decode Properties into String (URL encoded)
*
* @param pp properties
* @return Encoded String
*/
public static String propertiesEncode (Properties pp)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
pp.store(bos, "Compiere"); // Header
}
catch (IOException e)
{
log.log(Level.SEVERE, "store", e);
}
String result = new String (bos.toByteArray());
// System.out.println("String=" + result);
try
{
result = URLEncoder.encode(result, WebEnv.ENCODING);
}
catch (UnsupportedEncodingException e)
{
log.log(Level.SEVERE, "encode" + WebEnv.ENCODING, e);
String enc = System.getProperty("file.encoding"); // Windows default is Cp1252
try
{
result = URLEncoder.encode(result, enc);
log.info("encode: " + enc);
}
catch (Exception ex)
{
log.log(Level.SEVERE, "encode", ex);
}
}
// System.out.println("String-Encoded=" + result);
return result;
} // propertiesEncode
/**
* Decode data String (URL encoded) into Properties
*
* @param data data
* @return Properties
*/
public static Properties propertiesDecode (String data)
{
String result = null;
// System.out.println("String=" + data);
try
{
result = URLDecoder.decode(data, WebEnv.ENCODING);
}
catch (UnsupportedEncodingException e)
{
log.log(Level.SEVERE, "decode" + WebEnv.ENCODING, e);
String enc = System.getProperty("file.encoding"); // Windows default is Cp1252
try
{
result = URLEncoder.encode(data, enc);
log.log(Level.SEVERE, "decode: " + enc);
}
catch (Exception ex)
{
log.log(Level.SEVERE, "decode", ex);
}
}
// System.out.println("String-Decoded=" + result);
ByteArrayInputStream bis = new ByteArrayInputStream(result.getBytes());
Properties pp = new Properties();
try
{
pp.load(bis);
}
catch (IOException e)
{
log.log(Level.SEVERE, "load", e);
}
return pp;
} // propertiesDecode
/**************************************************************************
* Convert Array of NamePair to HTTP Option Array.
* <p>
* If the ArrayList does not contain NamePairs, the String value is used
* @see org.compiere.util.NamePair
* @param list ArrayList containing NamePair values
* @param default_ID Sets the default if the key/ID value is found.
* If the value is null or empty, the first value is selected
* @return Option Array
*/
public static option[] convertToOption (NamePair[] list, String default_ID)
{
int size = list.length;
option[] retValue = new option[size];
for (int i = 0; i < size; i++)
{
boolean selected = false;
// select first entry
if (i == 0 && (default_ID == null || default_ID.length() == 0))
selected = true;
// Create option
String name = Util.maskHTML(list[i].getName());
retValue[i] = new option(list[i].getID()).addElement(name);
// Select if ID/Key is same as default ID
if (default_ID != null && default_ID.equals(list[i].getID()))
selected = true;
retValue[i].setSelected(selected);
}
return retValue;
} // convertToOption
/**
* Create label/field table row
*
* @param line - null for new line (table row)
* @param FORMNAME form name
* @param PARAMETER parameter name
* @param labelText label
* @param inputType HTML input type
* @param value data value
* @param sizeDisplay display size
* @param size data size
* @param longField field spanning two columns
* @param mandatory mark as mandatory
* @param onChange onChange call
* @param script script
* @return tr table row
*/
static public tr createField (tr line, String FORMNAME, String PARAMETER,
String labelText, String inputType, Object value,
int sizeDisplay, int size, boolean longField,
boolean mandatory, String onChange, StringBuffer script)
{
if (line == null)
line = new tr();
String labelInfo = labelText;
if (mandatory)
{
labelInfo += " <font color=\"red\">*</font>";
String fName = "document." + FORMNAME + "." + PARAMETER;
script.append(fName).append(".required=true; ");
}
label llabel = new label().setFor(PARAMETER).addElement(labelInfo);
llabel.setID("ID_" + PARAMETER + "_Label");
// label.setTitle(description);
line.addElement(new td().addElement(llabel).setAlign(AlignType.RIGHT));
input iinput = new input(inputType, PARAMETER, value == null ? "" : value.toString());
iinput.setSize(sizeDisplay).setMaxlength(size);
iinput.setID("ID_" + PARAMETER);
if (onChange != null && onChange.length() > 0)
iinput.setOnChange(onChange);
iinput.setTitle(labelText);
td field = new td().addElement(iinput).setAlign(AlignType.LEFT);
if (longField)
field.setColSpan(3);
line.addElement(field);
return line;
} // addField
/**
* Get Close PopUp Buton
* @return button
*/
public static input createClosePopupButton()
{
input close = new input (input.TYPE_BUTTON, "closePopup", "Close");
close.setTitle ("Close PopUp"); // Help
close.setOnClick ("closePopup();return false;");
return close;
} // getClosePopupButton
/**
* Stream Attachment Entry
* @param response response
* @param attachment attachment
* @param attachmentIndex logical index
* @return error message or null
*/
public static String streamAttachment (HttpServletResponse response,
MAttachment attachment, int attachmentIndex)
{
if (attachment == null)
return "No Attachment";
int realIndex = -1;
MAttachmentEntry[] entries = attachment.getEntries();
for (int i = 0; i < entries.length; i++)
{
MAttachmentEntry entry = entries[i];
if (entry.getIndex() == attachmentIndex)
{
realIndex = i;
break;
}
}
if (realIndex < 0)
{
log.fine("No Attachment Entry for Index="
+ attachmentIndex + " - " + attachment);
return "Attachment Entry not found";
}
MAttachmentEntry entry = entries[realIndex];
if (entry.getData() == null)
{
log.fine("Empty Attachment Entry for Index="
+ attachmentIndex + " - " + attachment);
return "Attachment Entry empty";
}
// Stream Attachment Entry
try
{
int bufferSize = 2048; // 2k Buffer
int fileLength = entry.getData().length;
//
response.setContentType(entry.getContentType());
response.setBufferSize(bufferSize);
response.setContentLength(fileLength);
//
log.fine(entry.toString());
long time = System.currentTimeMillis(); // timer start
//
ServletOutputStream out = response.getOutputStream ();
out.write (entry.getData());
out.flush();
out.close();
//
time = System.currentTimeMillis() - time;
double speed = (fileLength/1024) / ((double)time/1000);
log.info("Length="
+ fileLength + " - "
+ time + " ms - "
+ speed + " kB/sec - " + entry.getContentType());
}
catch (IOException ex)
{
log.log(Level.SEVERE, ex.toString());
return "Streaming error - " + ex;
}
return null;
} // streamAttachment
/**
* Stream File
* @param response response
* @param file file to stream
* @return error message or null
*/
public static String streamFile (HttpServletResponse response, File file)
{
if (file == null)
return "No File";
if (!file.exists())
return "File not found: " + file.getAbsolutePath();
MimeType mimeType = MimeType.get(file.getAbsolutePath());
// Stream File
try
{
int bufferSize = 2048; // 2k Buffer
int fileLength = (int)file.length();
//
response.setContentType(mimeType.getMimeType());
response.setBufferSize(bufferSize);
response.setContentLength(fileLength);
//
log.fine(file.toString());
long time = System.currentTimeMillis(); // timer start
// Get Data
FileInputStream in = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream ();
int c = 0;
while ((c = in.read()) != -1)
out.write(c);
//
out.flush();
out.close();
in.close();
//
time = System.currentTimeMillis() - time;
double speed = (fileLength/1024) / ((double)time/1000);
log.info("Length="
+ fileLength + " - "
+ time + " ms - "
+ speed + " kB/sec - " + mimeType);
}
catch (IOException ex)
{
log.log(Level.SEVERE, ex.toString());
return "Streaming error - " + ex;
}
return null;
} // streamFile
} // WUtil
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -