You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/11/16 17:38:51 UTC

svn commit: r475805 [3/17] - in /directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser: ./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/direct...

Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/Dsmlv2Grammar.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/Dsmlv2Grammar.java?view=auto&rev=475805
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/Dsmlv2Grammar.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/Dsmlv2Grammar.java Thu Nov 16 08:38:31 2006
@@ -0,0 +1,2646 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+
+package org.apache.directory.ldapstudio.dsmlv2;
+
+
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.HashMap;
+
+import javax.naming.InvalidNameException;
+
+import org.apache.directory.ldapstudio.dsmlv2.BatchRequest.OnError;
+import org.apache.directory.ldapstudio.dsmlv2.BatchRequest.Processing;
+import org.apache.directory.ldapstudio.dsmlv2.BatchRequest.ResponseOrder;
+import org.apache.directory.shared.asn1.Asn1Object;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.asn1.primitives.OID;
+import org.apache.directory.shared.ldap.codec.AttributeValueAssertion;
+import org.apache.directory.shared.ldap.codec.Control;
+import org.apache.directory.shared.ldap.codec.LdapConstants;
+import org.apache.directory.shared.ldap.codec.abandon.AbandonRequest;
+import org.apache.directory.shared.ldap.codec.add.AddRequest;
+import org.apache.directory.shared.ldap.codec.bind.BindRequest;
+import org.apache.directory.shared.ldap.codec.bind.SimpleAuthentication;
+import org.apache.directory.shared.ldap.codec.compare.CompareRequest;
+import org.apache.directory.shared.ldap.codec.del.DelRequest;
+import org.apache.directory.shared.ldap.codec.extended.ExtendedRequest;
+import org.apache.directory.shared.ldap.codec.modify.ModifyRequest;
+import org.apache.directory.shared.ldap.codec.modifyDn.ModifyDNRequest;
+import org.apache.directory.shared.ldap.codec.search.AndFilter;
+import org.apache.directory.shared.ldap.codec.search.AttributeValueAssertionFilter;
+import org.apache.directory.shared.ldap.codec.search.ExtensibleMatchFilter;
+import org.apache.directory.shared.ldap.codec.search.Filter;
+import org.apache.directory.shared.ldap.codec.search.NotFilter;
+import org.apache.directory.shared.ldap.codec.search.OrFilter;
+import org.apache.directory.shared.ldap.codec.search.PresentFilter;
+import org.apache.directory.shared.ldap.codec.search.SearchRequest;
+import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.name.Rdn;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+
+/**
+ * This Class represents the DSMLv2 Request Grammar
+ */
+public class Dsmlv2Grammar extends AbstractGrammar implements IGrammar
+{
+    /** The instance of grammar. Dsmlv2Grammar is a singleton */
+    private static Dsmlv2Grammar instance = new Dsmlv2Grammar();
+
+    @SuppressWarnings("unchecked")
+    private Dsmlv2Grammar()
+    {
+        name = Dsmlv2Grammar.class.getName();
+        statesEnum = Dsmlv2StatesEnum.getInstance();
+
+        // Create the transitions table
+        super.transitions =  (HashMap<Tag, GrammarTransition>[]) Array.newInstance( HashMap.class, 200 );; // TODO Change this value
+                
+        //====================================================
+        //  Transitions concerning : BATCH REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.INIT_GRAMMAR_STATE] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // ** OPEN BATCH REQUEST **
+        // State: [INIT_GRAMMAR_STATE] - Tag: <batchRequest>
+        super.transitions[Dsmlv2StatesEnum.INIT_GRAMMAR_STATE].put( new Tag( "batchRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.INIT_GRAMMAR_STATE, Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, batchRequestCreation ));
+        
+        // ** CLOSE BATCH REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: </batchRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "batchRequest", Tag.END ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_END_TAG, null ) );
+        //state: [BATCHREQUEST_LOOP] - Tag: </batchRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "batchRequest", Tag.END ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.END_STATE, null ) );
+        
+        // ** ABANDON REQUEST **
+        // State: [BATCHREQUEST_START_TAG] - Tag: <abandonRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "abandonRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG, abandonRequestCreation ));
+        // state: [BATCHREQUEST_LOOP] - Tag: <abandonRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "abandonRequest", Tag.START ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG, abandonRequestCreation ) );
+ 
+        // ** ADD REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <addRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "addRequest", Tag.START),  new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_START_TAG, addRequestCreation ));
+        // state: [BATCHREQUEST_LOOP] - Tag: <addRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "addRequest", Tag.START),  new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.ADD_REQUEST_START_TAG, addRequestCreation ));
+        
+        // ** AUTH REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <authRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "authRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG, authRequestCreation ));
+        
+        // ** COMPARE REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <compareRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "compareRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG, compareRequestCreation ));
+        // state: [BATCHREQUEST_LOOP] - Tag: <compareRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "compareRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG, compareRequestCreation ));
+        
+        // ** DEL REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <delRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "delRequest", Tag.START ), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.DEL_REQUEST_START_TAG, delRequestCreation ));
+        // state: [BATCHREQUEST_LOOP] - Tag: <delRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "delRequest", Tag.START ), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.DEL_REQUEST_START_TAG, delRequestCreation ));  
+        
+        // ** EXTENDED REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <extendedRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "extendedRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG, extendedRequestCreation ));  
+        // state: [BATCHREQUEST_LOOP] - Tag: <extendedRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "extendedRequest", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG, extendedRequestCreation ));  
+        
+        // ** MOD DN REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <modDNRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "modDNRequest", Tag.START ), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG, modDNRequestCreation ) );  
+        // state: [BATCHREQUEST_LOOP] - Tag: <modDNRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "modDNRequest", Tag.START ), new GrammarTransition(
+            Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG, modDNRequestCreation ) );  
+        
+        // ** MODIFY REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <modifyRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "modifyRequest", Tag.START ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG, modifyRequestCreation ) );
+        // state: [BATCHREQUEST_LOOP] - Tag: <modifyRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "modifyRequest", Tag.START ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG, modifyRequestCreation ) );
+        
+        // ** SEARCH REQUEST **
+        // state: [BATCHREQUEST_START_TAG] - Tag: <searchRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_START_TAG].put( new Tag( "searchRequest", Tag.START ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG, searchRequestCreation ) ); 
+        // state: [BATCHREQUEST_LOOP] - Tag: <searchRequest>
+        super.transitions[Dsmlv2StatesEnum.BATCHREQUEST_LOOP].put( new Tag( "searchRequest", Tag.START ),
+            new GrammarTransition( Dsmlv2StatesEnum.BATCHREQUEST_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG, searchRequestCreation ) ); 
+
+        
+        //====================================================
+        //  Transitions concerning : ABANDON REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [ABANDON_REQUEST_START_TAG] - Tag: </abandonRequest>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG].put( new Tag( "abandonRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [ABANDON_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_START_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [ABANDON_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [ABANDON_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [ABANDON_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [ABANDON_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [ABANDON_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [ABANDON_REQUEST_CONTROL_END_TAG] - Tag: </abandonRequest>
+        super.transitions[Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG].put( new Tag( "abandonRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ABANDON_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : ADD REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_VALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // state: [ADD_REQUEST_START_TAG] -> Tag: </addRequest>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_START_TAG].put( new Tag( "addRequest", Tag.END ),
+            new GrammarTransition( Dsmlv2StatesEnum.ADD_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [ADD_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [ADD_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [ADD_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [ADD_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [ADD_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [ADD_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [ADD_REQUEST_CONTROL_END_TAG] - Tag: </addRequest>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG].put( new Tag( "addRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        // State: [ADD_REQUEST_START_TAG] - Tag: <attr>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_START_TAG].put( new Tag( "attr", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG,  addRequestAddAttribute ));
+        
+        // State: [ADD_REQUEST_CONTROL_END_TAG] - Tag: <attr>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG].put( new Tag( "attr", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG,  addRequestAddAttribute ));
+        
+        // State: [ADD_REQUEST_ATTR_END_TAG] - Tag: <attr>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG].put( new Tag( "attr", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG,  addRequestAddAttribute ));
+        
+        // State: [ADD_REQUEST_ATTR_START_TAG] - Tag: </attr>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG].put( new Tag( "attr", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG, null ));
+        
+        // State: [ADD_REQUEST_ATTR_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_ATTR_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_VALUE_START_TAG, addRequestAddValue ));
+
+        // State: [ADD_REQUEST_VALUE_END_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_VALUE_START_TAG, addRequestAddValue ));
+        
+        // State: [ADD_REQUEST_VALUE_START_TAG] - Tag: </value>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_VALUE_START_TAG].put( new Tag( "value", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_VALUE_START_TAG, Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG, null ));
+
+        // State: [ADD_REQUEST_VALUE_END_TAG] - Tag: </attr>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG].put( new Tag( "attr", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG, null ));
+        
+        // State: [ADD_REQUEST_ATTR_END_TAG] - Tag: </addRequest>
+        super.transitions[Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG].put( new Tag( "addRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.ADD_REQUEST_ATTR_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+                
+        
+        //====================================================
+        //  Transitions concerning : AUTH REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // state: [AUTH_REQUEST_START_TAG] -> Tag: </authRequest>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG].put( new Tag( "authRequest", Tag.END ),
+            new GrammarTransition( Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [AUTH_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_START_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [AUTH_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [AUTH_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [AUTH_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [AUTH_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [AUTH_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [AUTH_REQUEST_CONTROL_END_TAG] - Tag: </authRequest>
+        super.transitions[Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG].put( new Tag( "authRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.AUTH_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+
+        //====================================================
+        //  Transitions concerning : COMPARE REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [COMPARE_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [COMPARE_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [COMPARE_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [COMPARE_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [COMPARE_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [COMPARE_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [COMPARE_REQUEST_CONTROL_END_TAG] - Tag: </compareRequest>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG].put( new Tag( "compareRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        // State: [COMPARE_REQUEST_START_TAG] - Tag: <assertion>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_START_TAG].put( new Tag( "assertion", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_START_TAG,  compareRequestAddAssertion ));
+        
+        // State: [COMPARE_REQUEST_CONTROL_END_TAG] - Tag: <assertion>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG].put( new Tag( "assertion", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_START_TAG,  compareRequestAddAssertion ));
+        
+        // State: [COMPARE_REQUEST_ASSERTION_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_START_TAG, compareRequestAddValue ));
+        
+        // State: [COMPARE_REQUEST_VALUE_START_TAG] - Tag: </value>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_START_TAG].put( new Tag( "value", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_START_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_END_TAG, null ));
+
+        // State: [COMPARE_REQUEST_VALUE_END_TAG] - Tag: </assertion>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_END_TAG].put( new Tag( "assertion", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_END_TAG, null ));
+        
+        // State: [COMPARE_REQUEST_ASSERTION_END_TAG] - Tag: </compareRequest>
+        super.transitions[Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_END_TAG].put( new Tag( "compareRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.COMPARE_REQUEST_ASSERTION_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : DEL REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [DEL_REQUEST_START_TAG] - Tag: </delRequest>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_START_TAG].put( new Tag( "delRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [DEL_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_START_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [DEL_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [DEL_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [DEL_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [DEL_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [DEL_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [DEL_REQUEST_CONTROL_END_TAG] - Tag: </delRequest>
+        super.transitions[Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG].put( new Tag( "delRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.DEL_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : EXTENDED REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+              
+        // State: [EXTENDED_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [EXTENDED_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [EXTENDED_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [EXTENDED_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [EXTENDED_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [EXTENDED_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [EXTENDED_REQUEST_CONTROL_END_TAG] - Tag: </extendedRequest>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG].put( new Tag( "extendedRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        // State: [EXTENDED_REQUEST_START_TAG] - Tag: <requestName>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG].put( new Tag( "requestName", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_START_TAG, extendedRequestAddName ));
+        
+        // State: [EXTENDED_REQUEST_CONTROL_END_TAG] - Tag: <requestName>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG].put( new Tag( "requestName", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_START_TAG, extendedRequestAddName ));
+        
+        // State: [EXTENDED_REQUEST_REQUESTNAME_START_TAG] - Tag: </requestName>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_START_TAG].put( new Tag( "requestName", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG, null ));
+        
+        // State: [EXTENDED_REQUEST_REQUESTNAME_END_TAG] - Tag: </extendedRequest>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG].put( new Tag( "extendedRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [EXTENDED_REQUEST_REQUESTNAME_END_TAG] - Tag: <requestValue>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG].put( new Tag( "requestValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_START_TAG, extendedRequestAddValue ));
+        
+        // State: [EXTENDED_REQUEST_REQUESTVALUE_START_TAG] - Tag: </requestValue>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_START_TAG].put( new Tag( "requestValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_START_TAG, Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_END_TAG, null ));
+        
+        // State: [EXTENDED_REQUEST_REQUESTVALUE_END_TAG] - Tag: </requestRequest>
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_END_TAG].put( new Tag( "extendedRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTVALUE_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : MODIFY DN REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [MODIFY_DN_REQUEST_START_TAG] - Tag: </modDNRequest>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG].put( new Tag( "modDNRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [MODIFY_DN_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_START_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [MODIFY_DN_REQUEST_CONTROL_END_TAG] - Tag: </modDNRequest>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG].put( new Tag( "modDNRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_DN_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+  
+        
+        //====================================================
+        //  Transitions concerning : MODIFY REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [MODIFY_REQUEST_START_TAG] - Tag: </modifyRequest>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG].put( new Tag( "modifyRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP, null ));
+        
+        // State: [MODIFY_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [MODIFY_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [MODIFY_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [MODIFY_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [MODIFY_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [MODIFY_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [MODIFY_REQUEST_CONTROL_END_TAG] - Tag: </modifyRequest>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG].put( new Tag( "modifyRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        // State: [MODIFY_REQUEST_CONTROL_END_TAG] - Tag: <modification>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG].put( new Tag( "modification", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG,  modifyRequestAddModification ));
+        
+        // State: [MODIFY_REQUEST_START_TAG] - Tag: <modification>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG].put( new Tag( "modification", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG,  modifyRequestAddModification ));
+        
+        // State: [MODIFY_REQUEST_MODIFICATION_END_TAG] - Tag: <modification>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG].put( new Tag( "modification", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG,  modifyRequestAddModification ));
+        
+        // State: [MODIFY_REQUEST_MODIFICATION_START_TAG] - Tag: </modification>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG].put( new Tag( "modification", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG,  null ));
+        
+        // State: [MODIFY_REQUEST_MODIFICATION_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_START_TAG,  modifyRequestAddValue ));
+        
+        // State: [MODIFY_REQUEST_VALUE_START_TAG] - Tag: </value>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_START_TAG].put( new Tag( "value", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_START_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG,  null ));
+        
+        // State: [MODIFY_REQUEST_VALUE_END_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_START_TAG,  modifyRequestAddValue ));
+        
+        // State: [MODIFY_REQUEST_VALUE_END_TAG] - Tag: </modification>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG].put( new Tag( "modification", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG,  null ));
+        
+        // State: [MODIFY_REQUEST_MODIFICATION_END_TAG] - Tag: </modifyRequest>
+        super.transitions[Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG].put( new Tag( "modifyRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.MODIFY_REQUEST_MODIFICATION_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : SEARCH REQUEST
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [SEARCH_REQUEST_START_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG, controlCreation ));
+        
+        // State: [SEARCH_REQUEST_CONTROL_START_TAG] - Tag: <controlValue>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG].put( new Tag( "controlValue", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_START_TAG, controlValueCreation ));
+        
+        // State: [SEARCH_REQUEST_CONTROLVALUE_START_TAG] - Tag: </controlValue>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_START_TAG].put( new Tag( "controlValue", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_END_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_CONTROLVALUE_END_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_END_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROLVALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG,  null ));
+        
+        // State: [SEARCH_REQUEST_CONTROL_START_TAG] - Tag: </control>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG].put( new Tag( "control", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_CONTROL_END_TAG] - Tag: <control>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG].put( new Tag( "control", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_START_TAG, controlCreation ));
+
+        // State: [SEARCH_REQUEST_ATTRIBUTES_START_TAG] - Tag: </attributes>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG].put( new Tag( "attributes", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_END_TAG,  null ));
+        
+        // State: [SEARCH_REQUEST_ATTRIBUTES_START_TAG] - Tag: <attribute>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG].put( new Tag( "attribute", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_START_TAG,  searchRequestAddAttribute ));
+        
+        // State: [SEARCH_REQUEST_ATTRIBUTE_START_TAG] - Tag: </attribute>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_START_TAG].put( new Tag( "attribute", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG,  null ));
+        
+        // State: [SEARCH_REQUEST_ATTRIBUTE_END_TAG] - Tag: <attribute>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG].put( new Tag( "attribute", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_START_TAG,  searchRequestAddAttribute ));
+        
+        // State: [SEARCH_REQUEST_ATTRIBUTE_END_TAG] - Tag: </attributes>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG].put( new Tag( "attributes", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_END_TAG,  null ));
+        
+        // State: [SEARCH_REQUEST_ATTRIBUTES_END_TAG] - Tag: </searchRequest>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_END_TAG].put( new Tag( "searchRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+        
+        
+        //====================================================
+        //  Transitions concerning : FILTER
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EQUALITYMATCH_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_GREATEROREQUAL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_LESSOREQUAL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_APPROXMATCH_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_PRESENT_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        
+        // State: [SEARCH_REQUEST_START_TAG] - Tag: <filter>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG].put( new Tag( "filter", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_CONTROL_END_TAG] - Tag: <filter>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG].put( new Tag( "filter", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_CONTROL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, null ));
+        
+        //*** AND ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <and>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "and", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, andFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <and>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "and", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, andFilterCreation ));
+
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: </and>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "and", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, connectorFilterClose ));
+
+        //*** OR ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <or>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "or", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, orFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <or>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "or", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, orFilterCreation ));
+
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: </or>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "or", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, connectorFilterClose ));
+        
+        //*** NOT ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <not>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "not", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, notFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <not>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "not", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, notFilterCreation ));
+
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: </not>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "not", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, connectorFilterClose ));
+        
+        //*** SUBSTRINGS ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "substrings", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, substringsFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "substrings", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, substringsFilterCreation ));  
+        
+        //*** EQUALITY MATCH ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <equalityMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "equalityMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_EQUALITYMATCH_START_TAG, equalityMatchFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <equalityMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "equalityMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_EQUALITYMATCH_START_TAG, equalityMatchFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_EQUALITYMATCH_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EQUALITYMATCH_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_EQUALITYMATCH_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG, filterAddValue ));
+        
+        // State: [SEARCH_REQUEST_VALUE_END_TAG] - Tag: </equalityMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG].put( new Tag( "equalityMatch", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+         
+        //*** GREATER OR EQUAL ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <greaterOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "greaterOrEqual", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_GREATEROREQUAL_START_TAG, greaterOrEqualFilterCreation ));
+
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <greaterOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "greaterOrEqual", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_GREATEROREQUAL_START_TAG, greaterOrEqualFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_GREATEROREQUAL_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_GREATEROREQUAL_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_GREATEROREQUAL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG, filterAddValue ));
+        
+        // State: [SEARCH_REQUEST_VALUE_END_TAG] - Tag: </greaterOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG].put( new Tag( "greaterOrEqual", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+
+        //*** LESS OR EQUAL ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <lessOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "lessOrEqual", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_LESSOREQUAL_START_TAG, lessOrEqualFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <lessOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "lessOrEqual", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_LESSOREQUAL_START_TAG, lessOrEqualFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_LESSOREQUAL_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_LESSOREQUAL_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_LESSOREQUAL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG, filterAddValue ));
+        
+        // State: [SEARCH_REQUEST_VALUE_END_TAG] - Tag: </lessOrEqual>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG].put( new Tag( "lessOrEqual", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+
+        //*** LESS OR EQUAL ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <approxMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "approxMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_APPROXMATCH_START_TAG, approxMatchFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <approxMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "approxMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_APPROXMATCH_START_TAG, approxMatchFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_APPROXMATCH_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_APPROXMATCH_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_APPROXMATCH_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG, filterAddValue ));
+        
+        // State: [SEARCH_REQUEST_VALUE_END_TAG] - Tag: </approxMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG].put( new Tag( "approxMatch", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+        
+        //*** VALUE ***
+        // State: [SEARCH_REQUEST_VALUE_START_TAG] - Tag: </value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG].put( new Tag( "value", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_VALUE_END_TAG, null ));
+        
+        //*** PRESENT ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <present>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "present", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_PRESENT_START_TAG, presentFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <present>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "present", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_PRESENT_START_TAG, presentFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_PRESENT_START_TAG] - Tag: </present>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_PRESENT_START_TAG].put( new Tag( "present", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_PRESENT_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+        
+        //*** EXTENSIBLE MATCH ***
+        // State: [SEARCH_REQUEST_FILTER_START_TAG] - Tag: <extensibleMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG].put( new Tag( "extensibleMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG, extensibleMatchFilterCreation ));
+
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: <extensibleMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "extensibleMatch", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG, extensibleMatchFilterCreation ));
+        
+        // State: [SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG] - Tag: <value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG].put( new Tag( "value", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_START_TAG, extensibleMatchAddValue ));
+        
+        // State: [SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_START_TAG] - Tag: </value>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_START_TAG].put( new Tag( "value", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_END_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_END_TAG] - Tag: </extensibleMatch>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_END_TAG].put( new Tag( "extensibleMatch", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_EXTENSIBLEMATCH_VALUE_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, null ));
+        
+        //*** Filter (end) ***
+        // State: [SEARCH_REQUEST_FILTER_LOOP] - Tag: </filter>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP].put( new Tag( "filter", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG, null ));  
+        
+        // State: [SEARCH_REQUEST_FILTER_END_TAG] - Tag: <attributes>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG].put( new Tag( "attributes", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ATTRIBUTES_START_TAG,  null ));
+        
+        // State: [SEARCH_REQUEST_FILTER_END_TAG] - Tag: </searchRequest>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG].put( new Tag( "searchRequest", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_END_TAG, Dsmlv2StatesEnum.BATCHREQUEST_LOOP,  null ));
+
+        
+        //====================================================
+        //  Transitions concerning : SUBSTRING FILTER
+        //====================================================
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        
+        // State: [SEARCH_REQUEST_SUBSTRINGS_START_TAG] - Tag: </substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG].put( new Tag( "substrings", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, substringsFilterSetInitial ));
+        
+        // State: [SEARCH_REQUEST_SUBSTRINGS_START_TAG] - Tag: <initial>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG].put( new Tag( "initial", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_START_TAG, substringsFilterSetInitial ));
+        
+        // State: [SEARCH_REQUEST_INITIAL_END_TAG] - Tag: <any>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG].put( new Tag( "any", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG, substringsFilterAddAny ));
+        
+        // State: [SEARCH_REQUEST_INITIAL_END_TAG] - Tag: <final>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG].put( new Tag( "final", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG, substringsFilterSetFinal ));
+        
+        // State: [SEARCH_REQUEST_INITIAL_END_TAG] - Tag: </substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG].put( new Tag( "substrings", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, substringsFilterClose ));
+        
+        // State: [SEARCH_REQUEST_INITIAL_START_TAG] - Tag: </initial>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_START_TAG].put( new Tag( "initial", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_INITIAL_END_TAG, null )); 
+        
+        // State: [SEARCH_REQUEST_SUBSTRINGS_START_TAG] - Tag: <any>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG].put( new Tag( "any", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG, substringsFilterAddAny ));
+        
+        // State: [SEARCH_REQUEST_ANY_START_TAG] - Tag: </any>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG].put( new Tag( "any", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_ANY_END_TAG] - Tag: </any>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG].put( new Tag( "any", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_START_TAG, substringsFilterAddAny ));
+        
+        // State: [SEARCH_REQUEST_ANY_END_TAG] - Tag: <final>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG].put( new Tag( "final", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG, substringsFilterSetFinal ));
+        
+        // State: [SEARCH_REQUEST_ANY_END_TAG] - Tag: </substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG].put( new Tag( "substrings", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, substringsFilterClose ));
+        
+        // State: [SEARCH_REQUEST_SUBSTRINGS_START_TAG] - Tag: <final>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG].put( new Tag( "final", Tag.START), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_SUBSTRINGS_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG, substringsFilterSetFinal ));
+        
+        // State: [SEARCH_REQUEST_FINAL_START_TAG] - Tag: </final>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG].put( new Tag( "final", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_START_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_END_TAG, null ));
+        
+        // State: [SEARCH_REQUEST_FINAL_END_TAG] - Tag: </substrings>
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_END_TAG].put( new Tag( "substrings", Tag.END), new GrammarTransition(
+            Dsmlv2StatesEnum.SEARCH_REQUEST_FINAL_END_TAG, Dsmlv2StatesEnum.SEARCH_REQUEST_FILTER_LOOP, substringsFilterClose ));
+
+    } // End of the constructor
+
+    
+    //*************************
+    //*    GRAMMAR ACTIONS    *
+    //*************************
+
+    /**
+     * GrammarAction that creates an Abandon Request
+     */
+    private final GrammarAction batchRequestCreation = new GrammarAction( "Create Batch Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            BatchRequest batchRequest = new BatchRequest();
+            
+            container.setBatchRequest( batchRequest );
+            
+            XmlPullParser xpp = container.getParser();
+            
+            // Checking and adding the batchRequest's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    batchRequest.setRequestID( Integer.parseInt( attributeValue ) );
+                }
+                catch (NumberFormatException e) {
+                    throw new XmlPullParserException( "the given requestID is not an integer", xpp, null );
+                }
+            }
+            // processing
+            attributeValue = xpp.getAttributeValue( "", "processing" );
+            if ( attributeValue != null )
+            {
+                if ( "sequential".equals( attributeValue ) )
+                {
+                    batchRequest.setProcessing( Processing.SEQUENTIAL );
+                }
+                else if ( "parallel".equals( attributeValue ) )
+                {
+                    batchRequest.setProcessing( Processing.PARALLEL );
+                }
+                else
+                {
+                    throw new XmlPullParserException( "Unknown value for 'processing' attribute.", xpp, null );
+                }
+            }
+            else
+            {
+                batchRequest.setProcessing( Processing.SEQUENTIAL );
+            }
+            // onError
+            attributeValue = xpp.getAttributeValue( "", "onError" );
+            if ( attributeValue != null )
+            {
+                if ( "resume".equals( attributeValue ) )
+                {
+                    batchRequest.setOnError( OnError.RESUME );
+                }
+                else if ( "exit".equals( attributeValue ) )
+                {
+                    batchRequest.setOnError( OnError.EXIT );
+                }
+                else
+                {
+                    throw new XmlPullParserException( "Unknown value for 'onError' attribute.", xpp, null );
+                }
+            }
+            else
+            {
+                batchRequest.setOnError( OnError.EXIT );
+            }
+            // responseOrder
+            attributeValue = xpp.getAttributeValue( "", "responseOrder" );
+            if ( attributeValue != null )
+            {
+                if ( "sequential".equals( attributeValue ) )
+                {
+                    batchRequest.setResponseOrder( ResponseOrder.SEQUENTIAL );
+                }
+                else if ( "unordered".equals( attributeValue ) )
+                {
+                    batchRequest.setResponseOrder( ResponseOrder.UNORDERED );
+                }
+                else
+                {
+                    throw new XmlPullParserException( "Unknown value for 'responseOrder' attribute.", xpp, null );
+                }
+            }
+            else
+            {
+                batchRequest.setResponseOrder( ResponseOrder.SEQUENTIAL );
+            }
+        }
+    };
+    
+    /**
+     * GrammarAction that creates an Abandon Request
+     */
+    private final GrammarAction abandonRequestCreation = new GrammarAction( "Create Abandon Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            AbandonRequest abandonRequest = new AbandonRequest();
+            container.getBatchRequest().addRequest( abandonRequest );
+            
+            XmlPullParser xpp = container.getParser();
+            
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    abandonRequest.setMessageId( Integer.parseInt( attributeValue ) );
+                }
+                catch (NumberFormatException e) {
+                    throw new XmlPullParserException( "the given requestID is not an integer", xpp, null );
+                }
+            }
+            // abandonID
+            attributeValue = xpp.getAttributeValue( "", "abandonID" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    abandonRequest.setAbandonedMessageId( Integer.parseInt( attributeValue ) );
+                }
+                catch (NumberFormatException e) {
+                    throw new XmlPullParserException( "the given abandonID is not an integer", xpp, null );
+                }
+            }
+            else
+            {
+                throw new XmlPullParserException( "abandonID attribute is required", xpp, null );
+            }
+        }
+    };
+    
+    /**
+     * GrammarAction that creates an Add Request
+     */
+    private final GrammarAction addRequestCreation = new GrammarAction( "Create Add Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            AddRequest addRequest = new AddRequest();
+            container.getBatchRequest().addRequest( addRequest );
+            addRequest.initAttributes(); // TODO maybe delay that to the first attribute discovery
+            
+            XmlPullParser xpp = container.getParser();
+            
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    addRequest.setMessageId( Integer.parseInt( attributeValue ) );
+                }
+                catch (NumberFormatException e) {
+                    throw new XmlPullParserException( "the given requestID is not an integer", xpp, null );
+                }
+            }
+            // dn
+            attributeValue = xpp.getAttributeValue( "", "dn" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    addRequest.setEntry( new LdapDN( attributeValue ) );
+                }
+                catch (InvalidNameException e)
+                {
+                    throw new XmlPullParserException( "" + e.getMessage(), xpp, null );
+                }
+            }
+            else
+            {
+                throw new XmlPullParserException( "dn attribute is required", xpp, null );
+            }
+        }
+    };
+    
+    /**
+     * GrammarAction that adds an attribute to an Add Request
+     */
+    private final GrammarAction addRequestAddAttribute = new GrammarAction( "Add Attribute to Add Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            AddRequest addRequest = ( AddRequest ) container.getBatchRequest().getCurrentRequest();
+            
+            XmlPullParser xpp = container.getParser();
+            
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // name
+            attributeValue = xpp.getAttributeValue( "", "name" );
+            if ( attributeValue != null )
+            {
+                addRequest.addAttributeType( attributeValue );
+            }
+            else
+            {
+                throw new XmlPullParserException( "name attribute is required", xpp, null );
+            }
+        }
+    };
+    
+    /**
+     * GrammarAction that adds a Value to an Attribute of an Add Request
+     */
+    private final GrammarAction addRequestAddValue = new GrammarAction( "Add Value to Attribute" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            AddRequest addRequest = ( AddRequest ) container.getBatchRequest().getCurrentRequest();
+            
+            XmlPullParser xpp = container.getParser();
+            
+            int eventType = 0 ;
+            try
+            {
+                eventType = xpp.next();
+            }
+            catch ( IOException e )
+            {
+                throw new XmlPullParserException( e.getMessage() , xpp, null );
+            }
+                   
+            if ( eventType != XmlPullParser.TEXT )
+            {
+                // TODO we insert a blank value
+                addRequest.addAttributeValue( "" );
+            }
+            else
+            {
+                addRequest.addAttributeValue( xpp.getText().trim() );
+            }
+        }
+    };
+    
+    /**
+     * GrammarAction that creates an Auth Request
+     */
+    private final GrammarAction authRequestCreation = new GrammarAction( "Create Auth Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            BindRequest authRequest = new BindRequest();

[... 1424 lines stripped ...]