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 @SuppressWarnings("unchecked")
72 @Override
73 public int compare( E o1, E o2 )
74 {
75 if ( wrapped == null )
76 {
77 try
78 {
79 wrapped = ( Comparator<E> ) schemaManager.lookupComparatorRegistry( matchingRuleOid );
80 }
81 catch ( LdapException le )
82 {
83 throw new RuntimeException( I18n.err( I18n.ERR_13723_MATCHING_RULE_NOT_FOUND, matchingRuleOid ), le );
84 }
85 }
86
87 return wrapped.compare( o1, o2 );
88 }
89
90
91
92
93
94 @SuppressWarnings("unchecked")
95 @Override
96 public void setSchemaManager( SchemaManager schemaManager )
97 {
98 if ( wrapped == null )
99 {
100 try
101 {
102 wrapped = ( Comparator<E> )
103 schemaManager.lookupComparatorRegistry( matchingRuleOid );
104 }
105 catch ( LdapException ne )
106 {
107
108 wrapped = ( Comparator<E> )
109 new ComparableComparator<>( matchingRuleOid );
110 }
111 }
112
113 ( ( LdapComparator<E> ) wrapped ).setSchemaManager( schemaManager );
114 this.schemaManager = schemaManager;
115 }
116 }