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.shared.ldap.schema.syntaxCheckers;
021    
022    
023    import org.apache.directory.shared.ldap.constants.SchemaConstants;
024    import org.apache.directory.shared.ldap.schema.SyntaxChecker;
025    import org.apache.directory.shared.ldap.util.StringTools;
026    import org.slf4j.Logger;
027    import org.slf4j.LoggerFactory;
028    
029    
030    /**
031     * A syntax checker which checks to see if an attributeType's type is either: 
032     * userApplications
033     * directoryOperation
034     * distributedOperation
035     * dSAOperation
036    .*  The case is NOT ignored.
037     *
038     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
039     * @version $Rev$
040     */
041    public class AttributeTypeUsageSyntaxChecker extends SyntaxChecker
042    {
043        /** A logger for this class */
044        private static final Logger LOG = LoggerFactory.getLogger( AttributeTypeUsageSyntaxChecker.class );
045    
046        /** The serialVersionUID */
047        private static final long serialVersionUID = 1L;
048    
049        /**
050         * 
051         * Creates a new instance of AttributeTypeUsageSyntaxChecker.
052         *
053         */
054        public AttributeTypeUsageSyntaxChecker()
055        {
056            super( SchemaConstants.ATTRIBUTE_TYPE_USAGE_SYNTAX );
057        }
058    
059    
060        /**
061         * {@inheritDoc}
062         */
063        public boolean isValidSyntax( Object value )
064        {
065            String strValue = null;
066    
067            if ( value == null )
068            {
069                LOG.debug( "Syntax invalid for '{}'", value );
070                return false;
071            }
072            
073            if ( value instanceof String )
074            {
075                strValue = ( String ) value;
076            }
077            else if ( value instanceof byte[] )
078            {
079                strValue = StringTools.utf8ToString( ( byte[] ) value ); 
080            }
081            else
082            {
083                strValue = value.toString();
084            }
085    
086            if ( ( strValue.length() < "userApplications".length() ) || 
087                 ( strValue.length() > "userApplications".length() ) )
088            {
089                LOG.debug( "Syntax invalid for '{}'", value );
090                return false;
091            }
092            
093            char ch = strValue.charAt( 0 );
094    
095            switch ( ch )
096            {
097                case( 'd' ):
098                    if ( "dSAOperation".equals( strValue ) ||
099                         "directoryOperation".equals( strValue ) ||
100                         "distributedOperation".equals( strValue ) )
101                    {
102                        LOG.debug( "Syntax valid for '{}'", value );
103                        return true;
104                    }
105    
106                    LOG.debug( "Syntax invalid for '{}'", value );
107                    return false;
108                
109                case( 'u' ):
110                    boolean comp = "userApplications".equals( strValue );
111                
112                    if ( comp )
113                    {
114                        LOG.debug( "Syntax valid for '{}'", value );
115                    }
116                    else
117                    {
118                        LOG.debug( "Syntax valid for '{}'", value );
119                        
120                    }
121                    
122                    return comp;
123                
124                default:
125                    LOG.debug( "Syntax invalid for '{}'", value );
126                    return false;
127            }
128        }
129    }