1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.model.schema.comparators;
21
22
23 import org.apache.directory.api.i18n.I18n;
24 import org.apache.directory.api.ldap.model.exception.LdapException;
25 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
26 import org.apache.directory.api.ldap.model.name.Dn;
27 import org.apache.directory.api.ldap.model.schema.LdapComparator;
28 import org.apache.directory.api.ldap.model.schema.SchemaManager;
29
30
31
32
33
34
35
36
37
38 public class UniqueMemberComparator extends LdapComparator<String>
39 {
40
41 private static final long serialVersionUID = 2L;
42
43
44 private SchemaManager schemaManager;
45
46
47
48
49
50
51 public UniqueMemberComparator( String oid )
52 {
53 super( oid );
54 }
55
56
57
58
59
60 public int compare( String dnstr1, String dnstr2 )
61 {
62 int dash1 = dnstr1.lastIndexOf( '#' );
63 int dash2 = dnstr2.lastIndexOf( '#' );
64
65 if ( ( dash1 == -1 ) && ( dash2 == -1 ) )
66 {
67
68 try
69 {
70 Dn dn1 = getDn( dnstr1 );
71 Dn dn2 = getDn( dnstr2 );
72
73 if ( dn1.equals( dn2 ) )
74 {
75 return 0;
76 }
77 else
78 {
79 return -1;
80 }
81 }
82 catch ( LdapInvalidDnException ne )
83 {
84 return -1;
85 }
86 }
87 else
88 {
89
90 if ( dnstr1.indexOf( '#' ) != dash1 )
91 {
92
93
94 return -1;
95 }
96
97 if ( dnstr2.indexOf( '#' ) != dash1 )
98 {
99
100
101 return 1;
102 }
103
104 Dn dn1 = null;
105 Dn dn2 = null;
106
107
108
109
110 String uid1 = dnstr1.substring( dash1 + 1 );
111
112 if ( dash1 > 0 )
113 {
114 try
115 {
116 dn1 = new Dn( dnstr1.substring( 0, dash1 ) );
117 }
118 catch ( LdapException ne )
119 {
120 return -1;
121 }
122 }
123 else
124 {
125 return -1;
126 }
127
128
129
130
131 String uid2 = dnstr2.substring( dash2 + 1 );
132
133 if ( dash2 > 0 )
134 {
135 try
136 {
137 dn2 = new Dn( dnstr1.substring( 0, dash2 ) );
138 }
139 catch ( LdapException ne )
140 {
141 return 1;
142 }
143 }
144 else
145 {
146 return 1;
147 }
148
149 if ( dn1.equals( dn2 ) )
150 {
151 return uid1.compareTo( uid2 );
152 }
153
154 return -1;
155 }
156 }
157
158
159
160
161
162 public void setSchemaManager( SchemaManager schemaManager )
163 {
164 this.schemaManager = schemaManager;
165 }
166
167
168 public Dn getDn( Object obj ) throws LdapInvalidDnException
169 {
170 Dn dn = null;
171
172 if ( obj instanceof Dn )
173 {
174 dn = ( Dn ) obj;
175
176 dn = ( dn.isSchemaAware() ? dn : dn.apply( schemaManager ) );
177 }
178 else if ( obj instanceof String )
179 {
180 dn = new Dn( schemaManager, ( String ) obj );
181 }
182 else
183 {
184 throw new IllegalStateException( I18n.err( I18n.ERR_04218, ( obj == null ? null : obj.getClass() ) ) );
185 }
186
187 return dn;
188 }
189 }