001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *  
010     *    http://www.apache.org/licenses/LICENSE-2.0
011     *  
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License. 
018     *  
019     */
020    package org.apache.directory.server.schema.bootstrap;
021    
022    
023    import javax.naming.NamingException;
024    
025    import org.apache.directory.server.schema.bootstrap.ProducerTypeEnum;
026    import org.apache.directory.server.schema.registries.Registries;
027    import org.apache.directory.shared.ldap.constants.SchemaConstants;
028    import org.apache.directory.shared.ldap.schema.syntaxes.ACIItemSyntaxChecker;
029    import org.apache.directory.shared.ldap.schema.syntaxes.AcceptAllSyntaxChecker;
030    import org.apache.directory.shared.ldap.schema.syntaxes.AccessPointSyntaxChecker;
031    import org.apache.directory.shared.ldap.schema.syntaxes.AttributeTypeDescriptionSyntaxChecker;
032    import org.apache.directory.shared.ldap.schema.syntaxes.AudioSyntaxChecker;
033    import org.apache.directory.shared.ldap.schema.syntaxes.BinarySyntaxChecker;
034    import org.apache.directory.shared.ldap.schema.syntaxes.BitStringSyntaxChecker;
035    import org.apache.directory.shared.ldap.schema.syntaxes.BooleanSyntaxChecker;
036    import org.apache.directory.shared.ldap.schema.syntaxes.CertificateListSyntaxChecker;
037    import org.apache.directory.shared.ldap.schema.syntaxes.CertificatePairSyntaxChecker;
038    import org.apache.directory.shared.ldap.schema.syntaxes.CertificateSyntaxChecker;
039    import org.apache.directory.shared.ldap.schema.syntaxes.CountrySyntaxChecker;
040    import org.apache.directory.shared.ldap.schema.syntaxes.DITContentRuleDescriptionSyntaxChecker;
041    import org.apache.directory.shared.ldap.schema.syntaxes.DITStructureRuleDescriptionSyntaxChecker;
042    import org.apache.directory.shared.ldap.schema.syntaxes.DLSubmitPermissionSyntaxChecker;
043    import org.apache.directory.shared.ldap.schema.syntaxes.DNSyntaxChecker;
044    import org.apache.directory.shared.ldap.schema.syntaxes.DSAQualitySyntaxSyntaxChecker;
045    import org.apache.directory.shared.ldap.schema.syntaxes.DSETypeSyntaxChecker;
046    import org.apache.directory.shared.ldap.schema.syntaxes.DataQualitySyntaxSyntaxChecker;
047    import org.apache.directory.shared.ldap.schema.syntaxes.DeliveryMethodSyntaxChecker;
048    import org.apache.directory.shared.ldap.schema.syntaxes.DirectoryStringSyntaxChecker;
049    import org.apache.directory.shared.ldap.schema.syntaxes.EnhancedGuideSyntaxChecker;
050    import org.apache.directory.shared.ldap.schema.syntaxes.FacsimileTelephoneNumberSyntaxChecker;
051    import org.apache.directory.shared.ldap.schema.syntaxes.FaxSyntaxChecker;
052    import org.apache.directory.shared.ldap.schema.syntaxes.GeneralizedTimeSyntaxChecker;
053    import org.apache.directory.shared.ldap.schema.syntaxes.GuideSyntaxChecker;
054    import org.apache.directory.shared.ldap.schema.syntaxes.Ia5StringSyntaxChecker;
055    import org.apache.directory.shared.ldap.schema.syntaxes.IntegerSyntaxChecker;
056    import org.apache.directory.shared.ldap.schema.syntaxes.JpegSyntaxChecker;
057    import org.apache.directory.shared.ldap.schema.syntaxes.LdapSyntaxDescriptionSyntaxChecker;
058    import org.apache.directory.shared.ldap.schema.syntaxes.MHSORAddressSyntaxChecker;
059    import org.apache.directory.shared.ldap.schema.syntaxes.MailPreferenceSyntaxChecker;
060    import org.apache.directory.shared.ldap.schema.syntaxes.MasterAndShadowAccessPointSyntaxChecker;
061    import org.apache.directory.shared.ldap.schema.syntaxes.MatchingRuleDescriptionSyntaxChecker;
062    import org.apache.directory.shared.ldap.schema.syntaxes.MatchingRuleUseDescriptionSyntaxChecker;
063    import org.apache.directory.shared.ldap.schema.syntaxes.NameAndOptionalUIDSyntaxChecker;
064    import org.apache.directory.shared.ldap.schema.syntaxes.NameFormDescriptionSyntaxChecker;
065    import org.apache.directory.shared.ldap.schema.syntaxes.NumericStringSyntaxChecker;
066    import org.apache.directory.shared.ldap.schema.syntaxes.ObjectClassDescriptionSyntaxChecker;
067    import org.apache.directory.shared.ldap.schema.syntaxes.OctetStringSyntaxChecker;
068    import org.apache.directory.shared.ldap.schema.syntaxes.OidSyntaxChecker;
069    import org.apache.directory.shared.ldap.schema.syntaxes.OtherMailboxSyntaxChecker;
070    import org.apache.directory.shared.ldap.schema.syntaxes.PostalAddressSyntaxChecker;
071    import org.apache.directory.shared.ldap.schema.syntaxes.PresentationAddressSyntaxChecker;
072    import org.apache.directory.shared.ldap.schema.syntaxes.PrintableStringSyntaxChecker;
073    import org.apache.directory.shared.ldap.schema.syntaxes.ProtocolInformationSyntaxChecker;
074    import org.apache.directory.shared.ldap.schema.syntaxes.SubstringAssertionSyntaxChecker;
075    import org.apache.directory.shared.ldap.schema.syntaxes.SubtreeSpecificationSyntaxChecker;
076    import org.apache.directory.shared.ldap.schema.syntaxes.SupplierAndConsumerSyntaxChecker;
077    import org.apache.directory.shared.ldap.schema.syntaxes.SupplierInformationSyntaxChecker;
078    import org.apache.directory.shared.ldap.schema.syntaxes.SupplierOrConsumerSyntaxChecker;
079    import org.apache.directory.shared.ldap.schema.syntaxes.SupportedAlgorithmSyntaxChecker;
080    import org.apache.directory.shared.ldap.schema.syntaxes.TelephoneNumberSyntaxChecker;
081    import org.apache.directory.shared.ldap.schema.syntaxes.TeletexTerminalIdentifierSyntaxChecker;
082    import org.apache.directory.shared.ldap.schema.syntaxes.TelexNumberSyntaxChecker;
083    import org.apache.directory.shared.ldap.schema.syntaxes.UtcTimeSyntaxChecker;
084    
085    
086    /**
087     * A producer of SyntaxCheckers for the core schema.
088     *
089     * @todo now we use do nothing checkers for place holder and will add as we go 
090     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
091     * @version $Rev: 781877 $
092     */
093    public class SystemSyntaxCheckerProducer extends AbstractBootstrapProducer
094    {
095        /**
096         * Creates a producer which produces all 58 of the core schema syntax's
097         * SyntaxCheckers.
098         */
099        public SystemSyntaxCheckerProducer()
100        {
101            super( ProducerTypeEnum.SYNTAX_CHECKER_PRODUCER );
102        }
103    
104    
105        public void produce( Registries registries, ProducerCallback cb ) throws NamingException
106        {
107            /*
108             * We are going to need a syntax checker for each and every one of
109             * these syntaxes.  However right now we're probably not going to be
110             * turning on syntax checking or are not as interested in it.  So we
111             * can put in place simple do nothing syntax checkers - which is really
112             * the binary syntax checker.
113             */
114    
115            /*
116             * From RFC 2252 Section 4.3.2. on Syntax Object Identifiers
117             */
118    
119            /*
120             * Value being represented        H-R OBJECT IDENTIFIER
121             * ==================================================================
122             * 0 ACI Item                         N  1.3.6.1.4.1.1466.115.121.1.1
123             * 1 Access Point                     Y  1.3.6.1.4.1.1466.115.121.1.2
124             * 2 Attribute Type Description       Y  1.3.6.1.4.1.1466.115.121.1.3
125             * 3 Audio                            N  1.3.6.1.4.1.1466.115.121.1.4
126             * 4 Binary                           N  1.3.6.1.4.1.1466.115.121.1.5
127             * 5 Bit String                       Y  1.3.6.1.4.1.1466.115.121.1.6
128             * 6 Boolean                          Y  1.3.6.1.4.1.1466.115.121.1.7
129             * 7 Certificate                      N  1.3.6.1.4.1.1466.115.121.1.8
130             * 8 Certificate List                 N  1.3.6.1.4.1.1466.115.121.1.9
131             * 9 Certificate Pair                 N  1.3.6.1.4.1.1466.115.121.1.10
132             */
133            cb.schemaObjectProduced( this, SchemaConstants.ACI_ITEM_SYNTAX, new ACIItemSyntaxChecker() );
134            cb.schemaObjectProduced( this, SchemaConstants.ACCESS_POINT_SYNTAX, new AccessPointSyntaxChecker() );
135            cb.schemaObjectProduced( this, SchemaConstants.ATTRIBUT_TYPE_DESCRIPTION_SYNTAX, new AttributeTypeDescriptionSyntaxChecker() );
136            cb.schemaObjectProduced( this, SchemaConstants.AUDIO_SYNTAX, new AudioSyntaxChecker() );
137            cb.schemaObjectProduced( this, SchemaConstants.BINARY_SYNTAX, new BinarySyntaxChecker() );
138            cb.schemaObjectProduced( this, SchemaConstants.BIT_STRING_SYNTAX, new BitStringSyntaxChecker() );
139            cb.schemaObjectProduced( this, SchemaConstants.BOOLEAN_SYNTAX, new BooleanSyntaxChecker() );
140            cb.schemaObjectProduced( this, SchemaConstants.CERTIFICATE_SYNTAX, new CertificateSyntaxChecker() );
141            cb.schemaObjectProduced( this, SchemaConstants.CERTIFICATE_LIST_SYNTAX, new CertificateListSyntaxChecker() );
142            cb.schemaObjectProduced( this, SchemaConstants.CERTIFICATE_PAIR_SYNTAX, new CertificatePairSyntaxChecker() );
143    
144            /*
145             * 10 Country String                  Y  1.3.6.1.4.1.1466.115.121.1.11
146             * 11 DN                              Y  1.3.6.1.4.1.1466.115.121.1.12
147             * 12 Data Quality Syntax             Y  1.3.6.1.4.1.1466.115.121.1.13
148             * 13 Delivery Method                 Y  1.3.6.1.4.1.1466.115.121.1.14
149             * 14 Directory String                Y  1.3.6.1.4.1.1466.115.121.1.15
150             * 15 DIT Content Rule Description    Y  1.3.6.1.4.1.1466.115.121.1.16
151             * 16 DIT Structure Rule Description  Y  1.3.6.1.4.1.1466.115.121.1.17
152             * 17 DL Submit Permission            Y  1.3.6.1.4.1.1466.115.121.1.18
153             * 18 DSA Quality Syntax              Y  1.3.6.1.4.1.1466.115.121.1.19
154             * 19 DSE Type                        Y  1.3.6.1.4.1.1466.115.121.1.20
155             */
156            cb.schemaObjectProduced( this, SchemaConstants.COUNTRY_STRING_SYNTAX, new CountrySyntaxChecker() );
157            cb.schemaObjectProduced( this, SchemaConstants.DN_SYNTAX, new DNSyntaxChecker() );
158            cb.schemaObjectProduced( this, SchemaConstants.DATA_QUALITY_SYNTAX, new DataQualitySyntaxSyntaxChecker() );
159            cb.schemaObjectProduced( this, SchemaConstants.DELIVERY_METHOD_SYNTAX, new DeliveryMethodSyntaxChecker() );
160            cb.schemaObjectProduced( this, SchemaConstants.DIRECTORY_STRING_SYNTAX, new DirectoryStringSyntaxChecker() );
161            cb.schemaObjectProduced( this, SchemaConstants.DIT_CONTENT_RULE_SYNTAX, new DITContentRuleDescriptionSyntaxChecker() );
162            cb.schemaObjectProduced( this, SchemaConstants.DIT_STRUCTURE_RULE_SYNTAX, new DITStructureRuleDescriptionSyntaxChecker() );
163            cb.schemaObjectProduced( this, SchemaConstants.DL_SUBMIT_PERMISSION_SYNTAX, new DLSubmitPermissionSyntaxChecker() );
164            cb.schemaObjectProduced( this, SchemaConstants.DSA_QUALITY_SYNTAX, new DSAQualitySyntaxSyntaxChecker() );
165            cb.schemaObjectProduced( this, SchemaConstants.DSE_TYPE_SYNTAX, new DSETypeSyntaxChecker() );
166    
167            /* 20 Enhanced Guide                  Y  1.3.6.1.4.1.1466.115.121.1.21
168             * 21 Facsimile Telephone Number      Y  1.3.6.1.4.1.1466.115.121.1.22
169             * 22 Fax                             N  1.3.6.1.4.1.1466.115.121.1.23
170             * 23 Generalized Time                Y  1.3.6.1.4.1.1466.115.121.1.24
171             * 24 Guide                           Y  1.3.6.1.4.1.1466.115.121.1.25
172             * 25 IA5 String                      Y  1.3.6.1.4.1.1466.115.121.1.26
173             * 26 INTEGER                         Y  1.3.6.1.4.1.1466.115.121.1.27
174             * 27 JPEG                            N  1.3.6.1.4.1.1466.115.121.1.28
175             * 28 Master And Shadow Access Points Y  1.3.6.1.4.1.1466.115.121.1.29
176             * 29 Matching Rule Description       Y  1.3.6.1.4.1.1466.115.121.1.30
177             */
178            cb.schemaObjectProduced( this, SchemaConstants.ENHANCED_GUIDE_SYNTAX, new EnhancedGuideSyntaxChecker() );
179            cb.schemaObjectProduced( this, SchemaConstants.FACSIMILE_TELEPHONE_NUMBER_SYNTAX, new FacsimileTelephoneNumberSyntaxChecker() );
180            cb.schemaObjectProduced( this, SchemaConstants.FAX_SYNTAX, new FaxSyntaxChecker() );
181            cb.schemaObjectProduced( this, SchemaConstants.GENERALIZED_TIME_SYNTAX, new GeneralizedTimeSyntaxChecker() );
182            cb.schemaObjectProduced( this, SchemaConstants.GUIDE_SYNTAX, new GuideSyntaxChecker() );
183            cb.schemaObjectProduced( this, SchemaConstants.IA5_STRING_SYNTAX, new Ia5StringSyntaxChecker() );
184            cb.schemaObjectProduced( this, SchemaConstants.INTEGER_SYNTAX, new IntegerSyntaxChecker() );
185            cb.schemaObjectProduced( this, SchemaConstants.JPEG_SYNTAX, new JpegSyntaxChecker() );
186            cb.schemaObjectProduced( this, SchemaConstants.MASTER_AND_SHADOW_ACCESS_POINTS_SYNTAX, new MasterAndShadowAccessPointSyntaxChecker() );
187            cb.schemaObjectProduced( this, SchemaConstants.MATCHING_RULE_DESCRIPTION_SYNTAX, new MatchingRuleDescriptionSyntaxChecker() );
188    
189            /* 30 Matching Rule Use Description   Y  1.3.6.1.4.1.1466.115.121.1.31
190             * 31 Mail Preference                 Y  1.3.6.1.4.1.1466.115.121.1.32
191             * 32 MHS OR Address                  Y  1.3.6.1.4.1.1466.115.121.1.33
192             * 33 Name And Optional UID           Y  1.3.6.1.4.1.1466.115.121.1.34
193             * 34 Name Form Description           Y  1.3.6.1.4.1.1466.115.121.1.35
194             * 35 Numeric String                  Y  1.3.6.1.4.1.1466.115.121.1.36
195             * 36 Object Class Description        Y  1.3.6.1.4.1.1466.115.121.1.37
196             * 37 OID                             Y  1.3.6.1.4.1.1466.115.121.1.38
197             * 38 Other Mailbox                   Y  1.3.6.1.4.1.1466.115.121.1.39
198             * 39 Octet String                    Y  1.3.6.1.4.1.1466.115.121.1.40
199             */
200            cb.schemaObjectProduced( this, SchemaConstants.MATCHING_RULE_USE_DESCRIPTION_SYNTAX, new MatchingRuleUseDescriptionSyntaxChecker() );
201            cb.schemaObjectProduced( this, SchemaConstants.MAIL_PREFERENCE_SYNTAX, new MailPreferenceSyntaxChecker() );
202            cb.schemaObjectProduced( this, SchemaConstants.MHS_OR_ADDRESS_SYNTAX, new MHSORAddressSyntaxChecker() );
203            cb.schemaObjectProduced( this, SchemaConstants.NAME_AND_OPTIONAL_UID_SYNTAX, new NameAndOptionalUIDSyntaxChecker() );
204            cb.schemaObjectProduced( this, SchemaConstants.NAME_FORM_DESCRIPTION_SYNTAX, new NameFormDescriptionSyntaxChecker() );
205            cb.schemaObjectProduced( this, SchemaConstants.NUMERIC_STRING_SYNTAX, new NumericStringSyntaxChecker() );
206            cb.schemaObjectProduced( this, SchemaConstants.OBJECT_CLASS_DESCRIPTION_SYNTAX, new ObjectClassDescriptionSyntaxChecker() );
207            cb.schemaObjectProduced( this, SchemaConstants.OID_SYNTAX, new OidSyntaxChecker() );
208            cb.schemaObjectProduced( this, SchemaConstants.OTHER_MAILBOX_SYNTAX, new OtherMailboxSyntaxChecker() );
209            cb.schemaObjectProduced( this, SchemaConstants.OCTET_STRING_SYNTAX, new OctetStringSyntaxChecker() );
210    
211            /*
212             * 40 Postal Address                  Y  1.3.6.1.4.1.1466.115.121.1.41
213             * 41 Protocol Information            Y  1.3.6.1.4.1.1466.115.121.1.42
214             * 42 Presentation Address            Y  1.3.6.1.4.1.1466.115.121.1.43
215             * 43 Printable String                Y  1.3.6.1.4.1.1466.115.121.1.44
216             * 44 Subtree Specification           Y  1.3.6.1.4.1.1466.115.121.1.45
217             * 45 Supplier Information            Y  1.3.6.1.4.1.1466.115.121.1.46
218             * 46 Supplier Or Consumer            Y  1.3.6.1.4.1.1466.115.121.1.47
219             * 47 Supplier And Consumer           Y  1.3.6.1.4.1.1466.115.121.1.48
220             * 48 Supported Algorithm             N  1.3.6.1.4.1.1466.115.121.1.49
221             * 49 Telephone Number                Y  1.3.6.1.4.1.1466.115.121.1.50
222             */
223            cb.schemaObjectProduced( this, SchemaConstants.POSTAL_ADDRESS_SYNTAX, new PostalAddressSyntaxChecker() );
224            cb.schemaObjectProduced( this, SchemaConstants.PROTOCOL_INFORMATION_SYNTAX, new ProtocolInformationSyntaxChecker() );
225            cb.schemaObjectProduced( this, SchemaConstants.PRESENTATION_ADDRESS_SYNTAX, new PresentationAddressSyntaxChecker() );
226            cb.schemaObjectProduced( this, SchemaConstants.PRINTABLE_STRING_SYNTAX, new PrintableStringSyntaxChecker() );
227            cb.schemaObjectProduced( this, SchemaConstants.SUBTREE_SPECIFICATION_SYNTAX, new SubtreeSpecificationSyntaxChecker() );
228            cb.schemaObjectProduced( this, SchemaConstants.SUPPLIER_INFORMATION_SYNTAX, new SupplierInformationSyntaxChecker() );
229            cb.schemaObjectProduced( this, SchemaConstants.SUPPLIER_OR_CONSUMER_SYNTAX, new SupplierOrConsumerSyntaxChecker() );
230            cb.schemaObjectProduced( this, SchemaConstants.SUPPLIER_AND_CONSUMER_SYNTAX, new SupplierAndConsumerSyntaxChecker() );
231            cb.schemaObjectProduced( this, SchemaConstants.SUPPORTED_ALGORITHM_SYNTAX, new SupportedAlgorithmSyntaxChecker() );
232            cb.schemaObjectProduced( this, SchemaConstants.TELEPHONE_NUMBER_SYNTAX, new TelephoneNumberSyntaxChecker() );
233    
234            /*
235             * 50 Teletex Terminal Identifier     Y  1.3.6.1.4.1.1466.115.121.1.51
236             * 51 Telex Number                    Y  1.3.6.1.4.1.1466.115.121.1.52
237             * 52 UTC Time                        Y  1.3.6.1.4.1.1466.115.121.1.53
238             * 53 LDAP Syntax Description         Y  1.3.6.1.4.1.1466.115.121.1.54
239             * 54 Modify Rights                   Y  1.3.6.1.4.1.1466.115.121.1.55  (No defined SC yet)
240             * 55 LDAP BootstrapSchema Definition Y  1.3.6.1.4.1.1466.115.121.1.56  (No defined SC yet) 
241             * 56 LDAP BootstrapSchema DescriptionY  1.3.6.1.4.1.1466.115.121.1.57  (No defined SC yet)
242             * 57 Substring Assertion             Y  1.3.6.1.4.1.1466.115.121.1.58
243             */
244            cb.schemaObjectProduced( this, SchemaConstants.TELETEX_TERMINAL_IDENTIFIER_SYNTAX, new TeletexTerminalIdentifierSyntaxChecker() );
245            cb.schemaObjectProduced( this, SchemaConstants.TELEX_NUMBER_SYNTAX, new TelexNumberSyntaxChecker() );
246            cb.schemaObjectProduced( this, SchemaConstants.UTC_TIME_SYNTAX, new UtcTimeSyntaxChecker() );
247            cb.schemaObjectProduced( this, SchemaConstants.LDAP_SYNTAX_DESCRIPTION_SYNTAX, new LdapSyntaxDescriptionSyntaxChecker() );
248    
249            cb.schemaObjectProduced( this, SchemaConstants.MODIFY_RIGHTS_SYNTAX, 
250                new AcceptAllSyntaxChecker( SchemaConstants.MODIFY_RIGHTS_SYNTAX ) );
251            
252            cb.schemaObjectProduced( this, SchemaConstants.LDAP_SCHEMA_DEFINITION_SYNTAX, 
253                new AcceptAllSyntaxChecker( SchemaConstants.LDAP_SCHEMA_DEFINITION_SYNTAX ) );
254            
255            cb.schemaObjectProduced( this, SchemaConstants.LDAP_SCHEMA_DESCRIPTION_SYNTAX, 
256                new AcceptAllSyntaxChecker( SchemaConstants.LDAP_SCHEMA_DESCRIPTION_SYNTAX ) );
257            
258            cb.schemaObjectProduced( this, SchemaConstants.SUBSTRING_ASSERTION_SYNTAX, new SubstringAssertionSyntaxChecker() );
259    
260            cb.schemaObjectProduced( this, SchemaConstants.ATTRIBUTE_CERTIFICATE_ASSERTION_SYNTAX, 
261                new AcceptAllSyntaxChecker( SchemaConstants.ATTRIBUTE_CERTIFICATE_ASSERTION_SYNTAX ) );
262        }
263    }