You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2006/04/29 23:48:35 UTC

svn commit: r398243 - in /directory/trunks/shared/ldap/src: main/antlr/ main/java/org/apache/directory/shared/ldap/trigger/ test/java/org/apache/directory/shared/ldap/trigger/

Author: ersiner
Date: Sat Apr 29 14:48:34 2006
New Revision: 398243

URL: http://svn.apache.org/viewcvs?rev=398243&view=rev
Log:
changes and notes:

* Added a dummy TriggerSpecification implementation without any logic inside.
I'm not sure if this will fit our needs. This may face an extensive update while writing the Trigger Interceptor.
* Modified the grammar populate the bean.
* Modified test cases for testing bean population.

Added:
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/ActionTime.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/LdapOperation.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/SearchScope.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureLanguageOption.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureOption.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureParameter.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureSearchContextOption.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecification.java
Modified:
    directory/trunks/shared/ldap/src/main/antlr/TriggerSpecification.g
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParser.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParserTest.java

Modified: directory/trunks/shared/ldap/src/main/antlr/TriggerSpecification.g
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/antlr/TriggerSpecification.g?rev=398243&r1=398242&r2=398243&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/antlr/TriggerSpecification.g (original)
+++ directory/trunks/shared/ldap/src/main/antlr/TriggerSpecification.g Sat Apr 29 14:48:34 2006
@@ -22,6 +22,8 @@
 
 import javax.naming.Name;
 import javax.naming.NamingException;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.directory.shared.ldap.name.DnParser;
 import org.apache.directory.shared.ldap.name.NameComponentNormalizer;
@@ -41,7 +43,7 @@
  * @see http://docs.safehaus.org/display/APACHEDS/Grammar+for+Triggers
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$ $Date$
+ * @version $Rev:$, $Date:$
  */
 class AntlrTriggerSpecificationParser extends Parser;
 
@@ -70,6 +72,16 @@
     private boolean isNormalizing = false;
     private NameComponentNormalizer normalizer;
     
+    private ActionTime triggerActionTime;
+    
+    private LdapOperation triggerLdapOperation;
+    
+    private String triggerStoredProcedureName;
+    
+    private List triggerStoredProcedureOptions = new ArrayList();
+    
+    private List triggerStoredProcedureParameters = new ArrayList();
+    
     /**
      * Creates a (normalizing) subordinate DnParser for parsing Names.
      * This method MUST be called for each instance while we cannot do
@@ -116,49 +128,58 @@
 //  parser productions
 // ----------------------------------------------------------------------------
 
-wrapperEntryPoint
+wrapperEntryPoint returns [ TriggerSpecification triggerSpec ]
 {
     log.debug( "entered wrapperEntryPoint()" );
+    triggerSpec = null;
 }
     :
-    ( SP )* triggerSpecification ( SP )* EOF
+    ( SP )* triggerSpec=triggerSpecification ( SP )* EOF
     ;
 
 // -----------------------------------------------------------------------------
 //  main rules
 // -----------------------------------------------------------------------------
 
-triggerSpecification
+triggerSpecification returns [ TriggerSpecification triggerSpec ]
 {
     log.debug( "entered triggerSpecification()" );
+    triggerSpec = null;
 }
     :
     actionTime ( SP )+ ldapOperationAndStoredProcedureCall
+    { triggerSpec = new TriggerSpecification( triggerLdapOperation,
+                                              triggerActionTime,
+                                              triggerStoredProcedureName,
+                                              triggerStoredProcedureOptions,
+                                              triggerStoredProcedureParameters
+                                            );
+    }
     ;
     
 actionTime
 {
     log.debug( "entered actionTime()" );
 }
-    : ID_BEFORE
-    | ID_AFTER
-    | ID_INSTEADOF
+    : ID_BEFORE { triggerActionTime = ActionTime.BEFORE; }
+    | ID_AFTER { triggerActionTime = ActionTime.AFTER; }
+    | ID_INSTEADOF { triggerActionTime = ActionTime.INSTEADOF; }
     ;
     
 ldapOperationAndStoredProcedureCall
 {
     log.debug( "entered ldapOperationAndStoredProcedureCall()" );
 }
-    : bindOperationAndStoredProcedureCall
-    | unbindOperationAndStoredProcedureCall
-    | searchOperationAndStoredProcedureCall
-    | modifyOperationAndStoredProcedureCall
-    | addOperationAndStoredProcedureCall
-    | delOperationAndStoredProcedureCall
-    | modDNOperationAndStoredProcedureCall
-    | compareOperationAndStoredProcedureCall
-    | abandonOperationAndStoredProcedureCall
-    | extendedOperationAndStoredProcedureCall
+    : bindOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.BIND; }
+    | unbindOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.UNBIND; }
+    | searchOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.SEARCH; }
+    | modifyOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.MODIFY; }
+    | addOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.ADD; }
+    | delOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.DEL; }
+    | modDNOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.MODDN; }
+    | compareOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.COMPARE; }
+    | abandonOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.ABANDON; }
+    | extendedOperationAndStoredProcedureCall { triggerLdapOperation = LdapOperation.EXTENDED; }
     ;
 
 // -----------------------------------------------------------------------------
@@ -289,8 +310,9 @@
     log.debug( "entered theCompositeRuleForCallAndSPNameAndSPOptionList()" );
 }
     :
-    ( SP )+ ID_CALL ( SP )+ fullyQualifiedStoredProcedureName ( SP )*
-        ( genericStoredProcedureOptionList ( SP )* )?
+    ( SP )+ ID_CALL ( SP )+ triggerStoredProcedureName=fullyQualifiedStoredProcedureName ( SP )*
+        ( genericStoredProcedureOptionList ( SP )* )?
+    {  }
     ;
 
 // -----------------------------------------------------------------------------
@@ -395,9 +417,9 @@
 {
     log.debug( "entered bindStoredProcedureParameter()" );
 }
-    : ID_version
-    | ID_name
-    | ID_authentication
+    : ID_version { triggerStoredProcedureParameters.add( StoredProcedureParameter.BindStoredProcedureParameter.VERSION ); }
+    | ID_name { triggerStoredProcedureParameters.add( StoredProcedureParameter.BindStoredProcedureParameter.NAME ); }
+    | ID_authentication { triggerStoredProcedureParameters.add( StoredProcedureParameter.BindStoredProcedureParameter.AUTHENTICATION ); }
     | genericStoredProcedureParameter
     ;
 
@@ -412,14 +434,14 @@
 {
     log.debug( "entered searchStoredProcedureParameter()" );
 }
-    : ID_baseObject
-    | ID_scope
-    | ID_derefAliases
-    | ID_sizeLimit
-    | ID_timeLimit
-    | ID_typesOnly
-    | ID_filter
-    | ID_attributes
+    : ID_baseObject { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.BASE_OBJECT ); }
+    | ID_scope { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.SCOPE ); }
+    | ID_derefAliases { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.DEREF_ALIASES ); }
+    | ID_sizeLimit { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.SIZE_LIMIT ); }
+    | ID_timeLimit { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.TIME_LIMIT ); }
+    | ID_typesOnly { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.TYPES_ONLY ); }
+    | ID_filter { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.FILTER ); }
+    | ID_attributes { triggerStoredProcedureParameters.add( StoredProcedureParameter.SearchStoredProcedureParameter.ATTRIBUTES ); }
     | genericStoredProcedureParameter
     ;
 
@@ -427,10 +449,10 @@
 {
     log.debug( "entered modifyStoredProcedureParameter()" );
 }
-    : ID_object
-    | ID_modification
-    | ID_oldEntry
-    | ID_newEntry
+    : ID_object { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModifyStoredProcedureParameter.OBJECT ); }
+    | ID_modification { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModifyStoredProcedureParameter.MODIFICATION ); }
+    | ID_oldEntry { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModifyStoredProcedureParameter.OLD_ENTRY ); }
+    | ID_newEntry { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModifyStoredProcedureParameter.NEW_ENTRY ); }
     | genericStoredProcedureParameter
     ;
 
@@ -438,8 +460,8 @@
 {
     log.debug( "entered addStoredProcedureParameter()" );
 }
-    : ID_entry
-    | ID_attributes
+    : ID_entry { triggerStoredProcedureParameters.add( StoredProcedureParameter.AddStoredProcedureParameter.ENTRY ); }
+    | ID_attributes { triggerStoredProcedureParameters.add( StoredProcedureParameter.AddStoredProcedureParameter.ATTRIBUTES ); }
     | genericStoredProcedureParameter
     ;
 
@@ -447,8 +469,8 @@
 {
     log.debug( "entered delStoredProcedureParameter()" );
 }
-    : ID_name
-    | ID_deletedEntry
+    : ID_name { triggerStoredProcedureParameters.add( StoredProcedureParameter.DelStoredProcedureParameter.NAME ); }
+    | ID_deletedEntry { triggerStoredProcedureParameters.add( StoredProcedureParameter.DelStoredProcedureParameter.DELETED_ENTRY ); }
     | genericStoredProcedureParameter
     ;
 
@@ -456,10 +478,10 @@
 {
     log.debug( "entered modDNStoredProcedureParameter()" );
 }
-    : ID_entry
-    | ID_newrdn
-    | ID_deleteoldrdn
-    | ID_newSuperior
+    : ID_entry { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModDNStoredProcedureParameter.ENTRY ); }
+    | ID_newrdn { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModDNStoredProcedureParameter.NEW_RDN ); }
+    | ID_deleteoldrdn { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModDNStoredProcedureParameter.DELETE_OLD_RDN ); }
+    | ID_newSuperior { triggerStoredProcedureParameters.add( StoredProcedureParameter.ModDNStoredProcedureParameter.NEW_SUPERIOR ); }
     | genericStoredProcedureParameter
     ;
 
@@ -467,8 +489,8 @@
 {
     log.debug( "entered compareStoredProcedureParameter()" );
 }
-    : ID_entry
-    | ID_ava
+    : ID_entry { triggerStoredProcedureParameters.add( StoredProcedureParameter.CompareStoredProcedureParameter.ENTRY ); }
+    | ID_ava { triggerStoredProcedureParameters.add( StoredProcedureParameter.CompareStoredProcedureParameter.AVA ); }
     | genericStoredProcedureParameter
     ;
 
@@ -476,7 +498,7 @@
 {
     log.debug( "entered abandonStoredProcedureParameter()" );
 }
-    : ID_messageId
+    : ID_messageId { triggerStoredProcedureParameters.add( StoredProcedureParameter.AbandonStoredProcedureParameter.MESSAGE_ID ); }
     | genericStoredProcedureParameter
     ;
     
@@ -484,8 +506,8 @@
 {
     log.debug( "entered extendedStoredProcedureParameter()" );
 }
-    : ID_requestName
-    | ID_requestValue
+    : ID_requestName { triggerStoredProcedureParameters.add( StoredProcedureParameter.ExtendedStoredProcedureParameter.REQUEST_NAME ); }
+    | ID_requestValue { triggerStoredProcedureParameters.add( StoredProcedureParameter.ExtendedStoredProcedureParameter.REQUEST_VALUE ); }
     | genericStoredProcedureParameter
     ;
 
@@ -495,8 +517,8 @@
 {
     log.debug( "entered genericStoredProcedureParameter()" );
 }
-    :
-    ID_operationTime | ID_operationPrincipal
+    : ID_operationTime { triggerStoredProcedureParameters.add( StoredProcedureParameter.OPERATION_TIME ); }
+    | ID_operationPrincipal { triggerStoredProcedureParameters.add( StoredProcedureParameter.OPERATION_PRINCIPAL ); }
     ;
 
 // -----------------------------------------------------------------------------
@@ -513,55 +535,64 @@
 genericStoredProcedureOption
 {
     log.debug( "entered genericStoredProcedureOption()" );
+    StoredProcedureOption spOption = null;
 }
-    :
-    storedProcedureLanguageOption | storedProcedureSearchContextOption
+    : ( spOption=storedProcedureLanguageOption | spOption=storedProcedureSearchContextOption )
+    { triggerStoredProcedureOptions.add( spOption ); }
     ;
 
-storedProcedureLanguageOption
+storedProcedureLanguageOption returns [ StoredProcedureLanguageOption spLanguageOption ]
 {
     log.debug( "entered storedProcedureLanguageOption()" );
+    spLanguageOption = null;
 }
-    :
-    ID_language ( SP )+ languageToken:UTF8String
+    : ID_language ( SP )+ languageToken:UTF8String
+    { spLanguageOption = new StoredProcedureLanguageOption( languageToken.getText() ); }
     ;
 
-storedProcedureSearchContextOption
+storedProcedureSearchContextOption returns [ StoredProcedureSearchContextOption spSearchContextOption ]
 {
     log.debug( "entered storedProcedureSearchContextOption()" );
+    spSearchContextOption = null;
+    SearchScope searchScope = SearchScope.BASE; // default scope
+    Name spSearchContext = null;
 }
     :
     ID_searchContext ( SP )+
         ( OPEN_CURLY ( SP )*
-            ( ID_search_scope ( SP )+ storedProcedureSearchScope ( SP )* )?
+            ( ID_search_scope ( SP )+ searchScope=storedProcedureSearchScope ( SP )* )?
         CLOSE_CURLY ( SP )+ )?
-    storedProcedureSearchContext
+    spSearchContext=storedProcedureSearchContext
+    { spSearchContextOption = new StoredProcedureSearchContextOption( spSearchContext, searchScope ); }
     ;
 
-storedProcedureSearchScope
+storedProcedureSearchScope returns [ SearchScope scope ]
 {
     log.debug( "entered storedProcedureSearchScope()" );
+    scope = null;
 }
-    : ID_scope_base
-    | ID_scope_one
-    | ID_scope_subtree
+    : ID_scope_base { scope = SearchScope.BASE; }
+    | ID_scope_one { scope = SearchScope.ONE; }
+    | ID_scope_subtree { scope = SearchScope.SUBTREE; }
     ;
 
-storedProcedureSearchContext
+storedProcedureSearchContext returns [ Name spSearchContext ]
 {
     log.debug( "entered storedProcedureSearchContext()" );
+    spSearchContext = null;
 }
-    : distinguishedName
+    : spSearchContext=distinguishedName
     ;
 
 // -----------------------------------------------------------------------------
 
-fullyQualifiedStoredProcedureName
+fullyQualifiedStoredProcedureName returns [ String spName ] 
 {
     log.debug( "entered fullyQualifiedStoredProcedureName()" );
+    spName = null;
 }
-    :
-    spNameToken:UTF8String
+    : spNameToken:UTF8String
+    { spName = spNameToken.getText(); }
     ;
 
 distinguishedName returns [ Name name ] 
@@ -569,8 +600,7 @@
     log.debug( "entered distinguishedName()" );
     name = null;
 }
-    :
-    nameToken:UTF8String
+    : nameToken:UTF8String
     {
         name = dnParser.parse( nameToken.getText() );
     }

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/ActionTime.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/ActionTime.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/ActionTime.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/ActionTime.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,59 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+/**
+ * An enumeration that represents action times
+ * for an LDAP trigger specification.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class ActionTime
+{
+    public static final ActionTime BEFORE = new ActionTime( "BEFORE" );
+
+    public static final ActionTime AFTER = new ActionTime( "AFTER" );
+
+    public static final ActionTime INSTEADOF = new ActionTime( "INSTEADOF" );
+
+    
+    private final String name;
+
+
+    private ActionTime( String name )
+    {
+        this.name = name;
+    }
+
+
+    /**
+     * Returns the name of this action time.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+
+    public String toString()
+    {
+        return name;
+    }
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/LdapOperation.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/LdapOperation.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/LdapOperation.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/LdapOperation.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,72 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+/**
+ * An enumeration that represents all standard LDAP operations.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class LdapOperation
+{
+    public static final LdapOperation BIND = new LdapOperation( "bind" );
+
+    public static final LdapOperation UNBIND = new LdapOperation( "unbind" );
+
+    public static final LdapOperation SEARCH = new LdapOperation( "search" );
+
+    public static final LdapOperation MODIFY = new LdapOperation( "modify" );
+
+    public static final LdapOperation ADD = new LdapOperation( "add" );
+
+    public static final LdapOperation DEL = new LdapOperation( "del" );
+
+    public static final LdapOperation MODDN = new LdapOperation( "moddn" );
+
+    public static final LdapOperation COMPARE = new LdapOperation( "compare" );
+    
+    public static final LdapOperation ABANDON = new LdapOperation( "abandon" );
+    
+    public static final LdapOperation EXTENDED = new LdapOperation( "extended" );
+
+    
+    private final String name;
+
+
+    private LdapOperation( String name )
+    {
+        this.name = name;
+    }
+
+
+    /**
+     * Returns the name of this LDAP operation.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+
+    public String toString()
+    {
+        return name;
+    }
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/SearchScope.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/SearchScope.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/SearchScope.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/SearchScope.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,53 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+/**
+ * An enumeration that represents LDAP search scopes.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class SearchScope
+{
+    public static final SearchScope BASE = new SearchScope( "base" );
+
+    public static final SearchScope ONE = new SearchScope( "one" );
+
+    public static final SearchScope SUBTREE = new SearchScope( "subtree" );
+
+    
+    private final String name;
+
+
+    private SearchScope( String name )
+    {
+        this.name = name;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public String toString()
+    {
+        return name;
+    }
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureLanguageOption.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureLanguageOption.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureLanguageOption.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureLanguageOption.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,66 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+/**
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class StoredProcedureLanguageOption implements StoredProcedureOption
+{
+    
+    private String language;
+    
+    public StoredProcedureLanguageOption( String language )
+    {
+        this.language = language;
+    }
+    
+    public String getLanguage()
+    {
+        return language;
+    }
+
+    public boolean equals( Object obj )
+    {
+        if ( obj == this )
+        {
+            return true;
+        }
+        
+        if ( obj instanceof StoredProcedureLanguageOption )
+        {
+            StoredProcedureLanguageOption splo = ( StoredProcedureLanguageOption ) obj; 
+            if ( splo.getLanguage().equals( this.getLanguage() ) )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureOption.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureOption.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureOption.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureOption.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,31 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+
+/**
+ * Just a marker interface for Stored Procedure Options.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public interface StoredProcedureOption
+{
+
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureParameter.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureParameter.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureParameter.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureParameter.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,220 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+
+/**
+ * An entity that represents a stored procedure parameter which can be
+ * specified in an LDAP Trigger Specification.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class StoredProcedureParameter
+{
+
+    public static final StoredProcedureParameter OPERATION_TIME = new StoredProcedureParameter( "operationTime" );
+    public static final StoredProcedureParameter OPERATION_PRINCIPAL = new StoredProcedureParameter(
+        "operationPrincipal" );
+
+    private final String name;
+
+
+    protected StoredProcedureParameter( String name )
+    {
+        this.name = name;
+    }
+
+
+    /**
+     * Returns the name of this Stored Procedure Parameter.
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+
+    public String toString()
+    {
+        return name;
+    }
+    
+    // Operation Specific Subclasses
+
+    public static class BindStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final BindStoredProcedureParameter VERSION = new BindStoredProcedureParameter( "$version" );
+        public static final BindStoredProcedureParameter NAME = new BindStoredProcedureParameter( "$name" );
+        public static final BindStoredProcedureParameter AUTHENTICATION = new BindStoredProcedureParameter(
+            "$authentication" );
+
+
+        private BindStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class UnbindStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        private UnbindStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class SearchStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final SearchStoredProcedureParameter BASE_OBJECT = new SearchStoredProcedureParameter(
+            "$baseObject" );
+        public static final SearchStoredProcedureParameter SCOPE = new SearchStoredProcedureParameter( "$scope" );
+        public static final SearchStoredProcedureParameter DEREF_ALIASES = new SearchStoredProcedureParameter(
+            "$derefAliases" );
+        public static final SearchStoredProcedureParameter SIZE_LIMIT = new SearchStoredProcedureParameter(
+            "$sizeLimit" );
+        public static final SearchStoredProcedureParameter TIME_LIMIT = new SearchStoredProcedureParameter(
+            "$timeLimit" );
+        public static final SearchStoredProcedureParameter TYPES_ONLY = new SearchStoredProcedureParameter(
+            "$typesOnly" );
+        public static final SearchStoredProcedureParameter FILTER = new SearchStoredProcedureParameter( "$filter" );
+        public static final SearchStoredProcedureParameter ATTRIBUTES = new SearchStoredProcedureParameter(
+            "$attributes" );
+
+
+        private SearchStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class ModifyStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final ModifyStoredProcedureParameter OBJECT = new ModifyStoredProcedureParameter( "$object" );
+        public static final ModifyStoredProcedureParameter MODIFICATION = new ModifyStoredProcedureParameter(
+            "$modification" );
+        public static final ModifyStoredProcedureParameter OLD_ENTRY = new ModifyStoredProcedureParameter( "$oldEntry" );
+        public static final ModifyStoredProcedureParameter NEW_ENTRY = new ModifyStoredProcedureParameter( "$newEntry" );
+
+
+        private ModifyStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class AddStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final DelStoredProcedureParameter ENTRY = new DelStoredProcedureParameter( "$entry" );
+        public static final DelStoredProcedureParameter ATTRIBUTES = new DelStoredProcedureParameter( "$attributes" );
+
+
+        private AddStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class DelStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final AddStoredProcedureParameter NAME = new AddStoredProcedureParameter( "$name" );
+        public static final AddStoredProcedureParameter DELETED_ENTRY = new AddStoredProcedureParameter(
+            "$deletedEntry" );
+
+
+        private DelStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class ModDNStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final ModDNStoredProcedureParameter ENTRY = new ModDNStoredProcedureParameter( "$entry" );
+        public static final ModDNStoredProcedureParameter NEW_RDN = new ModDNStoredProcedureParameter( "$newrdn" );
+        public static final ModDNStoredProcedureParameter DELETE_OLD_RDN = new ModDNStoredProcedureParameter(
+            "$deleteoldrdn" );
+        public static final ModDNStoredProcedureParameter NEW_SUPERIOR = new ModDNStoredProcedureParameter(
+            "$newSuperior" );
+
+
+        private ModDNStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class CompareStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final CompareStoredProcedureParameter ENTRY = new CompareStoredProcedureParameter( "$entry" );
+        public static final CompareStoredProcedureParameter AVA = new CompareStoredProcedureParameter( "$ava" );
+
+
+        private CompareStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+    
+    public static class AbandonStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final AbandonStoredProcedureParameter MESSAGE_ID = new  AbandonStoredProcedureParameter( "$messageId"
+     );
+
+
+        private AbandonStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+    public static class ExtendedStoredProcedureParameter extends StoredProcedureParameter
+    {
+
+        public static final ExtendedStoredProcedureParameter REQUEST_NAME = new ExtendedStoredProcedureParameter(
+            "$requestName" );
+        public static final ExtendedStoredProcedureParameter REQUEST_VALUE = new ExtendedStoredProcedureParameter(
+            "$requestValue" );
+
+
+        private ExtendedStoredProcedureParameter( String name )
+        {
+            super( name );
+        }
+
+    }
+
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureSearchContextOption.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureSearchContextOption.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureSearchContextOption.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/StoredProcedureSearchContextOption.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,87 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+import javax.naming.Name;
+
+
+/**
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class StoredProcedureSearchContextOption implements StoredProcedureOption
+{
+    
+    private final Name baseObject;
+    private SearchScope searchScope;
+
+    
+    public StoredProcedureSearchContextOption( Name baseObject )
+    {
+        // the default search scope is "base"
+        this( baseObject, SearchScope.BASE );
+    }
+    
+    public StoredProcedureSearchContextOption( Name baseObject, SearchScope searchScope )
+    {
+        this.baseObject = baseObject;
+        this.searchScope = searchScope;
+    }
+
+    public Name getBaseObject()
+    {
+        return baseObject;
+    }
+    
+    public SearchScope getSearchScope()
+    {
+        return searchScope;
+    }
+
+    public String toString()
+    {
+        return baseObject.toString();
+    }
+
+    public boolean equals( Object obj )
+    {
+        if ( obj == this )
+        {
+            return true;
+        }
+        
+        if ( obj instanceof StoredProcedureSearchContextOption )
+        {
+            StoredProcedureSearchContextOption stsco = ( StoredProcedureSearchContextOption ) obj;
+            if ( stsco.getBaseObject().equals( this.getBaseObject() ) && stsco.getSearchScope().equals( this.getSearchScope() ) )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        else
+        {
+            return false;
+        }
+    }
+    
+}

Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecification.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecification.java?rev=398243&view=auto
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecification.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecification.java Sat Apr 29 14:48:34 2006
@@ -0,0 +1,76 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed 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.shared.ldap.trigger;
+
+import java.util.List;
+
+/**
+ * The Trigger Specification Bean.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
+ */
+public class TriggerSpecification
+{
+    
+    private LdapOperation ldapOperation;
+    
+    private ActionTime actionTime;
+    
+    private String storedProcedureName;
+    
+    private List storedProcedureOptions;
+    
+    private List storedProcedureParameters;
+    
+    public TriggerSpecification( LdapOperation ldapOperation, ActionTime actionTime, String storedProcedureName, List storedProcedureOptions, List storedProcedureParameters )
+    {
+        super();
+        this.ldapOperation = ldapOperation;
+        this.actionTime = actionTime;
+        this.storedProcedureName = storedProcedureName;
+        this.storedProcedureOptions = storedProcedureOptions;
+        this.storedProcedureParameters = storedProcedureParameters;
+    }
+
+    public ActionTime getActionTime()
+    {
+        return actionTime;
+    }
+
+    public LdapOperation getLdapOperation()
+    {
+        return ldapOperation;
+    }
+
+    public String getStoredProcedureName()
+    {
+        return storedProcedureName;
+    }
+
+    public List getStoredProcedureOptions()
+    {
+        return storedProcedureOptions;
+    }
+
+    public List getStoredProcedureParameters()
+    {
+        return storedProcedureParameters;
+    }
+    
+}

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParser.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParser.java?rev=398243&r1=398242&r2=398243&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParser.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParser.java Sat Apr 29 14:48:34 2006
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2005 The Apache Software Foundation
+ *   Copyright 2006 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -28,12 +28,12 @@
 
 
 /**
- * A reusable wrapper around the antlr generated parser for an ACIItem as
- * defined by X.501. This class enables the reuse of the antlr parser/lexer pair
- * without having to recreate them every time.
+ * A reusable wrapper around the ANTLR generated parser for a
+ * TriggerSpecification. This class enables the reuse of the antlr parser/lexer
+ * pair without having to recreate them every time.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev: 379008 $
+ * @version $Rev:$, $Date:$
  */
 public class TriggerSpecificationParser
 {
@@ -47,7 +47,7 @@
 
 
     /**
-     * Creates a ACIItem parser.
+     * Creates a TriggerSpecification parser.
      */
     public TriggerSpecificationParser()
     {
@@ -61,7 +61,7 @@
 
 
     /**
-     * Creates a normalizing ACIItem parser.
+     * Creates a normalizing TriggerSpecification parser.
      */
     public TriggerSpecificationParser(NameComponentNormalizer normalizer)
     {
@@ -70,14 +70,17 @@
 
         this.parser.setNormalizer( normalizer );
         this.parser.init(); // this method MUST be called while we cannot do
-        // constructor overloading for antlr generated parser
+        // constructor overloading for ANTLR generated parser
         this.isNormalizing = true;
     }
 
 
     /**
      * Initializes the plumbing by creating a pipe and coupling the parser/lexer
-     * pair with it. param spec the specification to be parsed
+     * pair with it.
+     * 
+     * @param
+     *          spec the specification to be parsed
      */
     private synchronized void reset( String spec )
     {
@@ -88,42 +91,43 @@
 
 
     /**
-     * Parses an ACIItem without exhausting the parser.
+     * Parses an TriggerSpecification without exhausting the parser.
      * 
      * @param spec
-     *            the specification to be parsed
+     *          the specification to be parsed
      * @return the specification bean
      * @throws ParseException
-     *             if there are any recognition errors (bad syntax)
+     *          if there are any recognition errors (bad syntax)
      */
-    public synchronized void parse( String spec ) throws ParseException
+    public synchronized TriggerSpecification parse( String spec ) throws ParseException
     {
+        TriggerSpecification triggerSpecification = null;
 
         if ( spec == null || spec.trim().equals( "" ) )
         {
-            return;
+            return null;
         }
 
         reset( spec ); // reset and initialize the parser / lexer pair
 
         try
         {
-            this.parser.wrapperEntryPoint();
+            triggerSpecification = this.parser.wrapperEntryPoint();
         }
         catch ( TokenStreamException e )
         {
-            String msg = "TokenStreamException: Parser failure on ACIItem:\n\t" + spec;
-            msg += "\nAntlr exception trace:\n";
-            e.printStackTrace();
+            String msg = "Parser failure on Trigger Specification:\n\t" + spec;
+            msg += "\nAntlr exception trace:\n" + e.getMessage();
             throw new ParseException( msg, 0 );
         }
         catch ( RecognitionException e )
         {
-            String msg = "RecognitionException: Parser failure on ACIItem:\n\t" + spec;
-            msg += "\nAntlr exception trace:\n";
-            e.printStackTrace();
+            String msg = "Parser failure on Trigger Specification:\n\t" + spec;
+            msg += "\nAntlr exception trace:\n" + e.getMessage();
             throw new ParseException( msg, e.getColumn() );
         }
+        
+        return triggerSpecification;
 
     }
 

Modified: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParserTest.java
URL: http://svn.apache.org/viewcvs/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParserTest.java?rev=398243&r1=398242&r2=398243&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParserTest.java (original)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/trigger/TriggerSpecificationParserTest.java Sat Apr 29 14:48:34 2006
@@ -18,6 +18,8 @@
 package org.apache.directory.shared.ldap.trigger;
 
 
+import org.apache.directory.shared.ldap.name.LdapName;
+
 import junit.framework.TestCase;
 
 
@@ -25,6 +27,7 @@
  * Unit tests for {@link org.apache.directory.shared.ldap.trigger.TriggerSpecificationParser}.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev:$, $Date:$
  */
 public class TriggerSpecificationParserTest extends TestCase
 {
@@ -54,34 +57,76 @@
 
     public void testWithOperationParameters() throws Exception
     {
+        TriggerSpecification triggerSpecification = null;
+        
         String spec = "BEFORE delete CALL \"BackupUtilities.backupDeletedEntry\" ($name, $deletedEntry)";
 
-        parser.parse( spec );
+        triggerSpecification = parser.parse( spec );
+        
+        assertNotNull( triggerSpecification );
     }
     
     public void testWithGenericParameters() throws Exception
     {
+        TriggerSpecification triggerSpecification = null;
+        
         String spec = "AFTER add CALL \"Logger.logAddOperation\" ($entry, $attributes, $operationPrincipal)";
 
-        parser.parse( spec );
+        triggerSpecification = parser.parse( spec );
+        
+        assertNotNull( triggerSpecification );
+        assertEquals( triggerSpecification.getActionTime(), ActionTime.AFTER );
+        assertEquals( triggerSpecification.getStoredProcedureName(), "Logger.logAddOperation" );
+        assertEquals( triggerSpecification.getLdapOperation(), LdapOperation.ADD );
+        assertTrue( triggerSpecification.getStoredProcedureOptions().size() == 0 );
+        assertTrue( triggerSpecification.getStoredProcedureParameters().size() == 3 );
+        assertTrue( triggerSpecification.getStoredProcedureParameters().contains(
+            StoredProcedureParameter.AddStoredProcedureParameter.ENTRY ) );
+        assertTrue( triggerSpecification.getStoredProcedureParameters().contains(
+            StoredProcedureParameter.AddStoredProcedureParameter.ATTRIBUTES ) );
+        assertTrue( triggerSpecification.getStoredProcedureParameters().contains(
+            StoredProcedureParameter.OPERATION_PRINCIPAL ) );
     }
     
     public void testWithLanguageOptionAndComments() throws Exception
     {
+        TriggerSpecification triggerSpecification = null;
+        
         String spec = "INSTEADOF search # do not do search \n" +
             "CALL \"RestrictionUtilities.searchNoWay\"{language \"Java\"}() # but run a procedure";
 
-        parser.parse( spec );
+        triggerSpecification = parser.parse( spec );
+        
+        assertNotNull( triggerSpecification );
+        assertEquals( triggerSpecification.getActionTime(), ActionTime.INSTEADOF );
+        assertEquals( triggerSpecification.getStoredProcedureName(), "RestrictionUtilities.searchNoWay" );
+        assertEquals( triggerSpecification.getLdapOperation(), LdapOperation.SEARCH );
+        assertEquals( triggerSpecification.getStoredProcedureOptions().size(), 1 );
+        assertTrue( triggerSpecification.getStoredProcedureOptions().contains( new StoredProcedureLanguageOption( "Java" ) ) );
+        assertEquals( triggerSpecification.getStoredProcedureParameters().size(),  0 );
     }
     
     public void testWithSearchContextOption() throws Exception
     {
+        TriggerSpecification triggerSpecification = null;
+        
         String spec = "BEFORE bind  # Action Time and Operation \n" +
             "CALL \"AuthUtilities.beforeBind\"  # Stored Procedure Call \n" +
             "{ searchContext { scope one } \"cn=Auth,cn=System Stored Procedures,ou=system\" }  # Stored Procedure Call Options \n" +
             "($name)  # Stored Procedure Parameter(s)";
 
-        parser.parse( spec );
+        triggerSpecification = parser.parse( spec );
+        
+        assertNotNull( triggerSpecification );
+        assertEquals( triggerSpecification.getActionTime(), ActionTime.BEFORE );
+        assertEquals( triggerSpecification.getStoredProcedureName(), "AuthUtilities.beforeBind" );
+        assertEquals( triggerSpecification.getLdapOperation(), LdapOperation.BIND );
+        assertEquals( triggerSpecification.getStoredProcedureOptions().size(), 1 );
+        assertTrue( triggerSpecification.getStoredProcedureOptions().contains(
+            new StoredProcedureSearchContextOption( new LdapName( "cn=Auth,cn=System Stored Procedures,ou=system" ), SearchScope.ONE  ) ) );
+        assertEquals( triggerSpecification.getStoredProcedureParameters().size(),  1 );
+        assertTrue( triggerSpecification.getStoredProcedureParameters().contains(
+            StoredProcedureParameter.BindStoredProcedureParameter.NAME ) );
     }
     
 }