1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.ldap.server.schema.bootstrap;
18
19
20 import org.apache.ldap.common.schema.NameForm;
21 import org.apache.ldap.server.schema.NameFormRegistry;
22 import org.apache.ldap.server.schema.NameFormRegistryMonitor;
23 import org.apache.ldap.server.schema.NameFormRegistryMonitorAdapter;
24 import org.apache.ldap.server.schema.OidRegistry;
25
26 import javax.naming.NamingException;
27 import java.util.HashMap;
28 import java.util.Iterator;
29 import java.util.Map;
30
31
32 /***
33 * A plain old java object implementation of an NameFormRegistry.
34 *
35 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
36 * @version $Rev: 159259 $
37 */
38 public class BootstrapNameFormRegistry implements NameFormRegistry
39 {
40 /*** maps an OID to an NameForm */
41 private final Map byOid;
42 /*** maps an OID to a schema name*/
43 private final Map oidToSchema;
44 /*** the registry used to resolve names to OIDs */
45 private final OidRegistry oidRegistry;
46 /*** monitor notified via callback events */
47 private NameFormRegistryMonitor monitor;
48
49
50
51
52
53
54
55 /***
56 * Creates an empty BootstrapNameFormRegistry.
57 */
58 public BootstrapNameFormRegistry( OidRegistry oidRegistry )
59 {
60 this.byOid = new HashMap();
61 this.oidToSchema = new HashMap();
62 this.oidRegistry = oidRegistry;
63 this.monitor = new NameFormRegistryMonitorAdapter();
64 }
65
66
67 /***
68 * Sets the monitor that is to be notified via callback events.
69 *
70 * @param monitor the new monitor to notify of notable events
71 */
72 public void setMonitor( NameFormRegistryMonitor monitor )
73 {
74 this.monitor = monitor;
75 }
76
77
78
79
80
81
82
83 public void register( String schema, NameForm nameForm ) throws NamingException
84 {
85 if ( byOid.containsKey( nameForm.getOid() ) )
86 {
87 NamingException e = new NamingException( "nameForm w/ OID " +
88 nameForm.getOid() + " has already been registered!" );
89 monitor.registerFailed( nameForm, e );
90 throw e;
91 }
92
93 oidToSchema.put( nameForm.getOid(), schema );
94 oidRegistry.register( nameForm.getName(), nameForm.getOid() );
95 byOid.put( nameForm.getOid(), nameForm );
96 monitor.registered( nameForm );
97 }
98
99
100 public NameForm lookup( String id ) throws NamingException
101 {
102 id = oidRegistry.getOid( id );
103
104 if ( ! byOid.containsKey( id ) )
105 {
106 NamingException e = new NamingException( "nameForm w/ OID " + id
107 + " not registered!" );
108 monitor.lookupFailed( id, e );
109 throw e;
110 }
111
112 NameForm nameForm = ( NameForm ) byOid.get( id );
113 monitor.lookedUp( nameForm );
114 return nameForm;
115 }
116
117
118 public boolean hasNameForm( String id )
119 {
120 if ( oidRegistry.hasOid( id ) )
121 {
122 try
123 {
124 return byOid.containsKey( oidRegistry.getOid( id ) );
125 }
126 catch ( NamingException e )
127 {
128 return false;
129 }
130 }
131
132 return false;
133 }
134
135
136 public String getSchemaName( String id ) throws NamingException
137 {
138 id = oidRegistry.getOid( id );
139 if ( oidToSchema.containsKey( id ) )
140 {
141 return ( String ) oidToSchema.get( id );
142 }
143
144 throw new NamingException( "OID " + id + " not found in oid to " +
145 "schema name map!" );
146 }
147
148
149 public Iterator list()
150 {
151 return byOid.values().iterator();
152 }
153 }