1 17 package org.apache.ldap.server.schema; 18 19 20 import org.apache.ldap.common.schema.AttributeType; 21 import org.apache.ldap.common.schema.MatchingRule; 22 import org.apache.ldap.common.schema.ObjectClass; 23 import org.apache.ldap.common.schema.Syntax; 24 import org.apache.ldap.server.SystemPartition; 25 import org.apache.ldap.server.schema.bootstrap.*; 26 27 import javax.naming.NamingException ; 28 import java.util.ArrayList ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 32 33 39 public class GlobalRegistries implements Registries 40 { 41 private GlobalAttributeTypeRegistry attributeTypeRegistry; 42 private GlobalComparatorRegistry comparatorRegistry; 43 private GlobalDitContentRuleRegistry ditContentRuleRegistry; 44 private GlobalDitStructureRuleRegistry ditStructureRuleRegistry; 45 private GlobalMatchingRuleRegistry matchingRuleRegistry; 46 private GlobalMatchingRuleUseRegistry matchingRuleUseRegistry; 47 private GlobalNameFormRegistry nameFormRegistry; 48 private GlobalNormalizerRegistry normalizerRegistry; 49 private GlobalObjectClassRegistry objectClassRegistry; 50 private GlobalOidRegistry oidRegistry; 51 private GlobalSyntaxCheckerRegistry syntaxCheckerRegistry; 52 private GlobalSyntaxRegistry syntaxRegistry; 53 54 55 public GlobalRegistries( SystemPartition systemPartition, 56 BootstrapRegistries bootstrapRegistries ) 57 { 58 oidRegistry = new GlobalOidRegistry( systemPartition, 59 ( BootstrapOidRegistry ) bootstrapRegistries.getOidRegistry() ); 60 normalizerRegistry = new GlobalNormalizerRegistry( systemPartition, 61 ( BootstrapNormalizerRegistry ) bootstrapRegistries.getNormalizerRegistry()); 62 comparatorRegistry = new GlobalComparatorRegistry( systemPartition, 63 ( BootstrapComparatorRegistry ) bootstrapRegistries.getComparatorRegistry()); 64 syntaxCheckerRegistry = new GlobalSyntaxCheckerRegistry( systemPartition, 65 ( BootstrapSyntaxCheckerRegistry ) bootstrapRegistries.getSyntaxCheckerRegistry()); 66 syntaxRegistry = new GlobalSyntaxRegistry( systemPartition, 67 ( BootstrapSyntaxRegistry ) bootstrapRegistries.getSyntaxRegistry(), 68 oidRegistry ); 69 matchingRuleRegistry = new GlobalMatchingRuleRegistry( systemPartition, 70 ( BootstrapMatchingRuleRegistry ) bootstrapRegistries.getMatchingRuleRegistry(), 71 oidRegistry ); 72 attributeTypeRegistry = new GlobalAttributeTypeRegistry( systemPartition, 73 ( BootstrapAttributeTypeRegistry ) bootstrapRegistries.getAttributeTypeRegistry(), 74 oidRegistry ); 75 objectClassRegistry = new GlobalObjectClassRegistry( systemPartition, 76 ( BootstrapObjectClassRegistry ) bootstrapRegistries.getObjectClassRegistry(), 77 oidRegistry ); 78 ditContentRuleRegistry = new GlobalDitContentRuleRegistry( systemPartition, 79 ( BootstrapDitContentRuleRegistry ) bootstrapRegistries.getDitContentRuleRegistry(), 80 oidRegistry ); 81 ditStructureRuleRegistry = new GlobalDitStructureRuleRegistry( systemPartition, 82 ( BootstrapDitStructureRuleRegistry ) bootstrapRegistries.getDitStructureRuleRegistry(), 83 oidRegistry ); 84 matchingRuleUseRegistry = new GlobalMatchingRuleUseRegistry( systemPartition, 85 ( BootstrapMatchingRuleUseRegistry ) bootstrapRegistries.getMatchingRuleUseRegistry(), 86 oidRegistry ); 87 nameFormRegistry = new GlobalNameFormRegistry( systemPartition, 88 ( BootstrapNameFormRegistry ) bootstrapRegistries.getNameFormRegistry(), 89 oidRegistry ); 90 } 91 92 93 public AttributeTypeRegistry getAttributeTypeRegistry() 94 { 95 return attributeTypeRegistry; 96 } 97 98 public ComparatorRegistry getComparatorRegistry() 99 { 100 return comparatorRegistry; 101 } 102 103 public DITContentRuleRegistry getDitContentRuleRegistry() 104 { 105 return ditContentRuleRegistry; 106 } 107 108 public DITStructureRuleRegistry getDitStructureRuleRegistry() 109 { 110 return ditStructureRuleRegistry; 111 } 112 113 public MatchingRuleRegistry getMatchingRuleRegistry() 114 { 115 return matchingRuleRegistry; 116 } 117 118 public MatchingRuleUseRegistry getMatchingRuleUseRegistry() 119 { 120 return matchingRuleUseRegistry; 121 } 122 123 public NameFormRegistry getNameFormRegistry() 124 { 125 return nameFormRegistry; 126 } 127 128 public NormalizerRegistry getNormalizerRegistry() 129 { 130 return normalizerRegistry; 131 } 132 133 public ObjectClassRegistry getObjectClassRegistry() 134 { 135 return objectClassRegistry; 136 } 137 138 public OidRegistry getOidRegistry() 139 { 140 return oidRegistry; 141 } 142 143 public SyntaxCheckerRegistry getSyntaxCheckerRegistry() 144 { 145 return syntaxCheckerRegistry; 146 } 147 148 public SyntaxRegistry getSyntaxRegistry() 149 { 150 return syntaxRegistry; 151 } 152 153 154 158 159 166 public List checkRefInteg() 167 { 168 ArrayList errors = new ArrayList (); 169 170 Iterator list = objectClassRegistry.list(); 171 while ( list.hasNext() ) 172 { 173 ObjectClass oc = ( ObjectClass ) list.next(); 174 resolve( oc, errors ); 175 } 176 177 list = attributeTypeRegistry.list(); 178 while ( list.hasNext() ) 179 { 180 AttributeType at = ( AttributeType ) list.next(); 181 resolve( at, errors ); 182 } 183 184 list = matchingRuleRegistry.list(); 185 while ( list.hasNext() ) 186 { 187 MatchingRule mr = ( MatchingRule ) list.next(); 188 resolve( mr, errors ); 189 } 190 191 list = syntaxRegistry.list(); 192 while ( list.hasNext() ) 193 { 194 Syntax syntax = ( Syntax ) list.next(); 195 resolve( syntax, errors ); 196 } 197 198 return errors; 199 } 200 201 202 209 private boolean resolve( Syntax syntax, List errors ) 210 { 211 if ( syntax == null ) 212 { 213 return true; 214 } 215 216 try 217 { 218 syntax.getSyntaxChecker(); 219 return true; 220 } 221 catch ( NamingException e ) 222 { 223 errors.add( e ); 224 return false; 225 } 226 } 227 228 229 private boolean resolve( MatchingRule mr, List errors ) 230 { 231 boolean isSuccess = true; 232 233 if ( mr == null ) 234 { 235 return true; 236 } 237 238 try 239 { 240 if ( mr.getComparator() == null ) 241 { 242 String schema = matchingRuleRegistry.getSchemaName( mr.getOid() ); 243 errors.add( new NullPointerException ( "matchingRule " 244 + mr.getName() + " in schema " + schema + " with OID " 245 + mr.getOid() + " has a null comparator" ) ); 246 isSuccess = false; 247 } 248 } 249 catch ( NamingException e ) 250 { 251 errors.add( e ); 252 isSuccess = false; 253 } 254 255 try 256 { 257 if ( mr.getNormalizer() == null ) 258 { 259 String schema = matchingRuleRegistry.getSchemaName( mr.getOid() ); 260 errors.add( new NullPointerException ( "matchingRule " 261 + mr.getName() + " in schema " + schema + " with OID " 262 + mr.getOid() + " has a null normalizer" ) ); 263 isSuccess = false; 264 } 265 } 266 catch ( NamingException e ) 267 { 268 errors.add( e ); 269 isSuccess = false; 270 } 271 272 try 273 { 274 isSuccess &= resolve( mr.getSyntax(), errors ); 275 276 if ( mr.getSyntax() == null ) 277 { 278 String schema = matchingRuleRegistry.getSchemaName( mr.getOid() ); 279 errors.add( new NullPointerException ( "matchingRule " 280 + mr.getName() + " in schema " + schema + " with OID " + mr.getOid() 281 + " has a null Syntax" ) ); 282 isSuccess = false; 283 } 284 } 285 catch ( NamingException e ) 286 { 287 errors.add( e ); 288 isSuccess = false; 289 } 290 291 return isSuccess; 292 } 293 294 295 private boolean resolve( AttributeType at, List errors ) 296 { 297 boolean isSuccess = true; 298 boolean hasMatchingRule = false; 299 300 if ( at == null ) 301 { 302 return true; 303 } 304 305 try 306 { 307 isSuccess &= resolve( at.getSuperior(), errors ); 308 } 309 catch ( NamingException e ) 310 { 311 errors.add( e ); 312 isSuccess = false; 313 } 314 315 try 316 { 317 isSuccess &= resolve( at.getEquality(), errors ); 318 319 if ( at.getEquality() != null ) 320 { 321 hasMatchingRule |= true; 322 } 323 } 324 catch ( NamingException e ) 325 { 326 errors.add( e ); 327 isSuccess = false; 328 } 329 330 try 331 { 332 isSuccess &= resolve( at.getOrdering(), errors ); 333 334 if ( at.getOrdering() != null ) 335 { 336 hasMatchingRule |= true; 337 } 338 } 339 catch ( NamingException e ) 340 { 341 errors.add( e ); 342 isSuccess = false; 343 } 344 345 try 346 { 347 isSuccess &= resolve( at.getSubstr(), errors ); 348 349 if ( at.getSubstr() != null ) 350 { 351 hasMatchingRule |= true; 352 } 353 } 354 catch ( NamingException e ) 355 { 356 errors.add( e ); 357 isSuccess = false; 358 } 359 360 try 361 { 362 isSuccess &= resolve( at.getSyntax(), errors ); 363 364 if ( at.getSyntax() == null ) 365 { 366 String schema = attributeTypeRegistry.getSchemaName( at.getOid() ); 367 errors.add( new NullPointerException ( "attributeType " 368 + at.getName() + " in schema " + schema + " with OID " 369 + at.getOid() + " has a null Syntax" ) ); 370 isSuccess = false; 371 } 372 } 373 catch ( NamingException e ) 374 { 375 errors.add( e ); 376 isSuccess = false; 377 } 378 379 if ( hasMatchingRule ) 380 { 381 } 383 400 return isSuccess; 401 } 402 403 404 private boolean resolve( ObjectClass oc, List errors ) 405 { 406 boolean isSuccess = true; 407 408 if ( oc == null ) 409 { 410 return true; 411 } 412 413 ObjectClass[] superiors = new ObjectClass[0]; 414 try 415 { 416 superiors = oc.getSuperClasses(); 417 } 418 catch ( NamingException e ) 419 { 420 superiors = new ObjectClass[0]; 421 isSuccess = false; 422 errors.add( e ); 423 } 424 425 for ( int ii = 0; ii < superiors.length; ii++ ) 426 { 427 isSuccess &= resolve( superiors[ii], errors ) ; 428 } 429 430 AttributeType[] mayList = new AttributeType[0]; 431 try 432 { 433 mayList = oc.getMayList(); 434 } 435 catch ( NamingException e ) 436 { 437 mayList = new AttributeType[0]; 438 isSuccess = false; 439 errors.add( e ); 440 } 441 442 for ( int ii = 0; ii < mayList.length; ii++ ) 443 { 444 isSuccess &= resolve( mayList[ii], errors ) ; 445 } 446 447 448 AttributeType[] mustList = new AttributeType[0]; 449 try 450 { 451 mustList = oc.getMustList(); 452 } 453 catch ( NamingException e ) 454 { 455 mustList = new AttributeType[0]; 456 isSuccess = false; 457 errors.add( e ); 458 } 459 460 for ( int ii = 0; ii < mustList.length; ii++ ) 461 { 462 isSuccess &= resolve( mustList[ii], errors ) ; 463 } 464 465 return isSuccess; 466 } 467 } 468 | Popular Tags |