You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2006/12/17 20:57:49 UTC
svn commit: r488036 [1/2] - in /directory/trunks/shared/ldap/src:
main/java/org/apache/directory/shared/ldap/schema/syntax/
main/java/org/apache/directory/shared/ldap/schema/syntax/parser/
test/java/org/apache/directory/shared/ldap/schema/syntax/
Author: ersiner
Date: Sun Dec 17 11:57:47 2006
New Revision: 488036
URL: http://svn.apache.org/viewvc?view=rev&rev=488036
Log:
Forgot to commit new files from Stefan's latest patch, my fault.
Added:
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescription.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxChecker.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescription.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxChecker.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescription.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxChecker.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITContentRuleDescriptionSchemaParser.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITStructureRuleDescriptionSchemaParser.java
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/NameFormDescriptionSchemaParser.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxCheckerTest.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxCheckerTest.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxCheckerTest.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITContentRuleDescriptionTest.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITStructureRuleDescriptionTest.java
directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserNameFormDescriptionTest.java
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescription.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescription.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescription.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescription.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * RFC 4512 - 4.1.6. DIT Content Rule Description
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DITContentRuleDescription extends AbstractSchemaDescription
+{
+
+ private List<String> auxiliaryObjectClasses;
+
+ private List<String> mustAttributeTypes;
+
+ private List<String> mayAttributeTypes;
+
+ private List<String> notAttributeTypes;
+
+
+ public DITContentRuleDescription()
+ {
+ auxiliaryObjectClasses = new ArrayList<String>();
+ mustAttributeTypes = new ArrayList<String>();
+ mayAttributeTypes = new ArrayList<String>();
+ notAttributeTypes = new ArrayList<String>();
+ }
+
+
+ public List<String> getMayAttributeTypes()
+ {
+ return mayAttributeTypes;
+ }
+
+
+ public void setMayAttributeTypes( List<String> mayAttributeTypes )
+ {
+ this.mayAttributeTypes = mayAttributeTypes;
+ }
+
+
+ public List<String> getMustAttributeTypes()
+ {
+ return mustAttributeTypes;
+ }
+
+
+ public void setMustAttributeTypes( List<String> mustAttributeTypes )
+ {
+ this.mustAttributeTypes = mustAttributeTypes;
+ }
+
+
+ public List<String> getAuxiliaryObjectClasses()
+ {
+ return auxiliaryObjectClasses;
+ }
+
+
+ public void setAuxiliaryObjectClasses( List<String> auxiliaryObjectClasses )
+ {
+ this.auxiliaryObjectClasses = auxiliaryObjectClasses;
+ }
+
+
+ public List<String> getNotAttributeTypes()
+ {
+ return notAttributeTypes;
+ }
+
+
+ public void setNotAttributeTypes( List<String> notAttributeTypes )
+ {
+ this.notAttributeTypes = notAttributeTypes;
+ }
+
+
+ public void addAuxiliaryAttributeType( String oid )
+ {
+ auxiliaryObjectClasses.add( oid );
+ }
+
+
+ public void addMustAttributeType( String oid )
+ {
+ mustAttributeTypes.add( oid );
+ }
+
+
+ public void addMayAttributeType( String oid )
+ {
+ mayAttributeTypes.add( oid );
+ }
+
+
+ public void addNotAttributeType( String oid )
+ {
+ notAttributeTypes.add( oid );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxChecker.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxChecker.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxChecker.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.text.ParseException;
+
+import javax.naming.NamingException;
+
+import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.schema.syntax.parser.DITContentRuleDescriptionSchemaParser;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+
+/**
+ * A SyntaxChecker which verifies that a value follows the
+ * DIT content rule descripton syntax according to RFC 4512, par 4.2.6:
+ *
+ * <pre>
+ * DITContentRuleDescription = LPAREN WSP
+ * numericoid ; object identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * [ SP "AUX" SP oids ] ; auxiliary object classes
+ * [ SP "MUST" SP oids ] ; attribute types
+ * [ SP "MAY" SP oids ] ; attribute types
+ * [ SP "NOT" SP oids ] ; attribute types
+ * extensions WSP RPAREN ; extensions
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DITContentRuleDescriptionSyntaxChecker implements SyntaxChecker
+{
+
+ /** The Syntax OID, according to RFC 4517, par. 3.3.7 */
+ public static final String OID = "1.3.6.1.4.1.1466.115.121.1.16";
+
+ /** The schema parser used to parse the DITContentRuleDescription Syntax */
+ private DITContentRuleDescriptionSchemaParser schemaParser = new DITContentRuleDescriptionSchemaParser();
+
+
+ /**
+ *
+ * Creates a new instance of DITContentRuleDescriptionSyntaxChecker.
+ *
+ */
+ public DITContentRuleDescriptionSyntaxChecker()
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#getSyntaxOid()
+ */
+ public String getSyntaxOid()
+ {
+ return OID;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#assertSyntax(java.lang.Object)
+ */
+ public void assertSyntax( Object value ) throws NamingException
+ {
+ if ( !isValidSyntax( value ) )
+ {
+ throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX );
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#isValidSyntax(java.lang.Object)
+ */
+ public boolean isValidSyntax( Object value )
+ {
+ String strValue;
+
+ if ( value == null )
+ {
+ return false;
+ }
+
+ if ( value instanceof String )
+ {
+ strValue = ( String ) value;
+ }
+ else if ( value instanceof byte[] )
+ {
+ strValue = StringTools.utf8ToString( ( byte[] ) value );
+ }
+ else
+ {
+ strValue = value.toString();
+ }
+
+ try
+ {
+ schemaParser.parseDITContentRuleDescription( strValue );
+ return true;
+ }
+ catch ( ParseException pe )
+ {
+ return false;
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescription.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescription.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescription.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescription.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * RFC 4512 - 4.1.7. DIT Structure Rule Description
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DITStructureRuleDescription extends AbstractSchemaDescription
+{
+
+ private Integer ruleId;
+
+ private String form;
+
+ private List<Integer> superRules;
+
+
+ public DITStructureRuleDescription()
+ {
+ ruleId = 0;
+ form = null;
+ superRules = new ArrayList<Integer>();
+ }
+
+
+ public String getForm()
+ {
+ return form;
+ }
+
+
+ public void setForm( String form )
+ {
+ this.form = form;
+ }
+
+
+
+ public Integer getRuleId()
+ {
+ return ruleId;
+ }
+
+
+ public void setRuleId( Integer ruleId )
+ {
+ this.ruleId = ruleId;
+ }
+
+
+ public List<Integer> getSuperRules()
+ {
+ return superRules;
+ }
+
+
+ public void setSuperRules( List<Integer> superRules )
+ {
+ this.superRules = superRules;
+ }
+
+
+ public void addSuperRule( Integer superRule )
+ {
+ superRules.add( superRule );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxChecker.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxChecker.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxChecker.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.text.ParseException;
+
+import javax.naming.NamingException;
+
+import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.schema.syntax.parser.DITStructureRuleDescriptionSchemaParser;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+
+/**
+ * A SyntaxChecker which verifies that a value follows the
+ * DIT structure rule descripton syntax according to RFC 4512, par 4.2.7.1:
+ *
+ * <pre>
+ * DITStructureRuleDescription = LPAREN WSP
+ * ruleid ; rule identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * SP "FORM" SP oid ; NameForm
+ * [ SP "SUP" ruleids ] ; superior rules
+ * extensions WSP RPAREN ; extensions
+ *
+ * ruleids = ruleid / ( LPAREN WSP ruleidlist WSP RPAREN )
+ * ruleidlist = ruleid *( SP ruleid )
+ * ruleid = numbers
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DITStructureRuleDescriptionSyntaxChecker implements SyntaxChecker
+{
+
+ /** The Syntax OID, according to RFC 4517, par. 3.3.8 */
+ public static final String OID = "1.3.6.1.4.1.1466.115.121.1.17";
+
+ /** The schema parser used to parse the DITContentRuleDescription Syntax */
+ private DITStructureRuleDescriptionSchemaParser schemaParser = new DITStructureRuleDescriptionSchemaParser();
+
+
+ /**
+ *
+ * Creates a new instance of DITContentRuleDescriptionSyntaxChecker.
+ *
+ */
+ public DITStructureRuleDescriptionSyntaxChecker()
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#getSyntaxOid()
+ */
+ public String getSyntaxOid()
+ {
+ return OID;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#assertSyntax(java.lang.Object)
+ */
+ public void assertSyntax( Object value ) throws NamingException
+ {
+ if ( !isValidSyntax( value ) )
+ {
+ throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX );
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#isValidSyntax(java.lang.Object)
+ */
+ public boolean isValidSyntax( Object value )
+ {
+ String strValue;
+
+ if ( value == null )
+ {
+ return false;
+ }
+
+ if ( value instanceof String )
+ {
+ strValue = ( String ) value;
+ }
+ else if ( value instanceof byte[] )
+ {
+ strValue = StringTools.utf8ToString( ( byte[] ) value );
+ }
+ else
+ {
+ strValue = value.toString();
+ }
+
+ try
+ {
+ schemaParser.parseDITStructureRuleDescription( strValue );
+ return true;
+ }
+ catch ( ParseException pe )
+ {
+ return false;
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescription.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescription.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescription.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescription.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * RFC 4512 - 4.1.7.2. Name Form Description
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class NameFormDescription extends AbstractSchemaDescription
+{
+
+ private String structuralObjectClass;
+
+ private List<String> mustAttributeTypes;
+
+ private List<String> mayAttributeTypes;
+
+
+ public NameFormDescription()
+ {
+ structuralObjectClass = null;
+ mustAttributeTypes = new ArrayList<String>();
+ mayAttributeTypes = new ArrayList<String>();
+ }
+
+
+ public List<String> getMayAttributeTypes()
+ {
+ return mayAttributeTypes;
+ }
+
+
+ public void setMayAttributeTypes( List<String> mayAttributeTypes )
+ {
+ this.mayAttributeTypes = mayAttributeTypes;
+ }
+
+
+ public List<String> getMustAttributeTypes()
+ {
+ return mustAttributeTypes;
+ }
+
+
+ public void setMustAttributeTypes( List<String> mustAttributeTypes )
+ {
+ this.mustAttributeTypes = mustAttributeTypes;
+ }
+
+
+ public void addMustAttributeType( String oid )
+ {
+ mustAttributeTypes.add( oid );
+ }
+
+
+ public void addMayAttributeType( String oid )
+ {
+ mayAttributeTypes.add( oid );
+ }
+
+
+ public String getStructuralObjectClass()
+ {
+ return structuralObjectClass;
+ }
+
+
+ public void setStructuralObjectClass( String structuralObjectClass )
+ {
+ this.structuralObjectClass = structuralObjectClass;
+ }
+
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxChecker.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxChecker.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxChecker.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.text.ParseException;
+
+import javax.naming.NamingException;
+
+import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.schema.syntax.parser.NameFormDescriptionSchemaParser;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+
+/**
+ * A SyntaxChecker which verifies that a value follows the
+ * name descripton syntax according to RFC 4512, par 4.2.7.2:
+ *
+ * <pre>
+ * NameFormDescription = LPAREN WSP
+ * numericoid ; object identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * SP "OC" SP oid ; structural object class
+ * SP "MUST" SP oids ; attribute types
+ * [ SP "MAY" SP oids ] ; attribute types
+ * extensions WSP RPAREN ; extensions
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class NameFormDescriptionSyntaxChecker implements SyntaxChecker
+{
+
+ /** The Syntax OID, according to RFC 4517, par. 3.3.22 */
+ public static final String OID = "1.3.6.1.4.1.1466.115.121.1.35";
+
+ /** The schema parser used to parse the DITContentRuleDescription Syntax */
+ private NameFormDescriptionSchemaParser schemaParser = new NameFormDescriptionSchemaParser();
+
+
+ /**
+ *
+ * Creates a new instance of DITContentRuleDescriptionSyntaxChecker.
+ *
+ */
+ public NameFormDescriptionSyntaxChecker()
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#getSyntaxOid()
+ */
+ public String getSyntaxOid()
+ {
+ return OID;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#assertSyntax(java.lang.Object)
+ */
+ public void assertSyntax( Object value ) throws NamingException
+ {
+ if ( !isValidSyntax( value ) )
+ {
+ throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX );
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#isValidSyntax(java.lang.Object)
+ */
+ public boolean isValidSyntax( Object value )
+ {
+ String strValue;
+
+ if ( value == null )
+ {
+ return false;
+ }
+
+ if ( value instanceof String )
+ {
+ strValue = ( String ) value;
+ }
+ else if ( value instanceof byte[] )
+ {
+ strValue = StringTools.utf8ToString( ( byte[] ) value );
+ }
+ else
+ {
+ strValue = value.toString();
+ }
+
+ try
+ {
+ schemaParser.parseNameFormDescription( strValue );
+ return true;
+ }
+ catch ( ParseException pe )
+ {
+ return false;
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITContentRuleDescriptionSchemaParser.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITContentRuleDescriptionSchemaParser.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITContentRuleDescriptionSchemaParser.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITContentRuleDescriptionSchemaParser.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax.parser;
+
+
+import java.text.ParseException;
+
+import org.apache.directory.shared.ldap.schema.syntax.AbstractSchemaDescription;
+import org.apache.directory.shared.ldap.schema.syntax.DITContentRuleDescription;
+
+import antlr.RecognitionException;
+import antlr.TokenStreamException;
+
+
+/**
+ * A parser for RFC 4512 DIT content rule descriptons
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DITContentRuleDescriptionSchemaParser extends AbstractSchemaParser
+{
+
+ /**
+ * Creates a schema parser instance.
+ */
+ public DITContentRuleDescriptionSchemaParser()
+ {
+ super();
+ }
+
+
+ /**
+ * Parses a DIT content rule description according to RFC 4512:
+ *
+ * <pre>
+ * DITContentRuleDescription = LPAREN WSP
+ * numericoid ; object identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * [ SP "AUX" SP oids ] ; auxiliary object classes
+ * [ SP "MUST" SP oids ] ; attribute types
+ * [ SP "MAY" SP oids ] ; attribute types
+ * [ SP "NOT" SP oids ] ; attribute types
+ * extensions WSP RPAREN ; extensions
+ * </pre>
+ *
+ * @param ditContentRuleDescription the DIT content rule description to be parsed
+ * @return the parsed DITContentRuleDescription bean
+ * @throws ParseException if there are any recognition errors (bad syntax)
+ */
+ public synchronized DITContentRuleDescription parseDITContentRuleDescription( String ditContentRuleDescription )
+ throws ParseException
+ {
+
+ if ( ditContentRuleDescription == null )
+ {
+ throw new ParseException( "Null", 0 );
+ }
+
+ reset( ditContentRuleDescription ); // reset and initialize the parser / lexer pair
+
+ try
+ {
+ DITContentRuleDescription dcrd = parser.ditContentRuleDescription();
+ return dcrd;
+ }
+ catch ( RecognitionException re )
+ {
+ String msg = "Parser failure on DIT content rule description:\n\t" + ditContentRuleDescription;
+ msg += "\nAntlr message: " + re.getMessage();
+ msg += "\nAntlr column: " + re.getColumn();
+ throw new ParseException( msg, re.getColumn() );
+ }
+ catch ( TokenStreamException tse )
+ {
+ String msg = "Parser failure on DIT content rule description:\n\t" + ditContentRuleDescription;
+ msg += "\nAntlr message: " + tse.getMessage();
+ throw new ParseException( msg, 0 );
+ }
+
+ }
+
+
+ public AbstractSchemaDescription parse( String schemaDescription ) throws ParseException
+ {
+ return parseDITContentRuleDescription( schemaDescription );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITStructureRuleDescriptionSchemaParser.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITStructureRuleDescriptionSchemaParser.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITStructureRuleDescriptionSchemaParser.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/DITStructureRuleDescriptionSchemaParser.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax.parser;
+
+
+import java.text.ParseException;
+
+import org.apache.directory.shared.ldap.schema.syntax.AbstractSchemaDescription;
+import org.apache.directory.shared.ldap.schema.syntax.DITStructureRuleDescription;
+
+import antlr.RecognitionException;
+import antlr.TokenStreamException;
+
+
+/**
+ * A parser for RFC 4512 DIT structure rule descriptons
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DITStructureRuleDescriptionSchemaParser extends AbstractSchemaParser
+{
+
+ /**
+ * Creates a schema parser instance.
+ */
+ public DITStructureRuleDescriptionSchemaParser()
+ {
+ super();
+ }
+
+
+ /**
+ * Parses a DIT structure rule description according to RFC 4512:
+ *
+ * <pre>
+ * DITStructureRuleDescription = LPAREN WSP
+ * ruleid ; rule identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * SP "FORM" SP oid ; NameForm
+ * [ SP "SUP" ruleids ] ; superior rules
+ * extensions WSP RPAREN ; extensions
+ *
+ * ruleids = ruleid / ( LPAREN WSP ruleidlist WSP RPAREN )
+ * ruleidlist = ruleid *( SP ruleid )
+ * ruleid = numbers
+ * </pre>
+ *
+ * @param ditStructureRuleDescription the DIT structure rule description to be parsed
+ * @return the parsed DITStructureRuleDescription bean
+ * @throws ParseException if there are any recognition errors (bad syntax)
+ */
+ public synchronized DITStructureRuleDescription parseDITStructureRuleDescription( String ditStructureRuleDescription )
+ throws ParseException
+ {
+
+ if ( ditStructureRuleDescription == null )
+ {
+ throw new ParseException( "Null", 0 );
+ }
+
+ reset( ditStructureRuleDescription ); // reset and initialize the parser / lexer pair
+
+ try
+ {
+ DITStructureRuleDescription dsrd = parser.ditStructureRuleDescription();
+ return dsrd;
+ }
+ catch ( RecognitionException re )
+ {
+ String msg = "Parser failure on DIT structure rule description:\n\t" + ditStructureRuleDescription;
+ msg += "\nAntlr message: " + re.getMessage();
+ msg += "\nAntlr column: " + re.getColumn();
+ throw new ParseException( msg, re.getColumn() );
+ }
+ catch ( TokenStreamException tse )
+ {
+ String msg = "Parser failure on DIT structure rule description:\n\t" + ditStructureRuleDescription;
+ msg += "\nAntlr message: " + tse.getMessage();
+ throw new ParseException( msg, 0 );
+ }
+
+ }
+
+
+ public AbstractSchemaDescription parse( String schemaDescription ) throws ParseException
+ {
+ return parseDITStructureRuleDescription( schemaDescription );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/NameFormDescriptionSchemaParser.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/NameFormDescriptionSchemaParser.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/NameFormDescriptionSchemaParser.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/parser/NameFormDescriptionSchemaParser.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax.parser;
+
+
+import java.text.ParseException;
+
+import org.apache.directory.shared.ldap.schema.syntax.AbstractSchemaDescription;
+import org.apache.directory.shared.ldap.schema.syntax.NameFormDescription;
+
+import antlr.RecognitionException;
+import antlr.TokenStreamException;
+
+
+/**
+ * A parser for RFC 4512 name form descriptons
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class NameFormDescriptionSchemaParser extends AbstractSchemaParser
+{
+
+ /**
+ * Creates a schema parser instance.
+ */
+ public NameFormDescriptionSchemaParser()
+ {
+ super();
+ }
+
+
+ /**
+ * Parses a name form description according to RFC 4512:
+ *
+ * <pre>
+ * NameFormDescription = LPAREN WSP
+ * numericoid ; object identifier
+ * [ SP "NAME" SP qdescrs ] ; short names (descriptors)
+ * [ SP "DESC" SP qdstring ] ; description
+ * [ SP "OBSOLETE" ] ; not active
+ * SP "OC" SP oid ; structural object class
+ * SP "MUST" SP oids ; attribute types
+ * [ SP "MAY" SP oids ] ; attribute types
+ * extensions WSP RPAREN ; extensions
+ * </pre>
+ *
+ * @param nameFormDescription the name form description to be parsed
+ * @return the parsed NameFormDescription bean
+ * @throws ParseException if there are any recognition errors (bad syntax)
+ */
+ public synchronized NameFormDescription parseNameFormDescription( String nameFormDescription )
+ throws ParseException
+ {
+
+ if ( nameFormDescription == null )
+ {
+ throw new ParseException( "Null", 0 );
+ }
+
+ reset( nameFormDescription ); // reset and initialize the parser / lexer pair
+
+ try
+ {
+ NameFormDescription nfd = parser.nameFormDescription();
+ return nfd;
+ }
+ catch ( RecognitionException re )
+ {
+ String msg = "Parser failure on name form description:\n\t" + nameFormDescription;
+ msg += "\nAntlr message: " + re.getMessage();
+ msg += "\nAntlr column: " + re.getColumn();
+ throw new ParseException( msg, re.getColumn() );
+ }
+ catch ( TokenStreamException tse )
+ {
+ String msg = "Parser failure on name form description:\n\t" + nameFormDescription;
+ msg += "\nAntlr message: " + tse.getMessage();
+ throw new ParseException( msg, 0 );
+ }
+
+ }
+
+
+ public AbstractSchemaDescription parse( String schemaDescription ) throws ParseException
+ {
+ return parseNameFormDescription( schemaDescription );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxCheckerTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxCheckerTest.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxCheckerTest.java (added)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITContentRuleDescriptionSyntaxCheckerTest.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import junit.framework.TestCase;
+
+
+/**
+ * Test cases for DITContentRuleDescriptionSyntaxChecker.
+ *
+ * There are also many test cases in SchemaParserDITContentRuleDescriptionTest.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DITContentRuleDescriptionSyntaxCheckerTest extends TestCase
+{
+ private DITContentRuleDescriptionSyntaxChecker checker = new DITContentRuleDescriptionSyntaxChecker();
+
+ public void testValid()
+ {
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE AUX ( pilotOrganization $ 2.5.6.5 ) )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE AUX ( pilotOrganization $ 2.5.6.5 ) MUST ( objectClass $ o ) )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE AUX ( pilotOrganization $ 2.5.6.5 ) MUST ( objectClass $ o ) MAY ( l $ st ) )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE AUX ( pilotOrganization $ 2.5.6.5 ) MUST ( objectClass $ o ) MAY ( l $ st ) NOT ( 1.2.3.4.5.6.7.8.9.0 $ ou ) )" ) );
+
+
+ assertTrue( checker.isValidSyntax( "(2.5.6.4)" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization' DESC 'content rule for organization' OBSOLETE AUX ( pilotOrganization $ 2.5.6.5 ) MUST ( objectClass $ o ) MAY ( l $ st ) NOT (1.2.3.4.5.6.7.8.9.0 $ ou))" ) );
+ }
+
+ public void testInvalid()
+ {
+ // null
+ assertFalse( checker.isValidSyntax( null ) );
+
+ // empty
+ assertFalse( checker.isValidSyntax( "" ) );
+
+ // missing/invalid OID
+ assertFalse( checker.isValidSyntax( "()" ) );
+ assertFalse( checker.isValidSyntax( "( )" ) );
+ assertFalse( checker.isValidSyntax( "( . )" ) );
+ assertFalse( checker.isValidSyntax( "( 1 )" ) );
+ assertFalse( checker.isValidSyntax( "( 1. )" ) );
+ assertFalse( checker.isValidSyntax( "( 1.2. )" ) );
+ assertFalse( checker.isValidSyntax( "( 1.A )" ) );
+ assertFalse( checker.isValidSyntax( "( A.B )" ) );
+
+ // missing right parenthesis
+ assertFalse( checker.isValidSyntax( "( 2.5.6.4 NAME 'organization'" ) );
+
+ // missing quotes
+ assertFalse( checker.isValidSyntax( "( 2.5.6.4 NAME organization )" ) );
+
+ // lowercase NAME, DESC, AUX
+ assertFalse( checker.isValidSyntax( "( 2.5.6.4 name 'organization' desc 'content rule for organization' aux ( pilotOrganization $ 2.5.6.5 ) )" ) );
+
+ }
+
+}
Added: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxCheckerTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxCheckerTest.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxCheckerTest.java (added)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/DITStructureRuleDescriptionSyntaxCheckerTest.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import junit.framework.TestCase;
+
+
+/**
+ * Test cases for DITStructureRuleDescriptionSyntaxChecker.
+ *
+ * There are also many test cases in SchemaParserDITStructureRuleDescriptionTest.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DITStructureRuleDescriptionSyntaxCheckerTest extends TestCase
+{
+ private DITStructureRuleDescriptionSyntaxChecker checker = new DITStructureRuleDescriptionSyntaxChecker();
+
+ public void testValid()
+ {
+ assertTrue( checker.isValidSyntax( "( 2 FORM 2.5.15.3 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' FORM 2.5.15.3 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' FORM 2.5.15.3 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' OBSOLETE FORM 2.5.15.3 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' OBSOLETE FORM 2.5.15.3 SUP 1 )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' OBSOLETE FORM 2.5.15.3 SUP ( 1 ) )" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' OBSOLETE FORM 2.5.15.3 SUP ( 1 1234567890 5 ) )" ) );
+
+ assertTrue( checker.isValidSyntax( "(2 FORM 2.5.15.3)" ) );
+ assertTrue( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' OBSOLETE FORM 2.5.15.3 SUP (1 1234567890 5 ))" ) );
+ }
+
+ public void testInvalid()
+ {
+ // null
+ assertFalse( checker.isValidSyntax( null ) );
+
+ // empty
+ assertFalse( checker.isValidSyntax( "" ) );
+
+ // missing/invalid ruleid
+ assertFalse( checker.isValidSyntax( "()" ) );
+ assertFalse( checker.isValidSyntax( "( )" ) );
+ assertFalse( checker.isValidSyntax( "( . )" ) );
+ assertFalse( checker.isValidSyntax( "( 1 )" ) );
+ assertFalse( checker.isValidSyntax( "( 1.2 )" ) );
+ assertFalse( checker.isValidSyntax( "( A )" ) );
+ assertFalse( checker.isValidSyntax( "( A.B )" ) );
+
+ // missing right parenthesis
+ assertFalse( checker.isValidSyntax( "( 2 FORM 2.5.15.3" ) );
+
+ // missing quotes
+ assertFalse( checker.isValidSyntax( "( 2 NAME organization FORM 2.5.15.3 )" ) );
+
+ // lowercase NAME, DESC, FORM
+ assertFalse( checker.isValidSyntax( "( 2 name 'organization' desc 'organization structure rule' form 2.5.15.3 )" ) );
+
+ // missing FORM
+ assertFalse( checker.isValidSyntax( "( 2 NAME 'organization' DESC 'organization structure rule' )" ) );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxCheckerTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxCheckerTest.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxCheckerTest.java (added)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/NameFormDescriptionSyntaxCheckerTest.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import junit.framework.TestCase;
+
+
+/**
+ * Test cases for NameFormDescriptionSyntaxChecker.
+ *
+ * There are also many test cases in SchemaParserNameFormDescriptionTest.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class NameFormDescriptionSyntaxCheckerTest extends TestCase
+{
+ private NameFormDescriptionSyntaxChecker checker = new NameFormDescriptionSyntaxChecker();
+
+ public void testValid()
+ {
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 OC o MUST m )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 OC o MUST m NAME 'orgNameForm' )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 OC o MUST m NAME 'orgNameForm' DESC 'orgNameForm' )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 MUST m NAME 'orgNameForm' DESC 'orgNameForm' OC organization )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm' DESC 'orgNameForm' OC organization MUST o )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm' DESC 'orgNameForm' OC organization MUST ( o ) MAY ( ou $ cn ) )" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm' DESC 'orgNameForm' OC organization MUST ( o ) MAY ( ou $ cn ) )" ) );
+
+
+ assertTrue( checker.isValidSyntax( "(2.5.15.3 OC o MUST m)" ) );
+ assertTrue( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm' DESC 'orgNameForm' OC organization MUST (o) MAY (ou$cn))" ) );
+ }
+
+ public void testInvalid()
+ {
+ // null
+ assertFalse( checker.isValidSyntax( null ) );
+
+ // empty
+ assertFalse( checker.isValidSyntax( "" ) );
+
+ // missing/invalid OID
+ assertFalse( checker.isValidSyntax( "()" ) );
+ assertFalse( checker.isValidSyntax( "( )" ) );
+ assertFalse( checker.isValidSyntax( "( . )" ) );
+ assertFalse( checker.isValidSyntax( "( 1 )" ) );
+ assertFalse( checker.isValidSyntax( "( 1. )" ) );
+ assertFalse( checker.isValidSyntax( "( 1.2. )" ) );
+ assertFalse( checker.isValidSyntax( "( 1.A )" ) );
+ assertFalse( checker.isValidSyntax( "( A.B )" ) );
+
+ // missing right parenthesis
+ assertFalse( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm'" ) );
+
+ // missing quotes
+ assertFalse( checker.isValidSyntax( "( 2.5.15.3 NAME orgNameForm )" ) );
+
+ // lowercase NAME, DESC, AUX
+ assertFalse( checker.isValidSyntax( "( 2.5.15.3 name 'orgNameForm' desc 'orgNameForm' oc o )" ) );
+
+ assertFalse( checker.isValidSyntax( "( 2.5.15.3 )" ) );
+ assertFalse( checker.isValidSyntax( "( 2.5.15.3 NAME 'orgNameForm' )" ) );
+ }
+
+}
Added: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITContentRuleDescriptionTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITContentRuleDescriptionTest.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITContentRuleDescriptionTest.java (added)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITContentRuleDescriptionTest.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,490 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.text.ParseException;
+
+import junit.framework.TestCase;
+
+import org.apache.directory.shared.ldap.schema.syntax.parser.DITContentRuleDescriptionSchemaParser;
+
+
+/**
+ * Tests the DITContentRuleDescriptionSchemaParser class.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SchemaParserDITContentRuleDescriptionTest extends TestCase
+{
+ /** the parser instance */
+ private DITContentRuleDescriptionSchemaParser parser;
+
+
+ protected void setUp() throws Exception
+ {
+ parser = new DITContentRuleDescriptionSchemaParser();
+ }
+
+
+ protected void tearDown() throws Exception
+ {
+ parser = null;
+ }
+
+
+ /**
+ * Test numericoid
+ *
+ * @throws ParseException
+ */
+ public void testNumericOid() throws ParseException
+ {
+ SchemaParserTestUtils.testNumericOid( parser, "" );
+ }
+
+
+ /**
+ * Tests NAME and its values
+ *
+ * @throws ParseException
+ */
+ public void testNames() throws ParseException
+ {
+ SchemaParserTestUtils.testNames( parser, "1.1", "" );
+ }
+
+
+ /**
+ * Tests DESC
+ *
+ * @throws ParseException
+ */
+ public void testDescription() throws ParseException
+ {
+ SchemaParserTestUtils.testDescription( parser, "1.1", "" );
+ }
+
+
+ /**
+ * Tests OBSOLETE
+ *
+ * @throws ParseException
+ */
+ public void testObsolete() throws ParseException
+ {
+ SchemaParserTestUtils.testObsolete( parser, "1.1", "" );
+ }
+
+
+ /**
+ * Test AUX and its values.
+ *
+ * @throws ParseException
+ */
+ public void testAux() throws ParseException
+ {
+ String value = null;
+ DITContentRuleDescription dcrd = null;
+
+ // no AUX
+ value = "( 1.1 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 0, dcrd.getAuxiliaryObjectClasses().size() );
+
+ // AUX simple numericoid
+ value = "( 1.1 AUX 1.2.3 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "1.2.3", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+
+ // AUX simple descr
+ value = "( 1.1 AUX top )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "top", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+
+ // AUX single numericoid
+ value = "( 1.1 AUX ( 1.2.3.4.5 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "1.2.3.4.5", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+
+ // AUX single descr
+ value = "( 1.1 AUX ( A-Z-0-9 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "A-Z-0-9", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+
+ // AUX multi numericoid
+ value = "( 1.1 AUX ( 1.2.3 $ 1.2.3.4.5 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 2, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "1.2.3", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "1.2.3.4.5", dcrd.getAuxiliaryObjectClasses().get( 1 ) );
+
+ // AUX multi descr
+ value = "( 1.1 AUX ( top1 $ top2 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 2, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "top1", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "top2", dcrd.getAuxiliaryObjectClasses().get( 1 ) );
+
+ // AUX multi mixed
+ value = "( 1.1 AUX ( top1 $ 1.2.3.4 $ top2 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 3, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "top1", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "1.2.3.4", dcrd.getAuxiliaryObjectClasses().get( 1 ) );
+ assertEquals( "top2", dcrd.getAuxiliaryObjectClasses().get( 2 ) );
+
+ // AUX multi mixed no space
+ value = "( 1.1 AUX (TOP-1$1.2.3.4$TOP-2) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 3, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "TOP-1", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "1.2.3.4", dcrd.getAuxiliaryObjectClasses().get( 1 ) );
+ assertEquals( "TOP-2", dcrd.getAuxiliaryObjectClasses().get( 2 ) );
+
+ // AUX multi mixed many spaces
+ value = "( 1.1 AUX ( top1 $ 1.2.3.4$top2 ) )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 3, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "top1", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "1.2.3.4", dcrd.getAuxiliaryObjectClasses().get( 1 ) );
+ assertEquals( "top2", dcrd.getAuxiliaryObjectClasses().get( 2 ) );
+
+ // no quote allowed
+ value = "( 1.1 AUX 'top' )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid AUX 'top' (quoted)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // no quote allowed
+ value = "( 1.1 AUX '1.2.3.4' )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid AUX '1.2.3.4' (quoted)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // invalid character
+ value = "( 1.1 AUX 1.2.3.4.A )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid AUX '1.2.3.4.A' (invalid character)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // invalid start
+ value = "( 1.1 AUX ( top1 $ -top2 ) )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid AUX '-top' (starts with hypen)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // invalid separator
+ value = "( 1.1 AUX ( top1 top2 ) )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid separator (no DOLLAR)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // empty AUX
+ value = "( 1.1 AUX )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, no AUX value" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+ }
+
+
+ /**
+ * Test MUST and its values.
+ * Very similar to AUX, so here are less test cases.
+ *
+ * @throws ParseException
+ */
+ public void testMust() throws ParseException
+ {
+ String value = null;
+ DITContentRuleDescription dcrd = null;
+
+ // no MUST
+ value = "( 1.1 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 0, dcrd.getMustAttributeTypes().size() );
+
+ // MUST simple numericoid
+ value = "( 1.1 MUST 1.2.3 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getMustAttributeTypes().size() );
+ assertEquals( "1.2.3", dcrd.getMustAttributeTypes().get( 0 ) );
+
+ // MUST mulitple
+ value = "(1.1 MUST (cn$sn $11.22.33.44.55 $ objectClass ))";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 4, dcrd.getMustAttributeTypes().size() );
+ assertEquals( "cn", dcrd.getMustAttributeTypes().get( 0 ) );
+ assertEquals( "sn", dcrd.getMustAttributeTypes().get( 1 ) );
+ assertEquals( "11.22.33.44.55", dcrd.getMustAttributeTypes().get( 2 ) );
+ assertEquals( "objectClass", dcrd.getMustAttributeTypes().get( 3 ) );
+
+ // invalid value
+ value = "( 1.1 MUST ( c_n ) )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid value c_n" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // no MUST values
+ value = "( 1.1 MUST )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, no MUST value" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+ }
+
+
+ /**
+ * Test MAY and its values.
+ * Very similar to AUX, so here are less test cases.
+ *
+ * @throws ParseException
+ */
+ public void testMay() throws ParseException
+ {
+ String value = null;
+ DITContentRuleDescription dcrd = null;
+
+ // no MAY
+ value = "( 1.1 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 0, dcrd.getMayAttributeTypes().size() );
+
+ // MAY simple numericoid
+ value = "( 1.1 MAY 1.2.3 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getMayAttributeTypes().size() );
+ assertEquals( "1.2.3", dcrd.getMayAttributeTypes().get( 0 ) );
+
+ // MAY mulitple
+ value = "(1.1 MAY (cn$sn $11.22.33.44.55 $ objectClass ))";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 4, dcrd.getMayAttributeTypes().size() );
+ assertEquals( "cn", dcrd.getMayAttributeTypes().get( 0 ) );
+ assertEquals( "sn", dcrd.getMayAttributeTypes().get( 1 ) );
+ assertEquals( "11.22.33.44.55", dcrd.getMayAttributeTypes().get( 2 ) );
+ assertEquals( "objectClass", dcrd.getMayAttributeTypes().get( 3 ) );
+
+ // invalid value
+ value = "( 1.1 MAY ( c_n ) )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid value c_n" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+ }
+
+ /**
+ * Test NOT and its values.
+ * Very similar to AUX, so here are less test cases.
+ *
+ * @throws ParseException
+ */
+ public void testNot() throws ParseException
+ {
+ String value = null;
+ DITContentRuleDescription dcrd = null;
+
+ // no MAY
+ value = "( 1.1 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 0, dcrd.getNotAttributeTypes().size() );
+
+ // MAY simple numericoid
+ value = "( 1.1 NOT 1.2.3 )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 1, dcrd.getNotAttributeTypes().size() );
+ assertEquals( "1.2.3", dcrd.getNotAttributeTypes().get( 0 ) );
+
+ // MAY mulitple
+ value = "(1.1 NOT (cn$sn $11.22.33.44.55 $ objectClass ))";
+ dcrd = parser.parseDITContentRuleDescription( value );
+ assertEquals( 4, dcrd.getNotAttributeTypes().size() );
+ assertEquals( "cn", dcrd.getNotAttributeTypes().get( 0 ) );
+ assertEquals( "sn", dcrd.getNotAttributeTypes().get( 1 ) );
+ assertEquals( "11.22.33.44.55", dcrd.getNotAttributeTypes().get( 2 ) );
+ assertEquals( "objectClass", dcrd.getNotAttributeTypes().get( 3 ) );
+
+ // invalid value
+ value = "( 1.1 NOT ( c_n ) )";
+ try
+ {
+ dcrd = parser.parseDITContentRuleDescription( value );
+ fail( "Exception expected, invalid value c_n" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+ }
+
+
+ /**
+ * Test extensions.
+ *
+ * @throws ParseException
+ */
+ public void testExtensions() throws ParseException
+ {
+ SchemaParserTestUtils.testExtensions( parser, "1.1", "" );
+
+ }
+
+
+ /**
+ * Test full object class description.
+ *
+ * @throws ParseException
+ */
+ public void testFull() throws ParseException
+ {
+ String value = null;
+ DITContentRuleDescription dcrd = null;
+
+ value = "( 1.2.3.4.5.6.7.8.9.0 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton äöüà é¨é·' OBSOLETE AUX ( 2.3.4.5.6.7.8.9.0.1 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) MUST ( 3.4.5.6.7.8.9.0.1.2 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) MAY ( 4.5.6.7.8.9.0.1.2.3 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) NOT ( 5.6.7.8.9.0.1.2.3.4 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )";
+ dcrd = parser.parseDITContentRuleDescription( value );
+
+ assertEquals( "1.2.3.4.5.6.7.8.9.0", dcrd.getNumericOid() );
+ assertEquals( 2, dcrd.getNames().size() );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dcrd.getNames().get( 0 ) );
+ assertEquals( "test", dcrd.getNames().get( 1 ) );
+ assertEquals( "Descripton äöüà é¨é·", dcrd.getDescription() );
+ assertTrue( dcrd.isObsolete() );
+ assertEquals( 2, dcrd.getAuxiliaryObjectClasses().size() );
+ assertEquals( "2.3.4.5.6.7.8.9.0.1", dcrd.getAuxiliaryObjectClasses().get( 0 ) );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dcrd
+ .getAuxiliaryObjectClasses().get( 1 ) );
+ assertEquals( 2, dcrd.getMustAttributeTypes().size() );
+ assertEquals( "3.4.5.6.7.8.9.0.1.2", dcrd.getMustAttributeTypes().get( 0 ) );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dcrd.getMustAttributeTypes()
+ .get( 1 ) );
+ assertEquals( 2, dcrd.getMayAttributeTypes().size() );
+ assertEquals( "4.5.6.7.8.9.0.1.2.3", dcrd.getMayAttributeTypes().get( 0 ) );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dcrd.getMayAttributeTypes()
+ .get( 1 ) );
+ assertEquals( 2, dcrd.getNotAttributeTypes().size() );
+ assertEquals( "5.6.7.8.9.0.1.2.3.4", dcrd.getNotAttributeTypes().get( 0 ) );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dcrd.getNotAttributeTypes()
+ .get( 1 ) );
+ assertEquals( 2, dcrd.getExtensions().size() );
+ assertNotNull( dcrd.getExtensions().get( "X-TEST-a" ) );
+ assertEquals( 2, dcrd.getExtensions().get( "X-TEST-a" ).size() );
+ assertEquals( "test1-1", dcrd.getExtensions().get( "X-TEST-a" ).get( 0 ) );
+ assertEquals( "test1-2", dcrd.getExtensions().get( "X-TEST-a" ).get( 1 ) );
+ assertNotNull( dcrd.getExtensions().get( "X-TEST-b" ) );
+ assertEquals( 2, dcrd.getExtensions().get( "X-TEST-b" ).size() );
+ assertEquals( "test2-1", dcrd.getExtensions().get( "X-TEST-b" ).get( 0 ) );
+ assertEquals( "test2-2", dcrd.getExtensions().get( "X-TEST-b" ).get( 1 ) );
+ }
+
+
+ /**
+ * Test unique elements.
+ *
+ * @throws ParseException
+ */
+ public void testUniqueElements() throws ParseException
+ {
+ String[] testValues = new String[]
+ {
+ "( 1.1 NAME 'test1' NAME 'test2' )",
+ "( 1.1 DESC 'test1' DESC 'test2' )",
+ "( 1.1 OBSOLETE OBSOLETE )",
+ "( 1.1 AUX test1 AUX test2 )",
+ "( 1.1 MUST test1 MUST test2 )",
+ "( 1.1 MAY test1 MAY test2 )",
+ "( 1.1 NOT test1 NOT test2 )",
+ "( 1.1 X-TEST 'test1' X-TEST 'test2' )"
+ };
+ SchemaParserTestUtils.testUnique( parser, testValues );
+ }
+
+
+ /**
+ * Tests the multithreaded use of a single parser.
+ */
+ public void testMultiThreaded() throws Exception
+ {
+ String[] testValues = new String[]
+ {
+ "( 1.1 )",
+ "( 2.5.6.4 DESC 'content rule for organization' NOT ( x121Address $ telexNumber ) )",
+ "( 2.5.6.4 DESC 'content rule for organization' NOT ( x121Address $ telexNumber ) )",
+ "( 1.2.3.4.5.6.7.8.9.0 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton äöüà é¨é·' OBSOLETE AUX ( 2.3.4.5.6.7.8.9.0.1 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) MUST ( 3.4.5.6.7.8.9.0.1.2 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) MAY ( 4.5.6.7.8.9.0.1.2.3 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) NOT ( 5.6.7.8.9.0.1.2.3.4 $ abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 ) X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )" };
+ SchemaParserTestUtils.testMultiThreaded( parser, testValues );
+
+ }
+
+}
Added: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITStructureRuleDescriptionTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITStructureRuleDescriptionTest.java?view=auto&rev=488036
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITStructureRuleDescriptionTest.java (added)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/schema/syntax/SchemaParserDITStructureRuleDescriptionTest.java Sun Dec 17 11:57:47 2006
@@ -0,0 +1,434 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.schema.syntax;
+
+
+import java.text.ParseException;
+
+import junit.framework.TestCase;
+
+import org.apache.directory.shared.ldap.schema.syntax.parser.DITStructureRuleDescriptionSchemaParser;
+
+
+/**
+ * Tests the DITStructureRuleDescriptionSchemaParser class.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SchemaParserDITStructureRuleDescriptionTest extends TestCase
+{
+ /** the parser instance */
+ private DITStructureRuleDescriptionSchemaParser parser;
+
+
+ protected void setUp() throws Exception
+ {
+ parser = new DITStructureRuleDescriptionSchemaParser();
+ }
+
+
+ protected void tearDown() throws Exception
+ {
+ parser = null;
+ }
+
+
+ /**
+ * Test ruleid
+ *
+ * @throws ParseException
+ */
+ public void testNumericRuleId() throws ParseException
+ {
+ String value = null;
+ DITStructureRuleDescription dsrd = null;
+
+ // null test
+ value = null;
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, null" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // no ruleid
+ value = "( )";
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, no ruleid" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // simple
+ value = "( 1 FORM 1.1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( new Integer( 1 ), dsrd.getRuleId() );
+
+ // simple
+ value = "( 1234567890 FORM 1.1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( new Integer( 1234567890 ), dsrd.getRuleId() );
+
+ // simple with spaces
+ value = "( 1234567890 FORM 1.1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( new Integer( 1234567890 ), dsrd.getRuleId() );
+
+ // non-numeric not allowed
+ value = "( test FORM 1.1 )";
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid ruleid test (non-numeric)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // oid not allowed
+ value = "( 1.2.3.4 FORM 1.1 )";
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid ruleid 1.2.3.4 (oid)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // quotes not allowed
+ value = "( '1234567890' FORM 1.1 )";
+ try
+ {
+ parser.parse( value );
+ TestCase.fail( "Exception expected, invalid ruleid '1234567890' (quoted)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ }
+
+
+ /**
+ * Tests NAME and its values
+ *
+ * @throws ParseException
+ */
+ public void testNames() throws ParseException
+ {
+ SchemaParserTestUtils.testNames( parser, "1", "FORM 1.1" );
+ }
+
+
+ /**
+ * Tests DESC
+ *
+ * @throws ParseException
+ */
+ public void testDescription() throws ParseException
+ {
+ SchemaParserTestUtils.testDescription( parser, "1", "FORM 1.1" );
+ }
+
+
+ /**
+ * Tests OBSOLETE
+ *
+ * @throws ParseException
+ */
+ public void testObsolete() throws ParseException
+ {
+ SchemaParserTestUtils.testObsolete( parser, "1", "FORM 1.1" );
+ }
+
+
+ /**
+ * Tests FORM
+ *
+ * @throws ParseException
+ */
+ public void testForm() throws ParseException
+ {
+ String value = null;
+ DITStructureRuleDescription dsrd = null;
+
+ // numeric oid
+ value = "( 1 FORM 1.2.3.4.5.6.7.8.9.0 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( "1.2.3.4.5.6.7.8.9.0", dsrd.getForm() );
+
+ // numeric oid
+ value = "( 1 FORM 123.4567.890 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( "123.4567.890", dsrd.getForm() );
+
+ // descr
+ value = "( 1 FORM abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dsrd.getForm() );
+
+ // no quote allowed
+ value = "( 1 FORM '1.2.3.4.5.6.7.8.9.0' )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid FORM '1.2.3.4.5.6.7.8.9.0' (quoted)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // no quote allowed
+ value = "( 1 FORM 'test' )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid FORM 'test' (quoted)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // invalid character
+ value = "( 1 FORM 1.2.3.4.A )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid FORM 1.2.3.4.A (invalid character)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // invalid start
+ value = "( 1 FORM -test ) )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid FORM '-test' (starts with hypen)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // no multi value
+ value = "( 1 FORM ( test1 test2 ) )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, FORM must be single valued" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ }
+
+
+ /**
+ * Tests SUP
+ *
+ * @throws ParseException
+ */
+ public void testSup() throws ParseException
+ {
+ String value = null;
+ DITStructureRuleDescription dsrd = null;
+
+ // no SUP
+ value = "( 1 FORM 1.1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( 0, dsrd.getSuperRules().size() );
+
+ // SUP simple number
+ value = "( 1 FORM 1.1 SUP 1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( 1, dsrd.getSuperRules().size() );
+ assertEquals( new Integer( 1 ), dsrd.getSuperRules().get( 0 ) );
+
+ // SUP single number
+ value = "( 1 FORM 1.1 SUP ( 1 ) )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( 1, dsrd.getSuperRules().size() );
+ assertEquals( new Integer( 1 ), dsrd.getSuperRules().get( 0 ) );
+
+ // SUP multi number
+ value = "( 1 FORM 1.1 SUP (12345 67890) )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertEquals( 2, dsrd.getSuperRules().size() );
+ assertEquals( new Integer( 12345 ), dsrd.getSuperRules().get( 0 ) );
+ assertEquals( new Integer( 67890 ), dsrd.getSuperRules().get( 1 ) );
+
+ // non-numeric not allowed
+ value = "( 1 FORM 1.1 SUP test )";
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid SUP test (non-numeric)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ // oid not allowed
+ value = "( 1 FORM 1.1 SUP 1.2.3.4 )";
+ try
+ {
+ parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, invalid SUP 1.2.3.4 (oid)" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ }
+
+
+ /**
+ * Test extensions.
+ *
+ * @throws ParseException
+ */
+ public void testExtensions() throws ParseException
+ {
+ SchemaParserTestUtils.testExtensions( parser, "1", "FORM 1.1" );
+
+ }
+
+
+ /**
+ * Test full object class description.
+ *
+ * @throws ParseException
+ */
+ public void testFull() throws ParseException
+ {
+ String value = null;
+ DITStructureRuleDescription dsrd = null;
+
+ value = "( 1234567890 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton äöüà é¨é·' OBSOLETE FORM 2.3.4.5.6.7.8.9.0.1 SUP ( 1 1234567890 5 ) X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+
+ assertEquals( new Integer( 1234567890 ), dsrd.getRuleId() );
+ assertEquals( 2, dsrd.getNames().size() );
+ assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", dsrd.getNames().get( 0 ) );
+ assertEquals( "test", dsrd.getNames().get( 1 ) );
+ assertEquals( "Descripton äöüà é¨é·", dsrd.getDescription() );
+ assertTrue( dsrd.isObsolete() );
+ assertEquals( "2.3.4.5.6.7.8.9.0.1", dsrd.getForm() );
+ assertEquals( 3, dsrd.getSuperRules().size() );
+ assertEquals( new Integer(1), dsrd.getSuperRules().get( 0 ) );
+ assertEquals( new Integer(1234567890), dsrd.getSuperRules().get( 1 ) );
+ assertEquals( new Integer(5), dsrd.getSuperRules().get( 2 ) );
+ assertEquals( 2, dsrd.getExtensions().size() );
+ assertNotNull( dsrd.getExtensions().get( "X-TEST-a" ) );
+ assertEquals( 2, dsrd.getExtensions().get( "X-TEST-a" ).size() );
+ assertEquals( "test1-1", dsrd.getExtensions().get( "X-TEST-a" ).get( 0 ) );
+ assertEquals( "test1-2", dsrd.getExtensions().get( "X-TEST-a" ).get( 1 ) );
+ assertNotNull( dsrd.getExtensions().get( "X-TEST-b" ) );
+ assertEquals( 2, dsrd.getExtensions().get( "X-TEST-b" ).size() );
+ assertEquals( "test2-1", dsrd.getExtensions().get( "X-TEST-b" ).get( 0 ) );
+ assertEquals( "test2-2", dsrd.getExtensions().get( "X-TEST-b" ).get( 1 ) );
+ }
+
+
+ /**
+ * Test unique elements.
+ *
+ * @throws ParseException
+ */
+ public void testUniqueElements() throws ParseException
+ {
+ String[] testValues = new String[]
+ {
+ "( 1 FORM 1.1 NAME 'test1' NAME 'test2' )",
+ "( 1 FORM 1.1 DESC 'test1' DESC 'test2' )",
+ "( 1 FORM 1.1 OBSOLETE OBSOLETE )",
+ "( 1 FORM 1.1 FORM test1 FORM test2 )",
+ "( 1 FORM 1.1 SUP 1 SUP 2 )",
+ "( 1 FORM 1.1 X-TEST 'test1' X-TEST 'test2' )"
+ };
+ SchemaParserTestUtils.testUnique( parser, testValues );
+ }
+
+
+ /**
+ * Test required elements.
+ *
+ * @throws ParseException
+ */
+ public void testRequiredElements() throws ParseException
+ {
+ String value = null;
+ DITStructureRuleDescription dsrd = null;
+
+ value = "( 1 FORM 1.1 )";
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ assertNotNull( dsrd.getForm() );
+
+ value = "( 1 )";
+ try
+ {
+ dsrd = parser.parseDITStructureRuleDescription( value );
+ fail( "Exception expected, FORM is required" );
+ }
+ catch ( ParseException pe )
+ {
+ // expected
+ }
+
+ }
+
+
+ /**
+ * Tests the multithreaded use of a single parser.
+ */
+ public void testMultiThreaded() throws Exception
+ {
+ String[] testValues = new String[]
+ {
+ "( 1 FORM 1.1 )",
+ "( 2 DESC 'organization structure rule' FORM 2.5.15.3 )",
+ "( 2 DESC 'organization structure rule' FORM 2.5.15.3 )",
+ "( 1234567890 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton äöüà é¨é·' OBSOLETE FORM 2.3.4.5.6.7.8.9.0.1 SUP ( 1 1234567890 5 ) X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )" };
+ SchemaParserTestUtils.testMultiThreaded( parser, testValues );
+
+ }
+
+}