1 17 package org.apache.ldap.server.schema.bootstrap; 18 19 20 import org.apache.ldap.common.schema.DITStructureRule; 21 import org.apache.ldap.server.schema.DITStructureRuleRegistry; 22 import org.apache.ldap.server.schema.DITStructureRuleRegistryMonitor; 23 import org.apache.ldap.server.schema.DITStructureRuleRegistryMonitorAdapter; 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 38 public class BootstrapDitStructureRuleRegistry implements DITStructureRuleRegistry 39 { 40 41 private final Map byOid; 42 43 private final Map oidToSchema; 44 45 private final OidRegistry oidRegistry; 46 47 private DITStructureRuleRegistryMonitor monitor; 48 49 50 54 55 58 public BootstrapDitStructureRuleRegistry( OidRegistry oidRegistry ) 59 { 60 this.byOid = new HashMap (); 61 this.oidToSchema = new HashMap (); 62 this.monitor = new DITStructureRuleRegistryMonitorAdapter(); 63 this.oidRegistry = oidRegistry; 64 } 65 66 67 72 public void setMonitor( DITStructureRuleRegistryMonitor monitor ) 73 { 74 this.monitor = monitor; 75 } 76 77 78 82 83 public void register( String schema, DITStructureRule dITStructureRule ) throws NamingException 84 { 85 if ( byOid.containsKey( dITStructureRule.getOid() ) ) 86 { 87 NamingException e = new NamingException ( "dITStructureRule w/ OID " + 88 dITStructureRule.getOid() + " has already been registered!" ); 89 monitor.registerFailed( dITStructureRule, e ); 90 throw e; 91 } 92 93 oidToSchema.put( dITStructureRule.getOid(), schema ); 94 oidRegistry.register( dITStructureRule.getName(), dITStructureRule.getOid() ); 95 byOid.put( dITStructureRule.getOid(), dITStructureRule ); 96 monitor.registered( dITStructureRule ); 97 } 98 99 100 public DITStructureRule lookup( String id ) throws NamingException 101 { 102 id = oidRegistry.getOid( id ); 103 104 if ( ! byOid.containsKey( id ) ) 105 { 106 NamingException e = new NamingException ( "dITStructureRule w/ OID " 107 + id + " not registered!" ); 108 monitor.lookupFailed( id, e ); 109 throw e; 110 } 111 112 DITStructureRule dITStructureRule = ( DITStructureRule ) byOid.get( id ); 113 monitor.lookedUp( dITStructureRule ); 114 return dITStructureRule; 115 } 116 117 118 public boolean hasDITStructureRule( 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 150 151 public Iterator list() 152 { 153 return byOid.values().iterator(); 154 } 155 } 156 | Popular Tags |