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
40
41 public class SerializableComparator<E> extends LdapComparator<E> implements Serializable
42 {
43
44 private static final long serialVersionUID = 2L;
45
46
47 private String matchingRuleOid;
48
49
50 private transient Comparator<E> wrapped;
51
52
53 private transient SchemaManager schemaManager;
54
55
56
57
58
59
60
61 public SerializableComparator( String matchingRuleOid )
62 {
63 super( matchingRuleOid );
64 this.matchingRuleOid = matchingRuleOid;
65 }
66
67
68
69
70
71
72
73
74
75 @SuppressWarnings("unchecked")
76 @Override
77 public int compare( E o1, E o2 )
78 {
79 if ( wrapped == null )
80 {
81 try
82 {
83 wrapped = ( Comparator<E> ) schemaManager.lookupComparatorRegistry( matchingRuleOid );
84 }
85 catch ( LdapException le )
86 {
87 throw new RuntimeException( I18n.err( I18n.ERR_04221, matchingRuleOid ), le );
88 }
89 }
90
91 return wrapped.compare( o1, o2 );
92 }
93
94
95
96
97
98 @SuppressWarnings("unchecked")
99 @Override
100 public void setSchemaManager( SchemaManager schemaManager )
101 {
102 if ( wrapped == null )
103 {
104 try
105 {
106 wrapped = ( Comparator<E> )
107 schemaManager.lookupComparatorRegistry( matchingRuleOid );
108 }
109 catch ( LdapException ne )
110 {
111
112 wrapped = ( Comparator<E> )
113 new ComparableComparator<>( matchingRuleOid );
114 }
115 }
116
117 ( ( LdapComparator<E> ) wrapped ).setSchemaManager( schemaManager );
118 this.schemaManager = schemaManager;
119 }
120 }