Package com.opensymphony.module.sitemesh.html

# Class CustomTag

java.lang.Object
com.opensymphony.module.sitemesh.html.CustomTag

All Implemented Interfaces:
  `Tag`

public class CustomTag extends Object implements Tag
A CustomTag provides a mechanism to manipulate the contents of a Tag. The standard Tag implementations are immutable, however CustomTag allows a copy to be taken of an immutable Tag that can then be manipulated.

Author:
  Joe Walnes
See Also:
  - `Tag`

## Field Summary

Fields
Modifier and Type
Field
Description
`private int`
`attributeCount`
`private String[]`
`attributes`
`private String`
`name`
`private int`
`type`

### Fields inherited from interface com.opensymphony.module.sitemesh.html.Tag

`CLOSE, CLOSE_MAGIC_COMMENT, EMPTY, OPEN, OPEN_MAGIC_COMMENT`

## Constructor Summary

Constructors
Constructor
Description
`CustomTag(Tag tag)`
Create a CustomTag based on an existing Tag - this takes a copy of the Tag.
`CustomTag(String name, int type)`
Type of tag:
<blah> - Tag.OPEN
</blah> - Tag.CLOSE
<blah/> - Tag.EMPTY

## Method Summary

Modifier and Type
Method
Description
`int`
`addAttribute(String name, String value)`
Add a new attribute.
`boolean`
`equals(Object o)`
`int`
`getAttributeCount()`
Number of attributes in tag.
`int`
`getAttributeIndex(String name, boolean caseSensitive)`
Determine which attribute has the specified name.
`String`
`getAttributeName(int index)`
Get name of attribute.
`String`
`getAttributeValue(int index)`
Get value of an attribute.
`String`
`getAttributeValue(String name, boolean caseSensitive)`
Get value of an attribute.
`String`
`getContents()`
Get the complete tag in its original form, preserving original formatting.
`String`
`getName()`
Name of tag (ie.
`int`
`getType()`
Type of tag:
<blah> - Tag.OPEN
</blah> - Tag.CLOSE
<blah/> - Tag.EMPTY
`private void`
`growAttributes()`
`boolean`
`hasAttribute(String name, boolean caseSensitive)`
Determine if an attribute is present.
`int`
`hashCode()`
`void`
`removeAttribute(int attributeIndex)`
Remove an attribute.
`void`
`removeAttribute(String name, boolean caseSensitive)`
Change the value of an attribute, or add an attribute if it does not already exist.
`void`
`setAttributeName(int attributeIndex, String name)`
Change the name of an existing attribute.
`void`
`setAttributeValue(int attributeIndex, String value)`
Change the value of an existing attribute.
`void`
`setAttributeValue(String name, boolean caseSensitive, String value)`
Change the value of an attribute, or add an attribute if it does not already exist.
`void`
`setName(String name)`
Change the name of the attribute.
`void`
`setType(int type)`
Change the type of the tag.
`String`
`toString()`
`void`
`writeTo(CharArray out)`
Write out the complete tag in its original form, preserving original formatting.

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Field Details

### attributes

private String[] attributes

### attributeCount

private int attributeCount

### name

private String name

### type

private int type

## Constructor Details

### CustomTag

public CustomTag(String name, int type)
Type of tag:
<blah> - Tag.OPEN
</blah> - Tag.CLOSE
<blah/> - Tag.EMPTY

### CustomTag

public CustomTag(Tag tag)
Create a CustomTag based on an existing Tag - this takes a copy of the Tag.

## Method Details

### getContents

public String getContents()
Description copied from interface: `Tag`
Get the complete tag in its original form, preserving original formatting. This has a slight overhead in that it needs to construct a String. For improved performance, use writeTo() instead.

Specified by:
  `getContents` in interface `Tag`
See Also:
  - `Tag.writeTo(com.opensymphony.module.sitemesh.html.util.CharArray)`

### writeTo

public void writeTo(CharArray out)
Description copied from interface: `Tag`
Write out the complete tag in its original form, preserving original formatting.

Specified by:
  `writeTo` in interface `Tag`

### equals

public boolean equals(Object o)

Overrides:
  `equals` in class `Object`

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### getAttributeCount

public int getAttributeCount()
Description copied from interface: `Tag`
Number of attributes in tag.

Specified by:
  `getAttributeCount` in interface `Tag`

### getAttributeIndex

public int getAttributeIndex(String name, boolean caseSensitive)
Description copied from interface: `Tag`
Determine which attribute has the specified name.

Specified by:
  `getAttributeIndex` in interface `Tag`

### getAttributeName

public String getAttributeName(int index)
Description copied from interface: `Tag`
Get name of attribute.

Specified by:
  `getAttributeName` in interface `Tag`

### getAttributeValue

public String getAttributeValue(int index)
Description copied from interface: `Tag`
Get value of an attribute. If this is an empty attribute (i.e. just a name, without a value), null is returned.

Specified by:
  `getAttributeValue` in interface `Tag`

### getAttributeValue

public String getAttributeValue(String name, boolean caseSensitive)
Description copied from interface: `Tag`
Get value of an attribute. If this is an empty attribute (i.e. just a name, without a value), null is returned.

Specified by:
  `getAttributeValue` in interface `Tag`

### hasAttribute

public boolean hasAttribute(String name, boolean caseSensitive)
Description copied from interface: `Tag`
Determine if an attribute is present.

Specified by:
  `hasAttribute` in interface `Tag`

### getName

public String getName()
Description copied from interface: `Tag`
Name of tag (ie. element name).

Specified by:
  `getName` in interface `Tag`

### getType

public int getType()
Type of tag:
<blah> - Tag.OPEN
</blah> - Tag.CLOSE
<blah/> - Tag.EMPTY

Specified by:
  `getType` in interface `Tag`

### setName

public void setName(String name)
Change the name of the attribute.

### setType

public void setType(int type)
Change the type of the tag. Type of tag:
<blah> - Tag.OPEN
</blah> - Tag.CLOSE
<blah/> - Tag.EMPTY

### growAttributes

private void growAttributes()

### addAttribute

public int addAttribute(String name, String value)
Add a new attribute. This does not check for the existence of an attribute with the same name, thus allowing duplicate attributes.

Parameters:
  `name` - Name of attribute to change.
  `value` - New value of attribute or null for an HTML style empty attribute.
Returns:
  Index of new attribute.

### setAttributeValue

public void setAttributeValue(String name, boolean caseSensitive, String value)
Change the value of an attribute, or add an attribute if it does not already exist.

Parameters:
  `name` - Name of attribute to change.
  `caseSensitive` - Whether the name should be treated as case sensitive when searching for an existing value.
  `value` - New value of attribute or null for an HTML style empty attribute.

### setAttributeName

public void setAttributeName(int attributeIndex, String name)
Change the name of an existing attribute.

### setAttributeValue

public void setAttributeValue(int attributeIndex, String value)
Change the value of an existing attribute. The value may be null for an HTML style empty attribute.

### removeAttribute

public void removeAttribute(int attributeIndex)
Remove an attribute.

### removeAttribute

public void removeAttribute(String name, boolean caseSensitive)
Change the value of an attribute, or add an attribute if it does not already exist.

Parameters:
  `name` - Name of attribute to remove.
  `caseSensitive` - Whether the name should be treated as case sensitive.