1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 * 19 */ 20 package org.apache.directory.api.ldap.model.schema.syntaxCheckers; 21 22 23 import java.text.ParseException; 24 25 import org.apache.directory.api.ldap.model.constants.SchemaConstants; 26 import org.apache.directory.api.ldap.model.schema.SyntaxChecker; 27 import org.apache.directory.api.ldap.model.schema.parsers.ObjectClassDescriptionSchemaParser; 28 import org.apache.directory.api.util.Strings; 29 import org.slf4j.Logger; 30 import org.slf4j.LoggerFactory; 31 32 33 /** 34 * A SyntaxChecker which verifies that a value follows the 35 * object class descripton syntax according to RFC 4512, par 4.2.1: 36 * 37 * <pre> 38 * ObjectClassDescription = LPAREN WSP 39 * numericoid ; object identifier 40 * [ SP "NAME" SP qdescrs ] ; short names (descriptors) 41 * [ SP "DESC" SP qdstring ] ; description 42 * [ SP "OBSOLETE" ] ; not active 43 * [ SP "SUP" SP oids ] ; superior object classes 44 * [ SP kind ] ; kind of class 45 * [ SP "MUST" SP oids ] ; attribute types 46 * [ SP "MAY" SP oids ] ; attribute types 47 * extensions WSP RPAREN 48 * 49 * kind = "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" 50 * 51 * extensions = *( SP xstring SP qdstrings ) 52 * xstring = "X" HYPHEN 1*( ALPHA / HYPHEN / USCORE ) 53 * </pre> 54 * 55 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 56 */ 57 @SuppressWarnings("serial") 58 public class ObjectClassDescriptionSyntaxChecker extends SyntaxChecker 59 { 60 /** A logger for this class */ 61 private static final Logger LOG = LoggerFactory.getLogger( ObjectClassDescriptionSyntaxChecker.class ); 62 63 /** The schema parser used to parse the ObjectClassDescription Syntax */ 64 private ObjectClassDescriptionSchemaParser schemaParser = new ObjectClassDescriptionSchemaParser(); 65 66 67 /** 68 * Creates a new instance of ObjectClassDescriptionSyntaxChecker. 69 */ 70 public ObjectClassDescriptionSyntaxChecker() 71 { 72 super( SchemaConstants.OBJECT_CLASS_DESCRIPTION_SYNTAX ); 73 } 74 75 76 /** 77 * {@inheritDoc} 78 */ 79 public boolean isValidSyntax( Object value ) 80 { 81 String strValue = null; 82 83 if ( value == null ) 84 { 85 LOG.debug( "Syntax invalid for 'null'" ); 86 return false; 87 } 88 89 if ( value instanceof String ) 90 { 91 strValue = ( String ) value; 92 } 93 else if ( value instanceof byte[] ) 94 { 95 strValue = Strings.utf8ToString( ( byte[] ) value ); 96 } 97 else 98 { 99 strValue = value.toString(); 100 } 101 102 try 103 { 104 schemaParser.parseObjectClassDescription( strValue ); 105 LOG.debug( "Syntax valid for '{}'", value ); 106 return true; 107 } 108 catch ( ParseException pe ) 109 { 110 LOG.debug( "Syntax invalid for '{}'", value ); 111 return false; 112 } 113 } 114 }