001: /*
002: * Copyright (c) 2002-2008 Gargoyle Software Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * 1. Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: * 2. Redistributions in binary form must reproduce the above copyright notice,
010: * this list of conditions and the following disclaimer in the documentation
011: * and/or other materials provided with the distribution.
012: * 3. The end-user documentation included with the redistribution, if any, must
013: * include the following acknowledgment:
014: *
015: * "This product includes software developed by Gargoyle Software Inc.
016: * (http://www.GargoyleSoftware.com/)."
017: *
018: * Alternately, this acknowledgment may appear in the software itself, if
019: * and wherever such third-party acknowledgments normally appear.
020: * 4. The name "Gargoyle Software" must not be used to endorse or promote
021: * products derived from this software without prior written permission.
022: * For written permission, please contact info@GargoyleSoftware.com.
023: * 5. Products derived from this software may not be called "HtmlUnit", nor may
024: * "HtmlUnit" appear in their name, without prior written permission of
025: * Gargoyle Software Inc.
026: *
027: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
028: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
029: * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
030: * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
031: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
032: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
033: * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
034: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
035: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
036: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
037: */
038: package com.gargoylesoftware.htmlunit;
039:
040: import java.io.ByteArrayInputStream;
041: import java.io.ByteArrayOutputStream;
042: import java.io.IOException;
043: import java.io.InputStream;
044: import java.io.OutputStreamWriter;
045: import java.io.UnsupportedEncodingException;
046:
047: /**
048: * Utility methods relating to text.
049: *
050: * @version $Revision: 2132 $
051: * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
052: * @author Brad Clarke
053: * @author Ahmed Ashour
054: */
055: public final class TextUtil {
056:
057: /**
058: * Default encoding used.
059: */
060: public static final String DEFAULT_CHARSET = "ISO-8859-1";
061:
062: /** Private constructor to prevent instantiation */
063: private TextUtil() {
064: }
065:
066: /**
067: * Return true if the string starts with the specified prefix, irrespective of case.
068: * @param stringToCheck The string to check
069: * @param prefix The prefix
070: * @return true if the string starts with the prefix.
071: */
072: public static boolean startsWithIgnoreCase(
073: final String stringToCheck, final String prefix) {
074: Assert.notNull("stringToCheck", stringToCheck);
075: Assert.notNull("prefix", prefix);
076:
077: if (prefix.length() == 0) {
078: throw new IllegalArgumentException(
079: "Prefix may not be empty");
080: }
081:
082: final int prefixLength = prefix.length();
083: if (stringToCheck.length() < prefixLength) {
084: return false;
085: } else {
086: return stringToCheck.substring(0, prefixLength)
087: .toLowerCase().equals(prefix.toLowerCase());
088: }
089: }
090:
091: /**
092: * Convert a string into an input stream.
093: * @param content The string
094: * @return The resulting input stream.
095: */
096: public static InputStream toInputStream(final String content) {
097: try {
098: return toInputStream(content, DEFAULT_CHARSET);
099: } catch (final UnsupportedEncodingException e) {
100: throw new IllegalStateException(
101: DEFAULT_CHARSET
102: + " is an unsupported encoding! You may have a corrupted installation of java.");
103: }
104: }
105:
106: /**
107: * Convert a string into an input stream.
108: * @param content The string
109: * @param encoding The encoding to use when converting the string to a stream.
110: * @return The resulting input stream.
111: * @throws UnsupportedEncodingException If the encoding is not supported.
112: */
113: public static InputStream toInputStream(final String content,
114: final String encoding) throws UnsupportedEncodingException {
115:
116: try {
117: final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(
118: content.length() * 2);
119: final OutputStreamWriter writer = new OutputStreamWriter(
120: byteArrayOutputStream, encoding);
121: writer.write(content);
122: writer.flush();
123:
124: final byte[] byteArray = byteArrayOutputStream
125: .toByteArray();
126: return new ByteArrayInputStream(byteArray);
127: } catch (final UnsupportedEncodingException e) {
128: throw e;
129: } catch (final IOException e) {
130: // Theoretically impossible since all the "IO" is in memory but it's a
131: // checked exception so we have to catch it.
132: e.printStackTrace();
133: throw new IllegalStateException(
134: "Exception when converting a string to an input stream: "
135: + e);
136: }
137: }
138:
139: /**
140: * Convert a string into a byte array using a default encoding {@link #DEFAULT_CHARSET}.
141: *
142: * @param content The string to convert, assumed to be {@link #DEFAULT_CHARSET} encoded
143: * @return The String as a byte[]. If the default encoding is not supported an empty byte[] will be returned.
144: */
145: public static byte[] stringToByteArray(final String content) {
146: return stringToByteArray(content, DEFAULT_CHARSET);
147: }
148:
149: /**
150: * Convert a string into a byte array using the given encoding.
151: *
152: * @param charset The name of a supported charset
153: * @param content The string to convert
154: *
155: * @return The String as a byte[]. If the specified encoding is not supported an empty byte[] will be returned.
156: */
157: public static byte[] stringToByteArray(final String content,
158: final String charset) {
159: byte[] contentBytes;
160: try {
161: contentBytes = content.getBytes(charset);
162: } catch (final UnsupportedEncodingException e) {
163: contentBytes = new byte[0];
164: }
165: return contentBytes;
166: }
167: }
|