/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.webui.form.wysiwyg;
import java.util.HashMap;
import java.util.Map;
/**
* Tool to construct a XHTML-tag.<br>
* <br>
* Usage:
*
* <pre>
* XHtmlTagTool tag = XHtmlTagTool("a", "link");
* tag.addAttribute("href", "http://google.com");
* tag.toString(); : <a href="http://google.com">link</a>
* </pre>
*
* Hint:
* <ul>
* <li>Attributes are not ordered.</li>
* <li>If your tag shouldn't have a value but the tag has to close with '</[tagname]>', set the value to
* {@link XHtmlTagTool#SPACE}.</li>
* </ul>
*
* @version $Id: XHtmlTagTool.java 1719 2008-03-18 11:08:52Z mosipov $
*/
public class XHtmlTagTool {
/** Name of the tag. */
private String name;
/** Container for the attributes. */
private Map<String, String> attributes = new HashMap<String, String>();
/** Value of the tag. */
private String value = null;
/** Indicator to uses non self-closing tag. */
public static final String SPACE = " ";
public XHtmlTagTool(final String name, final String value) {
this.name = name;
this.value = value;
}
public XHtmlTagTool(final String name) {
this(name, null);
}
/**
* Setter for the value of the tag.
*
* @param value
*/
public void setValue(final String value) {
this.value = value;
}
/**
* Adds an attribute to the tag.
*
* @param key
* @param value
* @throws IllegalArgumentException if 'key' is empty.
*/
public void addAttribute(final String key, final String value) {
attributes.put(key, value);
}
/**
* Constructs the tag.
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuffer tag = new StringBuffer();
// open tag
tag.append("<").append(name);
// add attributes
for (String key : attributes.keySet()) {
String val = attributes.get(key);
tag.append(' ').append(key).append('=').append('\"').append(val).append('\"');
}
// close the tag
if (value != null && value.length() > 0) {
tag.append(">").append(value).append("</").append(name).append('>');
} else
tag.append(" />");
return tag.toString();
}
@Override
public boolean equals(Object obj) {
try {
XHtmlTagTool tag = (XHtmlTagTool) obj;
return value.equals(tag.value) && name.equals(tag.name) && attributes.equals(tag.attributes);
} catch (ClassCastException e) {
return false;
}
}
@Override
public int hashCode() {
return name.hashCode() + value.hashCode() + attributes.hashCode();
}
}