blob: 1e840ad4785b5af9c536c03fdd033e539011fc66 [file] [log] [blame]
/*
* 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.api.dsmlv2;
import org.apache.directory.api.dsmlv2.request.BatchRequestDsml;
import org.apache.directory.api.dsmlv2.response.BatchResponseDsml;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.xmlpull.v1.XmlPullParser;
/**
* This class represents the DSML Container.
* It used by the DSML Parser to store information.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class Dsmlv2Container implements Container
{
/** The current state of the decoding */
private Enum<Dsmlv2StatesEnum> state;
/** The current transition */
private Enum<Dsmlv2StatesEnum> transition;
/** Store the different states for debug purpose */
private Enum<Dsmlv2StatesEnum>[] states;
/** The pool parser */
private XmlPullParser parser;
/** The BatchRequest of the parsing */
private BatchRequestDsml batchRequest;
/** The BatchResponse of the parsing */
private BatchResponseDsml batchResponse;
/** The associated grammar */
private AbstractGrammar grammar;
/** The codec service */
private final LdapApiService codec;
/**
* Creates a new LdapMessageContainer object.
*
* @param codec the Codec used to encode/decode the messages
*/
public Dsmlv2Container( LdapApiService codec )
{
this.codec = codec;
}
/**
* Gets the {@link LdapApiService} associated with this Container.
*
* @return The codec used to encode/decode the messages
*/
public LdapApiService getLdapCodecService()
{
return codec;
}
/**
* Gets the DSML Batch Request
*
* @return Returns the Batch Request
*/
public BatchRequestDsml getBatchRequest()
{
return batchRequest;
}
/**
* Sets the DSML Batch Request
*
* @param batchRequest the Batch Request to set
*/
public void setBatchRequest( BatchRequestDsml batchRequest )
{
this.batchRequest = batchRequest;
}
/**
* Gets the DSML Batch Response
*
* @return Returns the Batch Response
*/
public BatchResponseDsml getBatchResponse()
{
return batchResponse;
}
/**
* Sets the DSML Batch Request
*
* @param batchResponse the Batch Response to set
*/
public void setBatchResponse( BatchResponseDsml batchResponse )
{
this.batchResponse = batchResponse;
}
/**
* Gets the parser
*
* @return the parser
*/
public XmlPullParser getParser()
{
return parser;
}
/**
* Sets the parser
*
* @param parser the parser to set
*/
public void setParser( XmlPullParser parser )
{
this.parser = parser;
}
/**
* Get the current grammar state
*
* @return the current grammar state
*/
public Enum<Dsmlv2StatesEnum> getState()
{
return state;
}
/**
* Set the new current state
*
* @param state the new state
*/
public void setState( Enum<Dsmlv2StatesEnum> state )
{
this.state = state;
}
/**
* Get the transition
*
* @return the transition from the previous state to the new state
*/
public Enum<Dsmlv2StatesEnum> getTransition()
{
return transition;
}
/**
* Update the transition from a state to another
*
* @param transition the transition to set
*/
public void setTransition( Enum<Dsmlv2StatesEnum> transition )
{
this.transition = transition;
}
/**
* Get the states for this container's grammars
*
* @return the states.
*/
public Enum<Dsmlv2StatesEnum>[] getStates()
{
return states;
}
/**
* Gets the grammar
*
* @return the grammar
*/
public AbstractGrammar getGrammar()
{
return grammar;
}
/**
* Sets the Grammar
*
* @param grammar the grammar to set
*/
public void setGrammar( AbstractGrammar grammar )
{
this.grammar = grammar;
}
/**
* Get the transition associated with the state and tag
*
* @param currentState the current state
* @param currentTag the current tag
* @return a valid transition if any, or null.
*/
public GrammarTransition getTransition( Enum<Dsmlv2StatesEnum> currentState, Tag currentTag )
{
return grammar.getTransition( currentState, currentTag );
}
}