au.id.jericho.lib.html

Class AttributesOutputSegment

Implemented Interfaces:
CharStreamSource, OutputSegment

public class AttributesOutputSegment
extends java.lang.Object
implements OutputSegment

Implements an OutputSegment whose content is a list of attribute name/value pairs.

This output segment is designed to replace the original Attributes segment in the source, providing a simple means of adding, modifying and removing attributes.

Each instance of this class contains a java.util.Map of name/value pairs which can either be specified directly in the constructor or initialised to the same entries as the source Attributes specified in the constructor. This map can be accessed via the getMap() method, and its entries modified as required before output.

Keys in the map must be String objects, and values must implement the CharSequence interface.

An attribute with no value is represented by a map entry with a null value.

Attribute values are stored unencoded in the map, and are automatically encoded if necessary during output.

The use of invalid characters in attribute names results in unspecified behaviour.

Note that methods in the Attributes class treat attribute names as case insensitive, whereas the Map treats them as case sensitive.

Example of Usage:

  Source source=new Source(htmlDocument);
  Attributes bodyAttributes
    =source.findNextStartTag(0,Tag.BODY).getAttributes();
  AttributesOutputSegment bodyAttributesOutputSegment
    =new AttributesOutputSegment(bodyAttributes,true);
  bodyAttributesOutputSegment.getMap().put("bgcolor","green");
  OutputDocument outputDocument=new OutputDocument(source);
  outputDocument.register(bodyAttributesOutputSegment);
  String htmlDocumentWithGreenBackground=outputDocument.toString();
 

This class has been deprecated as of version 2.2 and the functionality replaced with the OutputDocument.replace(Attributes,Map) and OutputDocument.replace(Attributes, boolean convertNamesToLowerCase) methods.

See Also:
OutputDocument, Attributes

Fields inherited from interface au.id.jericho.lib.html.OutputSegment

COMPARATOR

Constructor Summary

AttributesOutputSegment(Attributes attributes, Map map)
Constructs a new AttributesOutputSegment with the same span as the specified source Attributes, using the specified Map to store the entries.
AttributesOutputSegment(Attributes attributes, boolean convertNamesToLowerCase)
Constructs a new AttributesOutputSegment with the same span and initial name/value entries as the specified source Attributes.

Method Summary

int
getBegin()
String
getDebugInfo()
int
getEnd()
long
getEstimatedMaximumOutputLength()
Map
getMap()
Returns the Map containing the name/value entries to be output.
void
output(Writer writer)
Deprecated. Use writeTo(Writer) instead.
String
toString()
void
writeTo(Writer writer)
Writes the contents of the map as HTML attribute name/value pairs to the specified Writer.

Constructor Details

AttributesOutputSegment

public AttributesOutputSegment(Attributes attributes,
                               Map map)
Constructs a new AttributesOutputSegment with the same span as the specified source Attributes, using the specified Map to store the entries.

This constructor might be used if the Map containing the new attribute values should not be preloaded with the same entries as the source attributes, or a map implementation other than LinkedHashMap is required.

Parameters:
attributes - the Attributes defining the span of the new AttributesOutputSegment.
map - the Map containing the name/value entries.
See Also:
AttributesOutputSegment(Attributes, boolean convertNamesToLowerCase)

AttributesOutputSegment

public AttributesOutputSegment(Attributes attributes,
                               boolean convertNamesToLowerCase)
Constructs a new AttributesOutputSegment with the same span and initial name/value entries as the specified source Attributes.

Specifying a value of true as an argument to the convertNamesToLowerCase parameter causes all attribute names to be converted to lower case in the map. This simplifies the process of finding/updating specific attributes since map keys are case sensitive.

Attribute values are automatically decoded before being loaded into the map.

Calling this constructor with the following code:

new AttributesOutputSegment(attributes, convertNamesToLowerCase)
is logically equivalent to calling:
new AttributesOutputSegment(attributes, attributes.populateMap(new LinkedHashMap(), convertNamesToLowerCase))

The use of LinkedHashMap to implement the map ensures (probably unnecessarily) that existing attributes are output in the same order as they appear in the source document, and new attributes are output in the same order as they are added.

Parameters:
attributes - the Attributes defining the span and initial name/value entries of the new AttributesOutputSegment.
convertNamesToLowerCase - specifies whether all attribute names are converted to lower case in the map.

Method Details

getBegin

public int getBegin()
Specified by:
getBegin in interface OutputSegment

getDebugInfo

public String getDebugInfo()
Specified by:
getDebugInfo in interface OutputSegment

getEnd

public int getEnd()
Specified by:
getEnd in interface OutputSegment

getEstimatedMaximumOutputLength

public long getEstimatedMaximumOutputLength()
Specified by:
getEstimatedMaximumOutputLength in interface CharStreamSource

getMap

public Map getMap()
Returns the Map containing the name/value entries to be output.
Returns:
the Map containing the name/value entries to be output.

output

public void output(Writer writer)
            throws IOException

Deprecated. Use writeTo(Writer) instead.

Outputs the contents of the map as HTML attribute name/value pairs to the specified Writer.
Parameters:
writer - the destination java.io.Writer for the output.

toString

public String toString()
Specified by:
toString in interface OutputSegment

writeTo

public void writeTo(Writer writer)
            throws IOException
Writes the contents of the map as HTML attribute name/value pairs to the specified Writer.

Each attribute is preceded by a single space, and all values are encoded and enclosed in double quotes.

Specified by:
writeTo in interface OutputSegment
writeTo in interface CharStreamSource
Parameters:
writer - the destination java.io.Writer for the output.
See Also:
Attributes.generateHTML(Map attributesMap)