src.com.ibm.as400.util.html.HTMLTransform Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400-jdk8 Show documentation
Show all versions of jt400-jdk8 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: HTMLTransform.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.html;
import com.ibm.as400.access.Trace;
/**
* The HTMLTransform class encodes and decodes a string's tags for use in
* an HTMLTagElement's control name, initial value, or displayed text. There are
* a set of special characters reserved for creating HTML tags. Those
* special characters have a corresponding set of replacement characters that allow
* users to visually see those characters in a browser.
*
* For example, if you wanted to set the value attribute of a TextFormInput object
* to a resource link so you could see the HTML link in the text input box, the HTML link
* tag would need to be encoded to see the special characters(<, >, and "):
*
* <input type="text" name="myText" value="<a href="http://www.myLink.com/">Link</a>" />
*
*
* The following example uses the HTMLEncoder class to encode and decode the value of
* a TextFormInput so it displays properly:
*
* // The string to use for the TextFormInput value attribute.
* String s = new String("<a href="http://www.myLink.com/">Link</a>");
* // Encode the string.
* String e = HTMLTransform.encode(s);
* // Create the TextFormInput object.
* TextFormInput input = new TextFormInput("myText", e);
* // Set the input size so the entire value can be seen.
* input.setSize(45);
*
* System.out.println("TAG: " + input.getTag() + "\n");
* // Output the string with the special characters encoded for display in a browser.
* System.out.println("Encoded: " + e + "\n");
* // Output the string with the specials characters decoded back to the original string.
* System.out.println("Decoded: " + HTMLTransform.decode(e));
*
*
* Here is what will be produced:
*
* // The TextFormInput with an encoded string.
* <input type="text" name="myText" value="<a href="http://www.myLink.com/">Link</a>" size="45" />
*
* // The encoded string.
* <a href="http://www.myLink.com/">Link</a>
*
* // The decode string.
* <a href="http://www.myLink.com/">Link</a>
*
*
* Here is what the browser will show:
*
* <form>
* <label for="myTextID"></label>
* <input type="text" name="myText" value="<a href="http://www.myLink.com/">Link</a>" size="45" id="myTextID" />
* </form>
*
* The tags that are encoded include:
*
* - "
*
- &
*
- <
*
- >
*
**/
public class HTMLTransform
{
/**
* Encodes the HTML string, which can contain HTML tags such as < , >, ", or &.
* @param source The HTML string containing HTML tags to be encoded.
* @return The encoded string.
**/
public static String encode(String source)
{
if (source == null)
throw new NullPointerException("source");
if (Trace.isTraceOn())
Trace.log(Trace.INFORMATION, "Encoding HTML string...");
StringBuffer dest = new StringBuffer();
for (int i=0; i':
dest.append(">");
break;
default:
dest.append(source.charAt(i));
break;
}
}
return dest.toString();
}
/**
* Decodes the HTML string, which can contain replacement characters
* for HTML tags such as <, >, ", or &.
*
* @param source The HTML string containing HTML replacement characters to be decoded.
*
* @return The decoded string.
**/
public static String decode(String source)
{
if (source == null)
throw new NullPointerException("source");
if (Trace.isTraceOn())
Trace.log(Trace.INFORMATION, "Decoding HTML string...");
StringBuffer dest = new StringBuffer();
int index = source.indexOf("&"); // location of the first special character set.
int endIndex = 0; // the end of the current special character set.
// loop while there are more special characters to decode.
while (index >= 0)
{
// if the special characters appear at the beginning of the string.
if (index == 0)
{
// Find which character set is in the first position.
if (source.indexOf(""") == 0)
{
// Append the replacement character to the buffer if
// this is the character set found at the beginning of the string.
// Then set the endIndex to the position after the character set.
dest.append("\"");
endIndex = 6;
}
else if (source.indexOf("&") == 0)
{
dest.append("&");
endIndex = 5;
}
else if (source.indexOf("<") == 0)
{
dest.append("<");
endIndex = 4;
}
else if (source.indexOf(">") == 0)
{
dest.append(">");
endIndex = 4;
}
}
else
{
// find the end semi-colon for the special characters, so we can
// create a substring to find out which special character it matches.
int semiColon = source.indexOf(";", endIndex);
if (source.substring(index, semiColon).equals("""))
{
// first append the characters before the special set of characters
// and after any special characters already found
dest.append(source.substring(endIndex, index));
// append the replacement for the special characters
dest.append("\"");
}
else if (source.substring(index, semiColon).equals("&"))
{
dest.append(source.substring(endIndex, index));
dest.append("&");
}
else if (source.substring(index, semiColon).equals("<"))
{
dest.append(source.substring(endIndex, index));
dest.append("<");
}
else if (source.substring(index, semiColon).equals(">"))
{
dest.append(source.substring(endIndex, index));
dest.append(">");
}
// set the starting point for the next indexOf to the end of the special characters found,
// which is the next position after the semi-colon.
endIndex = semiColon + 1;
}
// find the next occurrence of & after the last one we found.
index = source.indexOf("&", endIndex);
}
// @A1A
// If the string does not contain a special character or contains text after a special character, then need to append the
// remainder of the text or the rest of the text string passed in.
if(index == -1)
{
dest.append(source.substring(endIndex,source.length()));
}
return dest.toString();
}
}