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 2009/07/21 19:04:29 UTC

svn commit: r796383 [7/23] - in /directory/shared/trunk: ./ dsml-parser/ dsml-parser/src/ dsml-parser/src/main/ dsml-parser/src/main/java/ dsml-parser/src/main/java/org/ dsml-parser/src/main/java/org/apache/ dsml-parser/src/main/java/org/apache/directo...

Added: directory/shared/trunk/dsml-parser/src/main/java/org/apache/directory/studio/dsmlv2/request/Dsmlv2Grammar.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/dsml-parser/src/main/java/org/apache/directory/studio/dsmlv2/request/Dsmlv2Grammar.java?rev=796383&view=auto
==============================================================================
--- directory/shared/trunk/dsml-parser/src/main/java/org/apache/directory/studio/dsmlv2/request/Dsmlv2Grammar.java (added)
+++ directory/shared/trunk/dsml-parser/src/main/java/org/apache/directory/studio/dsmlv2/request/Dsmlv2Grammar.java Tue Jul 21 17:04:13 2009
@@ -0,0 +1,2733 @@
+/*
+ *  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.studio.dsmlv2.request;
+
+
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.HashMap;
+
+import javax.naming.InvalidNameException;
+import javax.naming.NamingException;
+
+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.ControlCodec;
+import org.apache.directory.shared.ldap.codec.LdapConstants;
+import org.apache.directory.shared.ldap.codec.abandon.AbandonRequestCodec;
+import org.apache.directory.shared.ldap.codec.add.AddRequestCodec;
+import org.apache.directory.shared.ldap.codec.bind.BindRequestCodec;
+import org.apache.directory.shared.ldap.codec.bind.SimpleAuthentication;
+import org.apache.directory.shared.ldap.codec.compare.CompareRequestCodec;
+import org.apache.directory.shared.ldap.codec.del.DelRequestCodec;
+import org.apache.directory.shared.ldap.codec.extended.ExtendedRequestCodec;
+import org.apache.directory.shared.ldap.codec.modify.ModifyRequestCodec;
+import org.apache.directory.shared.ldap.codec.modifyDn.ModifyDNRequestCodec;
+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.SearchRequestCodec;
+import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
+import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.entry.client.ClientBinaryValue;
+import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
+import org.apache.directory.shared.ldap.filter.SearchScope;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.name.Rdn;
+import org.apache.directory.shared.ldap.util.Base64;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.apache.directory.studio.dsmlv2.AbstractGrammar;
+import org.apache.directory.studio.dsmlv2.Dsmlv2Container;
+import org.apache.directory.studio.dsmlv2.Dsmlv2StatesEnum;
+import org.apache.directory.studio.dsmlv2.GrammarAction;
+import org.apache.directory.studio.dsmlv2.GrammarTransition;
+import org.apache.directory.studio.dsmlv2.IGrammar;
+import org.apache.directory.studio.dsmlv2.ParserUtils;
+import org.apache.directory.studio.dsmlv2.Tag;
+import org.apache.directory.studio.dsmlv2.request.BatchRequest.OnError;
+import org.apache.directory.studio.dsmlv2.request.BatchRequest.Processing;
+import org.apache.directory.studio.dsmlv2.request.BatchRequest.ResponseOrder;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+
+/**
+ * This Class represents the DSMLv2 Request Grammar
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class Dsmlv2Grammar extends AbstractGrammar implements IGrammar
+{
+    /** The instance of grammar. Dsmlv2Grammar is a singleton */
+    private static Dsmlv2Grammar instance = new Dsmlv2Grammar();
+
+
+    /**
+     * Creates a new instance of 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_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_END_TAG, controlValueCreation ) );
+
+        // 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_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>();
+
+        // 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_END_TAG, controlValueCreation ) );
+
+        // 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_ATTR_START_TAG, addRequestAddValue ) );
+
+        // 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_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_END_TAG, controlValueCreation ) );
+
+        // 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_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_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_END_TAG, controlValueCreation ) );
+
+        // 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_END_TAG, compareRequestAddValue ) );
+
+        //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_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_END_TAG, controlValueCreation ) );
+
+        // 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_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.EXTENDED_REQUEST_REQUESTNAME_END_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_END_TAG, controlValueCreation ) );
+
+        // 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_END_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_END_TAG, extendedRequestAddName ) );
+
+        // 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_END_TAG, extendedRequestAddValue ) );
+
+        // 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_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_END_TAG, controlValueCreation ) );
+
+        // 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_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_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_END_TAG, controlValueCreation ) );
+
+        // 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_END_TAG, modifyRequestAddValue ) );
+
+        // 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_END_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_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_END_TAG, controlValueCreation ) );
+
+        // 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_END_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_END_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_END_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_END_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_END_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 ) );
+
+        //*** 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_END_TAG, extensibleMatchAddValue ) );
+
+        // 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_END_TAG] = new HashMap<Tag, GrammarTransition>();
+        super.transitions[Dsmlv2StatesEnum.SEARCH_REQUEST_ANY_END_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, null ) );
+
+        // 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_END_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_END_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_END_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_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_END_TAG, substringsFilterAddAny ) );
+
+        // 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_END_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_END_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_END_TAG, substringsFilterSetFinal ) );
+
+        // 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 )
+            {
+                batchRequest.setRequestID( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            // 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
+        {
+            AbandonRequestCodec abandonRequest = new AbandonRequestCodec();
+            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 )
+            {
+                abandonRequest.setMessageId( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            else
+            {
+                if ( ParserUtils.isRequestIdNeeded( container ) )
+                {
+                    throw new XmlPullParserException( "requestID attribute is required", 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
+        {
+            AddRequestCodec addRequest = new AddRequestCodec();
+            container.getBatchRequest().addRequest( addRequest );
+            addRequest.initEntry(); // 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 )
+            {
+                addRequest.setMessageId( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            else
+            {
+                if ( ParserUtils.isRequestIdNeeded( container ) )
+                {
+                    throw new XmlPullParserException( "requestID attribute is required", xpp, null );
+                }
+            }
+            // dn
+            attributeValue = xpp.getAttributeValue( "", "dn" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    addRequest.setEntryDn( 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
+        {
+            AddRequestCodec addRequest = ( AddRequestCodec ) container.getBatchRequest().getCurrentRequest();
+
+            XmlPullParser xpp = container.getParser();
+
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // name
+            attributeValue = xpp.getAttributeValue( "", "name" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    addRequest.addAttributeType( attributeValue );
+                }
+                catch ( NamingException e )
+                {
+                    throw new XmlPullParserException( "can not add attribute value", xpp, e );
+                }
+            }
+            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
+        {
+            AddRequestCodec addRequest = ( AddRequestCodec ) container.getBatchRequest().getCurrentRequest();
+
+            XmlPullParser xpp = container.getParser();
+            try
+            {
+                // We have to catch the type Attribute Value before going to the next Text node
+                String typeValue = ParserUtils.getXsiTypeAttributeValue( xpp );
+
+                // Getting the value
+                String nextText = xpp.nextText();
+                if ( !nextText.equals( "" ) )
+                {
+                    if ( ParserUtils.isBase64BinaryValue( xpp, typeValue ) )
+                    {
+                        addRequest.addAttributeValue( Base64.decode( nextText.trim().toCharArray() ) );
+                    }
+                    else
+                    {
+                        addRequest.addAttributeValue( nextText.trim() );
+                    }
+                }
+            }
+            catch ( IOException e )
+            {
+                throw new XmlPullParserException( "An unexpected error ocurred : " + e.getMessage(), xpp, null );
+            }
+        }
+    };
+
+    /**
+     * GrammarAction that creates an Auth Request
+     */
+    private final GrammarAction authRequestCreation = new GrammarAction( "Create Auth Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            BindRequestCodec authRequest = new BindRequestCodec();
+            container.getBatchRequest().addRequest( authRequest );
+
+            SimpleAuthentication simpleAuthentication = new SimpleAuthentication();
+            simpleAuthentication.setSimple( StringTools.EMPTY_BYTES );
+            authRequest.setAuthentication( simpleAuthentication );
+            authRequest.setVersion( 3 );
+
+            XmlPullParser xpp = container.getParser();
+
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                authRequest.setMessageId( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            else
+            {
+                if ( ParserUtils.isRequestIdNeeded( container ) )
+                {
+                    throw new XmlPullParserException( "requestID attribute is required", xpp, null );
+                }
+            }
+            // principal
+            attributeValue = xpp.getAttributeValue( "", "principal" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    authRequest.setName( new LdapDN( attributeValue ) );
+                }
+                catch ( InvalidNameException e )
+                {
+                    throw new XmlPullParserException( "" + e.getMessage(), xpp, null );
+                }
+            }
+            else
+            {
+                throw new XmlPullParserException( "principal attribute is required", xpp, null );
+            }
+        }
+    };
+
+    /**
+     * GrammarAction that creates an Compare Request
+     */
+    private final GrammarAction compareRequestCreation = new GrammarAction( "Create Compare Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            CompareRequestCodec compareRequest = new CompareRequestCodec();
+            container.getBatchRequest().addRequest( compareRequest );
+
+            XmlPullParser xpp = container.getParser();
+
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                compareRequest.setMessageId( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            else
+            {
+                if ( ParserUtils.isRequestIdNeeded( container ) )
+                {
+                    throw new XmlPullParserException( "requestID attribute is required", xpp, null );
+                }
+            }
+            // dn
+            attributeValue = xpp.getAttributeValue( "", "dn" );
+            if ( attributeValue != null )
+            {
+                try
+                {
+                    compareRequest.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 Assertion to a Compare Request
+     */
+    private final GrammarAction compareRequestAddAssertion = new GrammarAction( "Add Assertion to Compare Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            CompareRequestCodec compareRequest = ( CompareRequestCodec ) container.getBatchRequest().getCurrentRequest();
+
+            XmlPullParser xpp = container.getParser();
+
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // name
+            attributeValue = xpp.getAttributeValue( "", "name" );
+            if ( attributeValue != null )
+            {
+                compareRequest.setAttributeDesc( attributeValue );
+
+            }
+            else
+            {
+                throw new XmlPullParserException( "name attribute is required", xpp, null );
+            }
+        }
+    };
+
+    /**
+     * GrammarAction that adds a Value to a Compare Request
+     */
+    private final GrammarAction compareRequestAddValue = new GrammarAction( "Add Value to Compare Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            CompareRequestCodec compareRequest = ( CompareRequestCodec ) container.getBatchRequest().getCurrentRequest();
+
+            XmlPullParser xpp = container.getParser();
+            try
+            {
+                // We have to catch the type Attribute Value before going to the next Text node
+                String typeValue = ParserUtils.getXsiTypeAttributeValue( xpp );
+
+                // Getting the value
+                String nextText = xpp.nextText();
+                if ( !nextText.equals( "" ) )
+                {
+                    if ( ParserUtils.isBase64BinaryValue( xpp, typeValue ) )
+                    {
+                        compareRequest.setAssertionValue( Base64.decode( nextText.trim().toCharArray() ) );
+                    }
+                    else
+                    {
+
+                        compareRequest.setAssertionValue( nextText.trim() );
+                    }
+                }
+            }
+            catch ( IOException e )
+            {
+                throw new XmlPullParserException( "An unexpected error ocurred : " + e.getMessage(), xpp, null );
+            }
+        }
+    };
+
+    /**
+     * GrammarAction that creates a Del Request
+     */
+    private final GrammarAction delRequestCreation = new GrammarAction( "Create Del Request" )
+    {
+        public void action( Dsmlv2Container container ) throws XmlPullParserException
+        {
+            DelRequestCodec delRequest = new DelRequestCodec();
+            container.getBatchRequest().addRequest( delRequest );
+
+            XmlPullParser xpp = container.getParser();
+
+            // Checking and adding the request's attributes
+            String attributeValue;
+            // requestID
+            attributeValue = xpp.getAttributeValue( "", "requestID" );
+            if ( attributeValue != null )
+            {
+                delRequest.setMessageId( ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) );
+            }
+            else
+            {
+                if ( ParserUtils.isRequestIdNeeded( container ) )
+                {
+                    throw new XmlPullParserException( "requestID attribute is required", xpp, null );

[... 1256 lines stripped ...]