/** * 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.io.Serializable; /** * Simple utility class for encoding parameter names. * @author Fabrizio Giustina * @version $Revision$ ($Author$) */ public class ParamEncoder implements Serializable { /** * D1597A17A6. */ private static final long serialVersionUID = 899149338534L; /** * Unique identifier for a tag with the given id/name. */ private String parameterIdentifier; /** * Generates a new parameter encoder for the table with the given id. * @param idAttribute value of "id" attribute */ public ParamEncoder(String idAttribute) { // use name and id to get the unique identifier String stringIdentifier = "x-" + idAttribute; //$NON-NLS-1$ // get the array char[] charArray = stringIdentifier.toCharArray(); // calculate a simple checksum-like value int checkSum = 17; for (int j = 0; j < charArray.length; j++) { checkSum = 3 * checkSum + charArray[j]; } // keep it positive checkSum &= 0x7fffff; // this is the full identifier used for all the parameters this.parameterIdentifier = "d-" + checkSum + "-"; //$NON-NLS-1$ //$NON-NLS-2$ } /** * encode a parameter name prepending calculated <code>parameterIdentifier</code>. * @param paramName parameter name * @return encoded parameter name in the form <code>d-<em>XXXX</em>-<em>name</em></code> */ public String encodeParameterName(String paramName) { return this.parameterIdentifier + paramName; } /** * Check if the given parameter has been encoded using paramEncoder. It actually check if the parameter name starts * with the calculated <code>parameterIdentifier</code>. Null safe (a null string returns <code>false</code>). * @param paramName parameter name * @return <code>true</code> if the given parameter as been encoded using this param encoder */ public boolean isParameterEncoded(String paramName) { return paramName != null && paramName.startsWith(this.parameterIdentifier); } }