public void action( LdapMessageContainer<SearchRequestDecorator> container )
{
// Now, we can allocate the SearchRequest Object
TLV tlv = container.getCurrentTLV();
SearchRequestDecorator searchRequest = new SearchRequestDecorator(
container.getLdapCodecService(), new SearchRequestImpl( container.getMessageId() ) );
searchRequest.setTlvId( tlv.getId());
container.setMessage( searchRequest );
LOG.debug( "Search Request" );
}
} );
// --------------------------------------------------------------------------------------------
// Transition from SearchRequest Message to BaseObject
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// baseObject LDAPDN,
// ...
//
// We have a value for the base object, we will store it in the message
super.transitions[LdapStatesEnum.SEARCH_REQUEST_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.SEARCH_REQUEST_STATE, LdapStatesEnum.BASE_OBJECT_STATE, UniversalTag.OCTET_STRING.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store base object value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequestDecorator searchRequestDecorator = container.getMessage();
SearchRequest searchRequest = searchRequestDecorator.getDecorated();
TLV tlv = container.getCurrentTLV();
// We have to check that this is a correct Dn
Dn baseObject = null;
// We have to handle the special case of a 0 length base
// object,
// which means that the search is done from the default
// root.
if ( tlv.getLength() != 0 )
{
byte[] dnBytes = tlv.getValue().getData();
String dnStr = Strings.utf8ToString(dnBytes);
try
{
baseObject = new Dn( dnStr );
}
catch ( LdapInvalidDnException ine )
{
String msg = "Invalid root Dn given : " + dnStr + " (" + Strings.dumpBytes(dnBytes)
+ ") is invalid";
LOG.error( "{} : {}", msg, ine.getMessage() );
SearchResultDoneImpl response = new SearchResultDoneImpl( searchRequest.getMessageId() );
throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALID_DN_SYNTAX,
Dn.EMPTY_DN, ine );
}
}
else
{
baseObject = Dn.EMPTY_DN;
}
searchRequest.setBase(baseObject);
LOG.debug( "Searching with root Dn : {}", baseObject );
}
} );
// --------------------------------------------------------------------------------------------
// Transition from BaseObject to Scope
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// scope ENUMERATED {
// baseObject (0),
// singleLevel (1),
// wholeSubtree (2) },
// ...
//
// We have a value for the scope, we will store it in the message
super.transitions[LdapStatesEnum.BASE_OBJECT_STATE.ordinal()][UniversalTag.ENUMERATED.getValue()] = new GrammarTransition(
LdapStatesEnum.BASE_OBJECT_STATE, LdapStatesEnum.SCOPE_STATE, UniversalTag.ENUMERATED.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store scope value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequest searchRequest = container.getMessage().getDecorated();
TLV tlv = container.getCurrentTLV();
// We have to check that this is a correct scope
Value value = tlv.getValue();
int scope = 0;
try
{
scope = IntegerDecoder.parse( value, LdapConstants.SCOPE_BASE_OBJECT,
LdapConstants.SCOPE_WHOLE_SUBTREE );
}
catch ( IntegerDecoderException ide )
{
String msg = I18n.err( I18n.ERR_04101, value.toString() );
LOG.error( msg );
throw new DecoderException( msg );
}
searchRequest.setScope( SearchScope.getSearchScope(scope) );
if ( IS_DEBUG )
{
switch ( scope )
{
case LdapConstants.SCOPE_BASE_OBJECT:
LOG.debug( "Searching within BASE_OBJECT scope " );
break;
case LdapConstants.SCOPE_SINGLE_LEVEL:
LOG.debug( "Searching within SINGLE_LEVEL scope " );
break;
case LdapConstants.SCOPE_WHOLE_SUBTREE:
LOG.debug( "Searching within WHOLE_SUBTREE scope " );
break;
}
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from Scope to DerefAlias
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// derefAliases ENUMERATED {
// neverDerefAliases (0),
// derefInSearching (1),
// derefFindingBaseObj (2),
// derefAlways (3) },
// ...
//
// We have a value for the derefAliases, we will store it in the message
super.transitions[LdapStatesEnum.SCOPE_STATE.ordinal()][UniversalTag.ENUMERATED.getValue()] = new GrammarTransition(
LdapStatesEnum.SCOPE_STATE, LdapStatesEnum.DEREF_ALIAS_STATE, UniversalTag.ENUMERATED.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store derefAliases value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequest searchRequest = container.getMessage().getDecorated();
TLV tlv = container.getCurrentTLV();
// We have to check that this is a correct derefAliases
Value value = tlv.getValue();
int derefAliases = 0;
try
{
derefAliases = IntegerDecoder.parse(value, LdapConstants.NEVER_DEREF_ALIASES,
LdapConstants.DEREF_ALWAYS);
}
catch ( IntegerDecoderException ide )
{
String msg = I18n.err( I18n.ERR_04102, value.toString() );
LOG.error( msg );
throw new DecoderException( msg );
}
searchRequest.setDerefAliases( AliasDerefMode.getDerefMode( derefAliases ) );
if ( IS_DEBUG )
{
switch ( derefAliases )
{
case LdapConstants.NEVER_DEREF_ALIASES:
LOG.debug( "Handling object strategy : NEVER_DEREF_ALIASES" );
break;
case LdapConstants.DEREF_IN_SEARCHING:
LOG.debug( "Handling object strategy : DEREF_IN_SEARCHING" );
break;
case LdapConstants.DEREF_FINDING_BASE_OBJ:
LOG.debug( "Handling object strategy : DEREF_FINDING_BASE_OBJ" );
break;
case LdapConstants.DEREF_ALWAYS:
LOG.debug( "Handling object strategy : DEREF_ALWAYS" );
break;
}
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from DerefAlias to SizeLimit
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// sizeLimit INTEGER (0 .. maxInt),
// ...
//
// We have a value for the sizeLimit, we will store it in the message
super.transitions[LdapStatesEnum.DEREF_ALIAS_STATE.ordinal()][UniversalTag.INTEGER.getValue()] = new GrammarTransition(
LdapStatesEnum.DEREF_ALIAS_STATE, LdapStatesEnum.SIZE_LIMIT_STATE, UniversalTag.INTEGER.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store sizeLimit value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequest searchRequest = container.getMessage().getDecorated();
TLV tlv = container.getCurrentTLV();
// The current TLV should be a integer
// We get it and store it in sizeLimit
Value value = tlv.getValue();
long sizeLimit = 0;
try
{
sizeLimit = LongDecoder.parse( value, 0, Integer.MAX_VALUE );
}
catch ( LongDecoderException lde )
{
String msg = I18n.err( I18n.ERR_04103, value.toString() );
LOG.error( msg );
throw new DecoderException( msg );
}
searchRequest.setSizeLimit( sizeLimit );
if ( IS_DEBUG )
{
LOG.debug( "The sizeLimit value is set to {} objects", Long.valueOf( sizeLimit ) );
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from SizeLimit to TimeLimit
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// timeLimit INTEGER (0 .. maxInt),
// ...
//
// We have a value for the timeLimit, we will store it in the message
super.transitions[LdapStatesEnum.SIZE_LIMIT_STATE.ordinal()][UniversalTag.INTEGER.getValue()] = new GrammarTransition(
LdapStatesEnum.SIZE_LIMIT_STATE, LdapStatesEnum.TIME_LIMIT_STATE, UniversalTag.INTEGER.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store timeLimit value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequest searchRequest = container.getMessage().getDecorated();
TLV tlv = container.getCurrentTLV();
// The current TLV should be a integer
// We get it and store it in timeLimit
Value value = tlv.getValue();
int timeLimit = 0;
try
{
timeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
}
catch ( IntegerDecoderException ide )
{
String msg = I18n.err( I18n.ERR_04104, value.toString() );
LOG.error( msg );
throw new DecoderException( msg );
}
searchRequest.setTimeLimit( timeLimit );
if ( IS_DEBUG )
{
LOG.debug( "The timeLimit value is set to {} seconds", Integer.valueOf( timeLimit ) );
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from TimeLimit to TypesOnly
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// typesOnly BOOLEAN,
// ...
//
// We have a value for the typesOnly, we will store it in the message.
super.transitions[LdapStatesEnum.TIME_LIMIT_STATE.ordinal()][UniversalTag.BOOLEAN.getValue()] = new GrammarTransition(
LdapStatesEnum.TIME_LIMIT_STATE, LdapStatesEnum.TYPES_ONLY_STATE, UniversalTag.BOOLEAN.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "store typesOnly value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequest searchRequest = container.getMessage().getDecorated();
TLV tlv = container.getCurrentTLV();
// We get the value. If it's a 0, it's a FALSE. If it's
// a FF, it's a TRUE. Any other value should be an error,
// but we could relax this constraint. So if we have
// something
// which is not 0, it will be interpreted as TRUE, but we
// will generate a warning.
Value value = tlv.getValue();
try
{
searchRequest.setTypesOnly( BooleanDecoder.parse( value ) );
}
catch ( BooleanDecoderException bde )
{
LOG.error( I18n
.err( I18n.ERR_04105, Strings.dumpBytes(value.getData()), bde.getMessage() ) );
throw new DecoderException( bde.getMessage() );
}
if ( IS_DEBUG )
{
LOG.debug( "The search will return {}", ( searchRequest.getTypesOnly() ? "only attributs type"
: "attributes types and values" ) );
}
}
} );
//============================================================================================
// Search Request And Filter
// This is quite complicated, because we have a tree structure to build,
// and we may have many elements on each node. For instance, considering the
// search filter :
// (& (| (a = b) (c = d)) (! (e = f)) (attr =* h))
// We will have to create an And filter with three children :
// - an Or child,
// - a Not child
// - and a Present child.
// The Or child will also have two children.
//
// We know when we have a children while decoding the PDU, because the length
// of its parent has not yet reached its expected length.
//
// This search filter :
// (&(|(objectclass=top)(ou=contacts))(!(objectclass=ttt))(objectclass=*top))
// is encoded like this :
// +----------------+---------------+
// | ExpectedLength | CurrentLength |
//+-----------------------------+----------------+---------------+
//|A0 52 | 82 | 0 | new level 1
//| A1 24 | 82 36 | 0 0 | new level 2
//| A3 12 | 82 36 18 | 0 0 0 | new level 3
//| 04 0B 'objectclass' | 82 36 18 | 0 0 13 |
//| 04 03 'top' | 82 36 18 | 0 20 18 |
//| | ^ ^ |
//| | | | |
//| | +---------------+ |
//+-----------------------------* end level 3 -------------------*
//| A3 0E | 82 36 14 | 0 0 0 | new level 3
//| 04 02 'ou' | 82 36 14 | 0 0 4 |
//| 04 08 'contacts' | 82 36 14 | 38 36 14 |
//| | ^ ^ ^ ^ |
//| | | | | | |
//| | | +-------------|--+ |
//| | +----------------+ |
//+-----------------------------* end level 3, end level 2 ------*
//| A2 14 | 82 20 | 38 0 | new level 2
//| A3 12 | 82 20 18 | 38 0 0 | new level 3
//| 04 0B 'objectclass' | 82 20 18 | 38 0 13 |
//| 04 03 'ttt' | 82 20 18 | 60 20 18 |
//| | ^ ^ ^ ^ |
//| | | | | | |
//| | | +-------------|--+ |
//| | +----------------+ |
//+-----------------------------* end level 3, end level 2 ------*
//| A4 14 | 82 20 | 60 0 | new level 2
//| 04 0B 'objectclass' | 82 20 | 60 13 |
//| 30 05 | 82 20 | 60 13 |
//| 82 03 'top' | 82 20 | 82 20 |
//| | ^ ^ ^ ^ |
//| | | | | | |
//| | | +-------------|--+ |
//| | +----------------+ |
//+-----------------------------* end level 2, end level 1 ------*
//+-----------------------------+----------------+---------------+
//
// When the current length equals the expected length of the parent PDU,
// then we are able to 'close' the parent : it has all its children. This
// is propagated through all the tree, until either there are no more
// parents, or the expected length of the parent is different from the
// current length.
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG,
new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG,
new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG,
new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init Equality filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE,
LdapConstants.EQUALITY_MATCH_FILTER_TAG, new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE,
LdapConstants.SUBSTRINGS_FILTER_TAG, new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE,
LdapConstants.GREATER_OR_EQUAL_FILTER_TAG, new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE,
LdapConstants.LESS_OR_EQUAL_FILTER_TAG, new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init Present Match filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from TypesOnly to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Extensible Match filter
super.transitions[LdapStatesEnum.TYPES_ONLY_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.TYPES_ONLY_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE,
LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG, new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG, new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG, new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG, new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE, LdapConstants.GREATER_OR_EQUAL_FILTER_TAG,
new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from AND to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.AND_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.AND_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG,
new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG, new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG, new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG, new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE, LdapConstants.GREATER_OR_EQUAL_FILTER_TAG,
new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from OR to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.OR_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.OR_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG,
new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG, new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG, new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG, new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE, LdapConstants.GREATER_OR_EQUAL_FILTER_TAG,
new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from NOT to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init extensible match filter
super.transitions[LdapStatesEnum.NOT_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.NOT_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG,
new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Equality match to Attribute Desc Filter
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// AttributeValueAssertion ::= SEQUENCE {
// attributeDesc AttributeDescription,
// ...
//
// Init Attribute Desc filter
super.transitions[LdapStatesEnum.EQUALITY_MATCH_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.EQUALITY_MATCH_STATE, LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE,
UniversalTag.OCTET_STRING.getValue(), new InitAttributeDescFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Attribute Desc Filter to Assertion Value Filter
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// AttributeValueAssertion ::= SEQUENCE {
// ...
// assertionValue AssertionValue }
//
// Init Assertion Value filter
super.transitions[LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE, LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE,
UniversalTag.OCTET_STRING.getValue(), new InitAssertionValueFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG,
new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG,
new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG,
new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE,
LdapConstants.EQUALITY_MATCH_FILTER_TAG, new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE,
LdapConstants.SUBSTRINGS_FILTER_TAG, new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE,
LdapConstants.GREATER_OR_EQUAL_FILTER_TAG, new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE,
LdapConstants.LESS_OR_EQUAL_FILTER_TAG, new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.PRESENT_STATE,
LdapConstants.PRESENT_FILTER_TAG, new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.APPROX_MATCH_STATE,
LdapConstants.APPROX_MATCH_FILTER_TAG, new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Assertion Value Filter filter
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE,
LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG, new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Assertion Value Filter to Attribute Description List
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Init attribute description list
super.transitions[LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.ASSERTION_VALUE_FILTER_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE,
UniversalTag.SEQUENCE.getValue(), new InitAttributeDescListAction() );
// --------------------------------------------------------------------------------------------
// Transition from Attribute Description List to AttributeDescription
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Store attribute description
super.transitions[LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE,
UniversalTag.OCTET_STRING.getValue(), new AttributeDescAction() );
// --------------------------------------------------------------------------------------------
// Transition from Attribute Description List to Controls
// --------------------------------------------------------------------------------------------
// searchRequest SearchRequest,
// ... },
// controls [0] Controls OPTIONAL }
//
// Empty attribute description list, with controls
super.transitions[LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE.ordinal()][LdapConstants.CONTROLS_TAG] = new GrammarTransition(
LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, LdapStatesEnum.CONTROLS_STATE, LdapConstants.CONTROLS_TAG,
new ControlsInitAction() );
// --------------------------------------------------------------------------------------------
// Transition from Attribute Description to AttributeDescription
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Store attribute description
super.transitions[LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE,
UniversalTag.OCTET_STRING.getValue(), new AttributeDescAction() );
// --------------------------------------------------------------------------------------------
// transition from Attribute Description to Controls.
// --------------------------------------------------------------------------------------------
// searchRequest SearchRequest,
// ... },
// controls [0] Controls OPTIONAL }
//
super.transitions[LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE.ordinal()][LdapConstants.CONTROLS_TAG] = new GrammarTransition(
LdapStatesEnum.ATTRIBUTE_DESCRIPTION_STATE, LdapStatesEnum.CONTROLS_STATE, LdapConstants.CONTROLS_TAG,
new ControlsInitAction() );
// --------------------------------------------------------------------------------------------
// Transition from Greater Or Equal to Attribute Desc Filter
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// AttributeValueAssertion ::= SEQUENCE {
// attributeDesc AttributeDescription,
// ...
//
// Init Attribute Desc filter
super.transitions[LdapStatesEnum.GREATER_OR_EQUAL_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.GREATER_OR_EQUAL_STATE, LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE,
UniversalTag.OCTET_STRING.getValue(), new InitAttributeDescFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Less Or Equal to Attribute Desc Filter
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// lessOrEqual [6] AttributeValueAssertion,
// ...
//
// AttributeValueAssertion ::= SEQUENCE {
// attributeDesc AttributeDescription,
// ...
//
// Init Attribute Desc filter
super.transitions[LdapStatesEnum.LESS_OR_EQUAL_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE,
UniversalTag.OCTET_STRING.getValue(), new InitAttributeDescFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Substrings to typeSubstring
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// SubstringFilter ::= SEQUENCE {
// type AttributeDescription,
// ...
//
// Init substring type
super.transitions[LdapStatesEnum.SUBSTRING_FILTER_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapStatesEnum.TYPE_SUBSTRING_STATE, UniversalTag.OCTET_STRING.getValue(),
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "Store substring filter type" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequestDecorator searchRequestDecorator = container.getMessage();
TLV tlv = container.getCurrentTLV();
// Store the value.
SubstringFilter substringFilter = ( SubstringFilter ) searchRequestDecorator.getTerminalFilter();
if ( tlv.getLength() == 0 )
{
String msg = I18n.err( I18n.ERR_04106 );
LOG.error( msg );
throw new DecoderException( msg );
}
else
{
String type = getType(tlv.getValue().getData());
substringFilter.setType( type );
// We now have to get back to the nearest filter which
// is not terminal.
searchRequestDecorator.setTerminalFilter( substringFilter );
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from typeSubstring to substrings
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
//
// Init substring type
super.transitions[LdapStatesEnum.TYPE_SUBSTRING_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.TYPE_SUBSTRING_STATE, LdapStatesEnum.SUBSTRINGS_STATE, UniversalTag.SEQUENCE.getValue(),
new GrammarAction<LdapMessageContainer<MessageDecorator<? extends Message>>>( "Substring Filter substringsSequence " )
{
public void action( LdapMessageContainer<MessageDecorator<? extends Message>> container ) throws DecoderException
{
TLV tlv = container.getCurrentTLV();
if ( tlv.getLength() == 0 )
{
LOG.error( I18n.err( I18n.ERR_04107 ) );
throw new DecoderException( "The substring sequence is empty" );
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from substrings to Initial
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// initial [0] LDAPSTRING,
// ...
//
// Store initial value
super.transitions[LdapStatesEnum.SUBSTRINGS_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_INITIAL_TAG] = new GrammarTransition(
LdapStatesEnum.SUBSTRINGS_STATE, LdapStatesEnum.INITIAL_STATE, LdapConstants.SUBSTRINGS_FILTER_INITIAL_TAG,
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "Store substring filter initial Value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequestDecorator searchRequestDecorator = container.getMessage();
TLV tlv = container.getCurrentTLV();
// Store the value.
SubstringFilter substringFilter = ( SubstringFilter ) searchRequestDecorator.getTerminalFilter();
if ( tlv.getLength() == 0 )
{
String msg = I18n.err( I18n.ERR_04108 );
LOG.error( msg );
throw new DecoderException( msg );
}
substringFilter.setInitialSubstrings( Strings.utf8ToString(tlv.getValue().getData()) );
// We now have to get back to the nearest filter which is
// not terminal.
searchRequestDecorator.unstackFilters( container );
}
} );
// --------------------------------------------------------------------------------------------
// Transition from substrings to any
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// any [1] LDAPSTRING,
// ...
//
// Store substring any type
super.transitions[LdapStatesEnum.SUBSTRINGS_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_ANY_TAG] = new GrammarTransition(
LdapStatesEnum.SUBSTRINGS_STATE, LdapStatesEnum.ANY_STATE, LdapConstants.SUBSTRINGS_FILTER_ANY_TAG,
new StoreAnyAction() );
// --------------------------------------------------------------------------------------------
// Transition from substrings to final
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// final [2] LDAPSTRING }
//
// Store substring final type
super.transitions[LdapStatesEnum.SUBSTRINGS_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG] = new GrammarTransition(
LdapStatesEnum.SUBSTRINGS_STATE, LdapStatesEnum.FINAL_STATE, LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG,
new StoreFinalAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to any
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// any [1] LDAPSTRING,
// ...
//
// Store substring any type
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_ANY_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.ANY_STATE, LdapConstants.SUBSTRINGS_FILTER_ANY_TAG,
new StoreAnyAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to final
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// final [2] LDAPSTRING }
//
// Store substring final type
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.FINAL_STATE, LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG,
new StoreFinalAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Attribute Description List
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Init attribute description list
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, UniversalTag.SEQUENCE.getValue(),
new InitAttributeDescListAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG,
new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG,
new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG,
new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE,
LdapConstants.GREATER_OR_EQUAL_FILTER_TAG, new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from initial to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Assertion Value Filter filter
super.transitions[LdapStatesEnum.INITIAL_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.INITIAL_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE,
LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG, new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to final
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// final [2] LDAPSTRING }
//
// Store substring final type
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.FINAL_STATE, LdapConstants.SUBSTRINGS_FILTER_FINAL_TAG,
new StoreFinalAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to any
// --------------------------------------------------------------------------------------------
// SubstringFilter ::= SEQUENCE {
// ...
// substrings SEQUENCE OF CHOICE {
// ...
// any [1] LDAPSTRING
// ...
//
// Store substring any type
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_ANY_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.ANY_STATE, LdapConstants.SUBSTRINGS_FILTER_ANY_TAG,
new StoreAnyAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Attribute Description List
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Init attribute description list
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, UniversalTag.SEQUENCE.getValue(),
new InitAttributeDescListAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG, new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG, new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG, new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE, LdapConstants.GREATER_OR_EQUAL_FILTER_TAG,
new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from any to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Assertion Value Filter filter
super.transitions[LdapStatesEnum.ANY_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.ANY_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG,
new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Attribute Description List
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Init attribute description list
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, UniversalTag.SEQUENCE.getValue(),
new InitAttributeDescListAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG,
new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG, new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG,
new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE,
LdapConstants.GREATER_OR_EQUAL_FILTER_TAG, new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from final to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Assertion Value Filter filter
super.transitions[LdapStatesEnum.FINAL_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.FINAL_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE,
LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG, new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to AND filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// and [0] SET OF Filter,
// ...
//
// Init AND filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.AND_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.AND_STATE, LdapConstants.AND_FILTER_TAG,
new InitAndFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to OR filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// or [1] SET OF Filter,
// ...
//
// Init OR filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.OR_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.OR_STATE, LdapConstants.OR_FILTER_TAG,
new InitOrFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to NOT filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// not [2] SET OF Filter,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.NOT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.NOT_STATE, LdapConstants.NOT_FILTER_TAG,
new InitNotFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Equality Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// equalityMatch [3] AttributeValueAssertion,
// ...
//
// Init NOT filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.EQUALITY_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.EQUALITY_MATCH_STATE, LdapConstants.EQUALITY_MATCH_FILTER_TAG,
new InitEqualityMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Substrings filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// substrings [4] SubstringFilter,
// ...
//
// Init Substrings filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.SUBSTRING_FILTER_STATE, LdapConstants.SUBSTRINGS_FILTER_TAG,
new InitSubstringsFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to GreaterOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// greaterOrEqual [5] AttributeValueAssertion,
// ...
//
// Init Greater Or Equal filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.GREATER_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.GREATER_OR_EQUAL_STATE,
LdapConstants.GREATER_OR_EQUAL_FILTER_TAG, new InitGreaterOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to LessOrEqual filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// LessOrEqual [6] AttributeValueAssertion,
// ...
//
// Init Less Or Equal filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.LESS_OR_EQUAL_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.LESS_OR_EQUAL_STATE, LdapConstants.LESS_OR_EQUAL_FILTER_TAG,
new InitLessOrEqualFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Present filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// present [7] AttributeDescription,
// ...
//
// Init present filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.PRESENT_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.PRESENT_STATE, LdapConstants.PRESENT_FILTER_TAG,
new InitPresentFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Approx Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// Init Approx Match filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.APPROX_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.APPROX_MATCH_STATE, LdapConstants.APPROX_MATCH_FILTER_TAG,
new InitApproxMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Extensible Match filter
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// ...
//
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion,
// ...
//
// Init Assertion Value Filter filter
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.EXTENSIBLE_MATCH_STATE,
LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG, new InitExtensibleMatchFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Present Filter to Attribute Description List
// --------------------------------------------------------------------------------------------
// SearchRequest ::= [APPLICATION 3] SEQUENCE {
// ...
// filter Filter,
// attributes AttributeDescriptionList }
//
// AttributeDescriptionList ::= SEQUENCE OF
// AttributeDescription
//
// Init attribute description list
super.transitions[LdapStatesEnum.PRESENT_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
LdapStatesEnum.PRESENT_STATE, LdapStatesEnum.ATTRIBUTE_DESCRIPTION_LIST_STATE, UniversalTag.SEQUENCE.getValue(),
new InitAttributeDescListAction() );
// --------------------------------------------------------------------------------------------
// Transition from Approx Match to Attribute Desc Filter
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// approxMatch [8] AttributeValueAssertion,
// ...
//
// AttributeValueAssertion ::= SEQUENCE {
// attributeDesc AttributeDescription,
// ...
//
// Init Attribute Desc filter
super.transitions[LdapStatesEnum.APPROX_MATCH_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
LdapStatesEnum.APPROX_MATCH_STATE, LdapStatesEnum.ATTRIBUTE_DESC_FILTER_STATE,
UniversalTag.OCTET_STRING.getValue(), new InitAttributeDescFilterAction() );
// --------------------------------------------------------------------------------------------
// Transition from Extensible Match to MatchingRule
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// matchingRule [1] MatchingRuleId OPTIONAL,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.EXTENSIBLE_MATCH_STATE.ordinal()][LdapConstants.MATCHING_RULE_ID_TAG] = new GrammarTransition(
LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapStatesEnum.MATCHING_RULE_STATE,
LdapConstants.MATCHING_RULE_ID_TAG, new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "Store matching rule Value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequestDecorator searchRequest = container.getMessage();
TLV tlv = container.getCurrentTLV();
// Store the value.
ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter )
searchRequest.getTerminalFilter();
if ( tlv.getLength() == 0 )
{
String msg = I18n.err( I18n.ERR_04109 );
LOG.error( msg );
// It will generate a PROTOCOL_ERROR
throw new DecoderException( I18n.err( I18n.ERR_04109 ) );
}
else
{
extensibleMatchFilter.setMatchingRule( Strings.utf8ToString(tlv.getValue().getData()) );
}
}
} );
// --------------------------------------------------------------------------------------------
// Transition from Extensible Match to type matching rule
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// type [2] AttributeDescription OPTIONAL,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.EXTENSIBLE_MATCH_STATE.ordinal()][LdapConstants.MATCHING_RULE_TYPE_TAG] = new GrammarTransition(
LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapStatesEnum.TYPE_MATCHING_RULE_STATE,
LdapConstants.MATCHING_RULE_TYPE_TAG, new StoreTypeMatchingRuleAction() );
// --------------------------------------------------------------------------------------------
// Transition from Extensible Match to match value
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// matchValue [3] AssertionValue,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.EXTENSIBLE_MATCH_STATE.ordinal()][LdapConstants.MATCH_VALUE_TAG] = new GrammarTransition(
LdapStatesEnum.EXTENSIBLE_MATCH_STATE, LdapStatesEnum.MATCH_VALUE_STATE, LdapConstants.MATCH_VALUE_TAG,
new StoreMatchValueAction() );
// --------------------------------------------------------------------------------------------
// Transition from matching rule to type matching rule
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// type [2] AttributeDescription OPTIONAL,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.MATCHING_RULE_STATE.ordinal()][LdapConstants.MATCHING_RULE_TYPE_TAG] = new GrammarTransition(
LdapStatesEnum.MATCHING_RULE_STATE, LdapStatesEnum.TYPE_MATCHING_RULE_STATE,
LdapConstants.MATCHING_RULE_TYPE_TAG, new StoreTypeMatchingRuleAction() );
// --------------------------------------------------------------------------------------------
// Transition from matching rule to match value
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// matchValue [3] AssertionValue,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.MATCHING_RULE_STATE.ordinal()][LdapConstants.MATCH_VALUE_TAG] = new GrammarTransition(
LdapStatesEnum.MATCHING_RULE_STATE, LdapStatesEnum.MATCH_VALUE_STATE, LdapConstants.MATCH_VALUE_TAG,
new StoreMatchValueAction() );
// --------------------------------------------------------------------------------------------
// Transition from matching type to match value
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// matchValue [3] AssertionValue,
// ...
//
// Store the matching rule ID
super.transitions[LdapStatesEnum.TYPE_MATCHING_RULE_STATE.ordinal()][LdapConstants.MATCH_VALUE_TAG] = new GrammarTransition(
LdapStatesEnum.TYPE_MATCHING_RULE_STATE, LdapStatesEnum.MATCH_VALUE_STATE, LdapConstants.MATCH_VALUE_TAG,
new StoreMatchValueAction() );
// --------------------------------------------------------------------------------------------
// Transition from match value to dnAttributes
// --------------------------------------------------------------------------------------------
// Filter ::= CHOICE {
// ...
// extensibleMatch [9] MatchingRuleAssertion }
//
// MatchingRuleAssertion ::= SEQUENCE {
// ...
// dnAttributes [4] BOOLEAN DEFAULT FALSE }
//
// Store the dnAttributes flag
super.transitions[LdapStatesEnum.MATCH_VALUE_STATE.ordinal()][LdapConstants.DN_ATTRIBUTES_FILTER_TAG] = new GrammarTransition(
LdapStatesEnum.MATCH_VALUE_STATE, LdapStatesEnum.DN_ATTRIBUTES_STATE,
LdapConstants.DN_ATTRIBUTES_FILTER_TAG,
new GrammarAction<LdapMessageContainer<SearchRequestDecorator>>( "Store matching dnAttributes Value" )
{
public void action( LdapMessageContainer<SearchRequestDecorator> container ) throws DecoderException
{
SearchRequestDecorator searchRequest = container.getMessage();
TLV tlv = container.getCurrentTLV();
// Store the value.
ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter ) searchRequest.getTerminalFilter();
// We get the value. If it's a 0, it's a FALSE. If it's
// a FF, it's a TRUE. Any other value should be an error,
// but we could relax this constraint. So if we have
// something
// which is not 0, it will be interpreted as TRUE, but we
// will generate a warning.
Value value = tlv.getValue();
try
{
extensibleMatchFilter.setDnAttributes( BooleanDecoder.parse( value ) );
}
catch ( BooleanDecoderException bde )
{
LOG.error( I18n
.err( I18n.ERR_04110, Strings.dumpBytes(value.getData()), bde.getMessage() ) );
throw new DecoderException( bde.getMessage() );
}
if ( IS_DEBUG )
{
LOG.debug( "Dn Attributes : {}", Boolean.valueOf( extensibleMatchFilter.isDnAttributes() ) );
}
// unstack the filters if needed
searchRequest.unstackFilters( container );
}
} );
// --------------------------------------------------------------------------------------------
// Transition from match value to AND filter