/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.util; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.UnhandledException; /** * Object used to contain html multiple attribute value (for the "class" attribute). * @author Fabrizio Giustina * @version $Revision: 956 $ ($Author: fgiust $) */ public class MultipleHtmlAttribute implements Cloneable { /** * Sets containing splitted attribute values. */ private Set attributeSet; /** * Constructor for MultipleHtmlAttribute. * @param attributeValue String */ public MultipleHtmlAttribute(String attributeValue) { // split initial attribute String[] attributes = StringUtils.split(attributeValue); addAllAttributesFromArray(attributes); } /** * Adds attributes from an array. * @param attributes Object[] Array containing attributes */ private void addAllAttributesFromArray(String[] attributes) { // number of attributes to add int length = attributes.length; // create new HashSet with correct size this.attributeSet = new LinkedHashSet(length); // add all the splitted attributes for (int j = 0; j < length; j++) { // don't add if empty if (!StringUtils.isEmpty(attributes[j])) { this.attributeSet.add(attributes[j]); } } } /** * Returns the list of attributes separated by a space. * @return String */ public String toString() { StringBuffer buffer = new StringBuffer(); Iterator iterator = this.attributeSet.iterator(); while (iterator.hasNext()) { // apend next value buffer.append(iterator.next()); if (iterator.hasNext()) { // append a space if there are more buffer.append(' '); } } return buffer.toString(); } /** * Adds a value to the attribute. * @param attributeValue value to add to the attribute */ public void addAttributeValue(String attributeValue) { // don't add if empty if (!StringUtils.isEmpty(attributeValue)) { this.attributeSet.add(attributeValue); } } /** * @see java.lang.Object#clone() */ protected Object clone() { MultipleHtmlAttribute clone; try { clone = (MultipleHtmlAttribute) super.clone(); } catch (CloneNotSupportedException e) { // should never happen throw new UnhandledException(e); } // copy attributes clone.addAllAttributesFromArray((String[]) this.attributeSet.toArray(new String[this.attributeSet.size()])); return clone; } }