001 /**
002 *
003 */
004 package org.apache.directory.shared.ldap.schema.comparators;
005
006
007 import org.apache.directory.shared.ldap.schema.LdapComparator;
008 import org.apache.directory.shared.ldap.util.StringTools;
009
010
011 /**
012 * A comparator that compares the objectClass type with values: AUXILIARY,
013 * ABSTRACT, and STRUCTURAL.
014 *
015 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
016 * @version $Rev$
017 */
018 public class ObjectClassTypeComparator<T> extends LdapComparator<T>
019 {
020 private static final long serialVersionUID = 1L;
021
022
023 public ObjectClassTypeComparator( String oid )
024 {
025 super( oid );
026 }
027
028 public int compare( T o1, T o2 )
029 {
030 String s1 = getString( o1 );
031 String s2 = getString( o2 );
032
033 if ( s1 == null && s2 == null )
034 {
035 return 0;
036 }
037
038 if ( s1 == null )
039 {
040 return -1;
041 }
042
043 if ( s2 == null )
044 {
045 return 1;
046 }
047
048 return s1.compareTo( s2 );
049 }
050
051
052 String getString( T obj )
053 {
054 String strValue;
055
056 if ( obj == null )
057 {
058 return null;
059 }
060
061 if ( obj instanceof String )
062 {
063 strValue = ( String ) obj;
064 }
065 else if ( obj instanceof byte[] )
066 {
067 strValue = StringTools.utf8ToString( ( byte[] ) obj );
068 }
069 else
070 {
071 strValue = obj.toString();
072 }
073
074 return strValue;
075 }
076 }