1 /** 2 * Licensed under the Artistic License; you may not use this file 3 * except in compliance with the License. 4 * You may obtain a copy of the License at 5 * 6 * http://displaytag.sourceforge.net/license.html 7 * 8 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR 9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 10 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 11 */ 12 package org.displaytag.util; 13 14 import java.io.Serializable; 15 16 17 /** 18 * Simple utility class for encoding parameter names. 19 * @author Fabrizio Giustina 20 * @version $Revision: 1081 $ ($Author: fgiust $) 21 */ 22 public class ParamEncoder implements Serializable 23 { 24 25 /** 26 * D1597A17A6. 27 */ 28 private static final long serialVersionUID = 899149338534L; 29 30 /** 31 * Unique identifier for a tag with the given id/name. 32 */ 33 private String parameterIdentifier; 34 35 /** 36 * Generates a new parameter encoder for the table with the given id. 37 * @param idAttribute value of "id" attribute 38 */ 39 public ParamEncoder(String idAttribute) 40 { 41 // use name and id to get the unique identifier 42 String stringIdentifier = "x-" + idAttribute; //$NON-NLS-1$ 43 44 // get the array 45 char[] charArray = stringIdentifier.toCharArray(); 46 47 // calculate a simple checksum-like value 48 int checkSum = 17; 49 50 for (int j = 0; j < charArray.length; j++) 51 { 52 checkSum = 3 * checkSum + charArray[j]; 53 } 54 55 // keep it positive 56 checkSum &= 0x7fffff; 57 58 // this is the full identifier used for all the parameters 59 this.parameterIdentifier = "d-" + checkSum + "-"; //$NON-NLS-1$ //$NON-NLS-2$ 60 } 61 62 /** 63 * encode a parameter name prepending calculated <code>parameterIdentifier</code>. 64 * @param paramName parameter name 65 * @return encoded parameter name in the form <code>d-<em>XXXX</em>-<em>name</em></code> 66 */ 67 public String encodeParameterName(String paramName) 68 { 69 return this.parameterIdentifier + paramName; 70 } 71 72 /** 73 * Check if the given parameter has been encoded using paramEncoder. It actually check if the parameter name starts 74 * with the calculated <code>parameterIdentifier</code>. Null safe (a null string returns <code>false</code>). 75 * @param paramName parameter name 76 * @return <code>true</code> if the given parameter as been encoded using this param encoder 77 */ 78 public boolean isParameterEncoded(String paramName) 79 { 80 return paramName != null && paramName.startsWith(this.parameterIdentifier); 81 } 82 83 }