/*--- formatted by Jindent 2.1, (www.c-lab.de/~jindent) ---*/
/**
* ***************************************************************
* JADE - Java Agent DEvelopment Framework is a framework to develop
* multi-agent systems in compliance with the FIPA specifications.
* Copyright (C) 2000 CSELT S.p.A.
* GNU Lesser General Public License
* This library 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,
* version 2.1 of the License.
* This library 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 library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
* **************************************************************
*/
package jade.core;
//#APIDOC_EXCLUDE_FILE
import jade.util.leap.Serializable;
/**
* A name string, with case insensitive comparison and equality operations.
* This class holds a <code>String</code> inside, preserving the case; however,
* all the equality and comparision operations are performed in a case
* insensitive fashion.
* @author Giovanni Rimassa - Universita' di Parma
* @version $Date: 2005-10-28 14:20:41 +0200 (ven, 28 ott 2005) $ $Revision: 5806 $
*
* Updated 1/06/2001 12:50 by Dmitri Toropov - Siemens AG
*/
public class CaseInsensitiveString implements Serializable {
/**
* @serial
*/
private final String s;
private final int hashCode;
/**
* Create a new <code>CaseInsensitiveString</code> object.
* @param name The string that will be kept inside this object.
*/
public CaseInsensitiveString(String name) {
s = name;
// the contract of String is to return 0 as the hash of an empty string
// so I am assuming here than a null string is equal to an empty string
// this trick avoid generating a null pointer exception
hashCode = (s == null ? 0 : s.toLowerCase().hashCode());
}
/**
* Converts the <code>CaseInsensitiveString</code> object into a
* string.
* @return The string stored inside by the constructor.
*/
public final String toString() {
return s;
}
/**
* Equality operation. This method compares a
* <code>CaseInsensitiveString</code> object with another or with
* a Java <code>String</code>. The comparison is case insensitive.
* @param o The Java object to compare this
* <code>CaseInsensitiveString</code> to.
* @return <code>true</code> if the strings contained within the two objects
* are equal, apart from case.
*/
public final boolean equals(Object o) {
if (o == null) {
return false;
}
if (o instanceof String) {
return equalsIgnoreCase(s, (String) o);
}
if(o instanceof CaseInsensitiveString) {
return equalsIgnoreCase(s, ((CaseInsensitiveString)o).s);
}
return false;
}
/**
* Hash code. This method returns an hash code in such a way that
* two <code>CaseInsensitiveString</code> objects differing only
* in case have the same hash code.
* @return The hash code for this
* <code>CaseInsensitiveString</code> object.
*/
public final int hashCode() {
return hashCode;
}
/**
* Static method for case insensitive string comparasion.
* For comparasion used the regionMatches approach which
* doesn't allocate any additional memory.
* @param s1, s2 The <code>String</code> objects to compare
* @return <code>true</code> if the strings are equal, apart from case.
*/
public static final boolean equalsIgnoreCase(String s1, String s2) {
if (s1 == null || s2 == null) {
return false;
}
else {
return ((s1.length() == s2.length())
&& s1.regionMatches(true, 0, s2, 0, s1.length()));
}
}
}