You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2008/12/29 19:56:11 UTC
svn commit: r729966 - in
/myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago:
util/HtmlWriterUtil.java util/ResponseWriterBuffer.java util/XmlUtils.java
webapp/TobagoResponseWriterImpl.java
Author: bommel
Date: Mon Dec 29 10:56:11 2008
New Revision: 729966
URL: http://svn.apache.org/viewvc?rev=729966&view=rev
Log:
(TOBAGO-731) Minor performance improvements for TobagoReponseWriter, XmlUtils, HtmlWriterUtil and ResponseWriterBuffer
Modified:
myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/HtmlWriterUtil.java
myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/ResponseWriterBuffer.java
myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/XmlUtils.java
myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterImpl.java
Modified: myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/HtmlWriterUtil.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/HtmlWriterUtil.java?rev=729966&r1=729965&r2=729966&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/HtmlWriterUtil.java (original)
+++ myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/HtmlWriterUtil.java Mon Dec 29 10:56:11 2008
@@ -44,7 +44,7 @@
private final boolean utf8;
- public HtmlWriterUtil(Writer out, String characterEncoding) {
+ public HtmlWriterUtil(final Writer out, final String characterEncoding) {
this.out = out;
utf8 = "utf-8".equalsIgnoreCase(characterEncoding);
buffer = new ResponseWriterBuffer(out);
@@ -52,18 +52,11 @@
public void writeAttributeValue(final String text)
throws IOException {
- writeAttributeValue(text.toCharArray(), 0, text.length());
+ writeEncodedValue(text.toCharArray(), 0, text.length(), true);
}
- private void writeAttributeValue(
- final char[] text, final int start, final int length)
- throws IOException {
- writeEncodedValue(text, start, length, true);
- }
-
-
public void writeText(final String text) throws IOException {
- writeText(text.toCharArray(), 0, text.length());
+ writeEncodedValue(text.toCharArray(), 0, text.length(), false);
}
public void writeText(final char[] text, final int start, final int length)
@@ -103,9 +96,7 @@
// an open brace don't get escaped
buffer.addToBuffer('&');
} else if (CHARS_TO_ESCAPE[ch] != null) {
- for (char cha : CHARS_TO_ESCAPE[ch]) {
- buffer.addToBuffer(cha);
- }
+ buffer.addToBuffer(CHARS_TO_ESCAPE[ch]);
} else {
buffer.addToBuffer(ch);
}
@@ -116,11 +107,8 @@
buffer.flushBuffer();
out.write('&');
-// FIXME? write(String) sets the startStillOpen=false
-// out.write(sISO8859_1_Entities[ch - 0xA0]);
- for (char c : ISO8859_1_ENTITIES[ch - 0xA0].toCharArray()) {
- out.write(c);
- }
+ char[] chars = ISO8859_1_ENTITIES[ch - 0xA0];
+ out.write(chars, 0, chars.length);
out.write(';');
} else {
buffer.flushBuffer();
@@ -220,102 +208,102 @@
//
// Entities from HTML 4.0, section 24.2.1; character codes 0xA0 to 0xFF
//
- private static final String[] ISO8859_1_ENTITIES = new String[]{
- "nbsp",
- "iexcl",
- "cent",
- "pound",
- "curren",
- "yen",
- "brvbar",
- "sect",
- "uml",
- "copy",
- "ordf",
- "laquo",
- "not",
- "shy",
- "reg",
- "macr",
- "deg",
- "plusmn",
- "sup2",
- "sup3",
- "acute",
- "micro",
- "para",
- "middot",
- "cedil",
- "sup1",
- "ordm",
- "raquo",
- "frac14",
- "frac12",
- "frac34",
- "iquest",
- "Agrave",
- "Aacute",
- "Acirc",
- "Atilde",
- "Auml",
- "Aring",
- "AElig",
- "Ccedil",
- "Egrave",
- "Eacute",
- "Ecirc",
- "Euml",
- "Igrave",
- "Iacute",
- "Icirc",
- "Iuml",
- "ETH",
- "Ntilde",
- "Ograve",
- "Oacute",
- "Ocirc",
- "Otilde",
- "Ouml",
- "times",
- "Oslash",
- "Ugrave",
- "Uacute",
- "Ucirc",
- "Uuml",
- "Yacute",
- "THORN",
- "szlig",
- "agrave",
- "aacute",
- "acirc",
- "atilde",
- "auml",
- "aring",
- "aelig",
- "ccedil",
- "egrave",
- "eacute",
- "ecirc",
- "euml",
- "igrave",
- "iacute",
- "icirc",
- "iuml",
- "eth",
- "ntilde",
- "ograve",
- "oacute",
- "ocirc",
- "otilde",
- "ouml",
- "divide",
- "oslash",
- "ugrave",
- "uacute",
- "ucirc",
- "uuml",
- "yacute",
- "thorn",
- "yuml"
+ private static final char [][] ISO8859_1_ENTITIES = new char [][]{
+ "nbsp".toCharArray(),
+ "iexcl".toCharArray(),
+ "cent".toCharArray(),
+ "pound".toCharArray(),
+ "curren".toCharArray(),
+ "yen".toCharArray(),
+ "brvbar".toCharArray(),
+ "sect".toCharArray(),
+ "uml".toCharArray(),
+ "copy".toCharArray(),
+ "ordf".toCharArray(),
+ "laquo".toCharArray(),
+ "not".toCharArray(),
+ "shy".toCharArray(),
+ "reg".toCharArray(),
+ "macr".toCharArray(),
+ "deg".toCharArray(),
+ "plusmn".toCharArray(),
+ "sup2".toCharArray(),
+ "sup3".toCharArray(),
+ "acute".toCharArray(),
+ "micro".toCharArray(),
+ "para".toCharArray(),
+ "middot".toCharArray(),
+ "cedil".toCharArray(),
+ "sup1".toCharArray(),
+ "ordm".toCharArray(),
+ "raquo".toCharArray(),
+ "frac14".toCharArray(),
+ "frac12".toCharArray(),
+ "frac34".toCharArray(),
+ "iquest".toCharArray(),
+ "Agrave".toCharArray(),
+ "Aacute".toCharArray(),
+ "Acirc".toCharArray(),
+ "Atilde".toCharArray(),
+ "Auml".toCharArray(),
+ "Aring".toCharArray(),
+ "AElig".toCharArray(),
+ "Ccedil".toCharArray(),
+ "Egrave".toCharArray(),
+ "Eacute".toCharArray(),
+ "Ecirc".toCharArray(),
+ "Euml".toCharArray(),
+ "Igrave".toCharArray(),
+ "Iacute".toCharArray(),
+ "Icirc".toCharArray(),
+ "Iuml".toCharArray(),
+ "ETH".toCharArray(),
+ "Ntilde".toCharArray(),
+ "Ograve".toCharArray(),
+ "Oacute".toCharArray(),
+ "Ocirc".toCharArray(),
+ "Otilde".toCharArray(),
+ "Ouml".toCharArray(),
+ "times".toCharArray(),
+ "Oslash".toCharArray(),
+ "Ugrave".toCharArray(),
+ "Uacute".toCharArray(),
+ "Ucirc".toCharArray(),
+ "Uuml".toCharArray(),
+ "Yacute".toCharArray(),
+ "THORN".toCharArray(),
+ "szlig".toCharArray(),
+ "agrave".toCharArray(),
+ "aacute".toCharArray(),
+ "acirc".toCharArray(),
+ "atilde".toCharArray(),
+ "auml".toCharArray(),
+ "aring".toCharArray(),
+ "aelig".toCharArray(),
+ "ccedil".toCharArray(),
+ "egrave".toCharArray(),
+ "eacute".toCharArray(),
+ "ecirc".toCharArray(),
+ "euml".toCharArray(),
+ "igrave".toCharArray(),
+ "iacute".toCharArray(),
+ "icirc".toCharArray(),
+ "iuml".toCharArray(),
+ "eth".toCharArray(),
+ "ntilde".toCharArray(),
+ "ograve".toCharArray(),
+ "oacute".toCharArray(),
+ "ocirc".toCharArray(),
+ "otilde".toCharArray(),
+ "ouml".toCharArray(),
+ "divide".toCharArray(),
+ "oslash".toCharArray(),
+ "ugrave".toCharArray(),
+ "uacute".toCharArray(),
+ "ucirc".toCharArray(),
+ "uuml".toCharArray(),
+ "yacute".toCharArray(),
+ "thorn".toCharArray(),
+ "yuml".toCharArray()
};
}
Modified: myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/ResponseWriterBuffer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/ResponseWriterBuffer.java?rev=729966&r1=729965&r2=729966&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/ResponseWriterBuffer.java (original)
+++ myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/ResponseWriterBuffer.java Mon Dec 29 10:56:11 2008
@@ -44,20 +44,19 @@
private static final int BUFFER_SIZE = 64;
- private final char[] buff;
+ private final char[] buff = new char[BUFFER_SIZE];
private int bufferIndex;
- private Writer writer;
+ private final Writer writer;
- public ResponseWriterBuffer(Writer writer) {
- buff = new char[BUFFER_SIZE];
+ public ResponseWriterBuffer(final Writer writer) {
this.writer = writer;
}
/**
* Add a character to the buffer, flushing the buffer if the buffer is
- * full, and returning the new buffer index
+ * full
*/
public void addToBuffer(final char ch) throws IOException {
if (bufferIndex >= BUFFER_SIZE) {
@@ -68,6 +67,16 @@
buff[bufferIndex++] = ch;
}
+ public void addToBuffer(final char[] ch) throws IOException {
+ if (bufferIndex + ch.length >= BUFFER_SIZE) {
+ writer.write(buff, 0, bufferIndex);
+ bufferIndex = 0;
+ }
+
+ System.arraycopy(ch, 0, buff, bufferIndex, ch.length);
+ bufferIndex += ch.length;
+ }
+
/**
* Flush the contents of the buffer to the output stream
* and return the reset buffer index
Modified: myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/XmlUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/XmlUtils.java?rev=729966&r1=729965&r2=729966&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/XmlUtils.java (original)
+++ myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/util/XmlUtils.java Mon Dec 29 10:56:11 2008
@@ -33,13 +33,13 @@
import java.io.StringReader;
import java.util.Properties;
-public class XmlUtils {
+public final class XmlUtils {
- public static String escape(String s) {
+ public static String escape(final String s) {
return escape(s, true);
}
- public static String escape(String s, boolean isAttributeValue) {
+ public static String escape(final String s, final boolean isAttributeValue) {
if (null == s) {
return "";
}
@@ -51,8 +51,19 @@
return buffer.toString();
}
- private static void appendEntityRef(StringBuilder buffer, char ch,
- boolean isAttributeValue) {
+ public static String escape(final char[] chars, final int offset, final int length, final boolean isAttributeValue) {
+ if (null == chars) {
+ return "";
+ }
+ StringBuilder buffer = new StringBuilder(length);
+ for (int i = offset; i < length; i++) {
+ appendEntityRef(buffer, chars[i], isAttributeValue);
+ }
+ return buffer.toString();
+ }
+
+ private static void appendEntityRef(final StringBuilder buffer, final char ch,
+ final boolean isAttributeValue) {
// Encode special XML characters into the equivalent character references.
// These five are defined by default for all XML documents.
switch (ch) {
@@ -84,7 +95,7 @@
}
}
- public static void load(Properties properties, InputStream stream)
+ public static void load(final Properties properties, final InputStream stream)
throws IOException {
Document document;
try {
@@ -97,7 +108,7 @@
importProperties(properties, propertiesElement);
}
- private static Document createDocument(InputStream stream)
+ private static Document createDocument(final InputStream stream)
throws SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
@@ -114,7 +125,7 @@
}
}
- static void importProperties(Properties properties, Element propertiesElement) {
+ static void importProperties(final Properties properties, final Element propertiesElement) {
NodeList entries = propertiesElement.getChildNodes();
int numEntries = entries.getLength();
int start = numEntries > 0
@@ -134,7 +145,7 @@
private static class Resolver implements EntityResolver {
- public InputSource resolveEntity(String publicId, String systemId)
+ public InputSource resolveEntity(final String publicId, final String systemId)
throws SAXException {
String dtd = "<!ELEMENT properties (comment?, entry*)>"
+ "<!ATTLIST properties version CDATA #FIXED '1.0'>"
Modified: myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterImpl.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterImpl.java?rev=729966&r1=729965&r2=729966&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterImpl.java (original)
+++ myfaces/tobago/branches/tobago-1.0.x/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriterImpl.java Mon Dec 29 10:56:11 2008
@@ -190,8 +190,7 @@
throws IOException {
closeOpenTag();
if (xml) {
- writer.write(XmlUtils.escape(String.valueOf(text)).toCharArray(), offset, length);
-// FIXME: not nice: XmlUtils.escape(text.toString()).toCharArray()
+ writer.write(XmlUtils.escape(text, offset, length, true));
} else {
helper.writeText(text, offset, length);
}