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 java.io.Serializable;
24 import java.util.Comparator;
25
26 import org.apache.directory.api.i18n.I18n;
27 import org.apache.directory.api.ldap.model.exception.LdapException;
28 import org.apache.directory.api.ldap.model.schema.LdapComparator;
29 import org.apache.directory.api.ldap.model.schema.SchemaManager;
30
31
32
33
34
35
36
37
38
39 public class SerializableComparator<E> extends LdapComparator<E> implements Serializable
40 {
41
42 private static final long serialVersionUID = 2L;
43
44
45 private String matchingRuleOid;
46
47
48 private transient Comparator<E> wrapped;
49
50
51 private transient SchemaManager schemaManager;
52
53
54
55
56
57 public SerializableComparator( String matchingRuleOid )
58 {
59 super( matchingRuleOid );
60 this.matchingRuleOid = matchingRuleOid;
61 }
62
63
64
65
66
67
68
69
70
71 @SuppressWarnings("unchecked")
72 public int compare( E o1, E o2 )
73 {
74 if ( wrapped == null )
75 {
76 try
77 {
78 wrapped = ( Comparator<E> ) schemaManager.lookupComparatorRegistry( matchingRuleOid );
79 }
80 catch ( LdapException e )
81 {
82 throw new RuntimeException( I18n.err( I18n.ERR_04221, matchingRuleOid ) );
83 }
84 }
85
86 return wrapped.compare( o1, o2 );
87 }
88
89
90
91
92
93 @SuppressWarnings("unchecked")
94 public void setSchemaManager( SchemaManager schemaManager )
95 {
96 if ( wrapped == null )
97 {
98 try
99 {
100 wrapped = ( Comparator<E> )
101 schemaManager.lookupComparatorRegistry( matchingRuleOid );
102 }
103 catch ( LdapException ne )
104 {
105
106 wrapped = ( Comparator<E> )
107 new ComparableComparator<Comparable<E>>( matchingRuleOid );
108 }
109 }
110
111 ( ( LdapComparator<E> ) wrapped ).setSchemaManager( schemaManager );
112 super.setSchemaManager( schemaManager );
113 this.schemaManager = schemaManager;
114 }
115 }