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 *     https://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
021package org.apache.directory.api.ldap.extras.controls.vlv_impl;
022
023
024import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
025import org.apache.directory.api.asn1.ber.grammar.Grammar;
026import org.apache.directory.api.asn1.ber.grammar.GrammarTransition;
027import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
028import org.slf4j.Logger;
029import org.slf4j.LoggerFactory;
030
031
032/**
033 * The VLV grammar
034 *
035 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
036 */
037public final class VirtualListViewRequestGrammar extends AbstractGrammar<VirtualListViewRequestContainer>
038{
039    static final Logger LOG = LoggerFactory.getLogger( VirtualListViewRequestGrammar.class );
040
041    private static Grammar<?> instance = new VirtualListViewRequestGrammar();
042
043
044    @SuppressWarnings("unchecked")
045    private VirtualListViewRequestGrammar()
046    {
047        setName( VirtualListViewRequestGrammar.class.getName() );
048
049        super.transitions = new GrammarTransition[VirtualListViewRequestStates.END_STATE.ordinal()][256];
050
051        super.transitions[VirtualListViewRequestStates.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
052            new GrammarTransition<VirtualListViewRequestContainer>(
053                VirtualListViewRequestStates.START_STATE,
054                VirtualListViewRequestStates.VLV_SEQUENCE_STATE,
055                UniversalTag.SEQUENCE.getValue(),
056                null );
057
058        super.transitions[VirtualListViewRequestStates.VLV_SEQUENCE_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
059            new GrammarTransition<VirtualListViewRequestContainer>(
060                VirtualListViewRequestStates.VLV_SEQUENCE_STATE,
061                VirtualListViewRequestStates.VLV_BEFORE_COUNT_STATE,
062                UniversalTag.INTEGER.getValue(),
063                new StoreBeforeCount() );
064
065        super.transitions[VirtualListViewRequestStates.VLV_BEFORE_COUNT_STATE.ordinal()][UniversalTag.INTEGER
066            .getValue()] =
067            new GrammarTransition<VirtualListViewRequestContainer>(
068                VirtualListViewRequestStates.VLV_BEFORE_COUNT_STATE,
069                VirtualListViewRequestStates.VLV_AFTER_COUNT_STATE,
070                UniversalTag.INTEGER.getValue(),
071                new StoreAfterCount() );
072
073        super.transitions[VirtualListViewRequestStates.VLV_AFTER_COUNT_STATE.ordinal()][VirtualListViewerTags.BY_OFFSET_TAG
074            .getValue()] =
075            new GrammarTransition<VirtualListViewRequestContainer>(
076                VirtualListViewRequestStates.VLV_AFTER_COUNT_STATE,
077                VirtualListViewRequestStates.VLV_TARGET_BY_OFFSET_STATE,
078                ( byte ) VirtualListViewerTags.BY_OFFSET_TAG.getValue(),
079                null );
080
081        super.transitions[VirtualListViewRequestStates.VLV_AFTER_COUNT_STATE.ordinal()][VirtualListViewerTags.ASSERTION_VALUE_TAG
082            .getValue()] =
083            new GrammarTransition<VirtualListViewRequestContainer>(
084                VirtualListViewRequestStates.VLV_AFTER_COUNT_STATE,
085                VirtualListViewRequestStates.VLV_ASSERTION_VALUE_STATE,
086                ( byte ) VirtualListViewerTags.ASSERTION_VALUE_TAG.getValue(),
087                new StoreAssertionValue() );
088
089        super.transitions[VirtualListViewRequestStates.VLV_TARGET_BY_OFFSET_STATE.ordinal()][UniversalTag.INTEGER
090            .getValue()] =
091            new GrammarTransition<VirtualListViewRequestContainer>(
092                VirtualListViewRequestStates.VLV_TARGET_BY_OFFSET_STATE,
093                VirtualListViewRequestStates.VLV_OFFSET_STATE,
094                UniversalTag.INTEGER.getValue(),
095                new StoreOffset() );
096
097        super.transitions[VirtualListViewRequestStates.VLV_OFFSET_STATE.ordinal()][UniversalTag.INTEGER.getValue()] =
098            new GrammarTransition<VirtualListViewRequestContainer>(
099                VirtualListViewRequestStates.VLV_OFFSET_STATE,
100                VirtualListViewRequestStates.VLV_CONTENT_COUNT_STATE,
101                UniversalTag.INTEGER.getValue(),
102                new StoreContentCount() );
103
104        super.transitions[VirtualListViewRequestStates.VLV_CONTENT_COUNT_STATE.ordinal()][UniversalTag.OCTET_STRING
105            .getValue()] =
106            new GrammarTransition<VirtualListViewRequestContainer>(
107                VirtualListViewRequestStates.VLV_CONTENT_COUNT_STATE,
108                VirtualListViewRequestStates.VLV_CONTEXT_ID_STATE,
109                UniversalTag.OCTET_STRING.getValue(),
110                new StoreContextId() );
111
112        super.transitions[VirtualListViewRequestStates.VLV_ASSERTION_VALUE_STATE.ordinal()][UniversalTag.OCTET_STRING
113            .getValue()] =
114            new GrammarTransition<VirtualListViewRequestContainer>(
115                VirtualListViewRequestStates.VLV_ASSERTION_VALUE_STATE,
116                VirtualListViewRequestStates.VLV_CONTEXT_ID_STATE,
117                UniversalTag.OCTET_STRING.getValue(),
118                new StoreContextId() );
119    }
120
121
122    /**
123     * @return the singleton instance of the VirtualListViewRequestGrammar
124     */
125    public static Grammar<?> getInstance()
126    {
127        return instance;
128    }
129}