You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/06/11 18:13:49 UTC

svn commit: rev 21103 - in incubator/directory/snickers/trunk/ldap-ber-provider/src: java/org/apache/snickers/ldap java/org/apache/snickers/ldap/search test/org/apache/snickers/ldap/search

Author: akarasulu
Date: Fri Jun 11 09:13:48 2004
New Revision: 21103

Added:
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesRule.java   (contents, props changed)
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesStateChangeRule.java   (contents, props changed)
Modified:
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java
   incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/search/SearchRequestTest.java
Log:
Commit changes ...

 o more search request handling
 o added two new rules to process attributes to return in searches
   - RequestedAttributesRule adds attributes only no state changes
   - when all attributes have been added the RequestedAttributesStateChangeRule
     changes the state from ATTRIBUTES_STATE to CONTROLS_STATE
 o finished off test case to test adding attributes to SearchRequest object

To do ...

 o finish filter rules
 


Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java	Fri Jun 11 09:13:48 2004
@@ -121,12 +121,12 @@
 
     private void adddeletes( BERDigester digester )
     {
-        int[] pattern = new int[2] ;
+        int[] pattern = new int[2];
 
         // set pattern and addRule for the SearchRequest
-        pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag() ;
-        pattern[1] = LdapTag.SEARCH_REQUEST.getPrimitiveTag() ;
-        digester.addRule( pattern, new SearchRequestRule() ) ;
+        pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag();
+        pattern[1] = LdapTag.SEARCH_REQUEST.getPrimitiveTag();
+        digester.addRule( pattern, new SearchRequestRule() );
 
         // setup pattern to set the dn of the entry added
         pattern = new int[3];
@@ -145,6 +145,16 @@
 
         pattern[2] = UniversalTag.BOOLEAN.getPrimitiveTag();
         digester.addRule( pattern, new TypesOnlyRule() );
+
+        pattern[2] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag();
+        digester.addRule( pattern, new RequestedAttributesStateChangeRule() );
+
+        pattern = new int[4] ;
+        pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag() ;
+        pattern[1] = LdapTag.SEARCH_REQUEST.getPrimitiveTag();
+        pattern[2] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag();
+        pattern[3] = UniversalTag.OCTET_STRING.getPrimitiveTag();
+        digester.addRule( pattern, new RequestedAttributesRule() );
     }
 
 

Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesRule.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesRule.java	Fri Jun 11 09:13:48 2004
@@ -0,0 +1,80 @@
+/*
+ *   Copyright 2004 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.snickers.ldap.search;
+
+
+import java.nio.ByteBuffer;
+
+import org.apache.snickers.ber.digester.rules.PrimitiveOctetStringRule;
+import org.apache.snickers.ber.primitives.UniversalTag;
+import org.apache.ldap.common.message.SearchRequestImpl;
+
+
+/**
+ * Document this class.
+ * 
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ *         Project</a>
+ * @version $Rev$
+ */
+public class RequestedAttributesRule extends PrimitiveOctetStringRule
+{
+    public RequestedAttributesRule()
+    {
+        super( UniversalTag.OCTET_STRING ) ;
+    }
+
+
+    /**
+     * Allows the super method to push a ByteBuffer onto the top of the stack
+     * which contains the drained contents of the superclass' ByteAccumulator.
+     * This ByteBuffer is popped first then used to populate the credentials.
+     * There is no need to copy this buffer since it will not be used again
+     * by the ByteAccumulator of the superclass so we should be able to use
+     * the byte[] based backing store if one is present.  However it might
+     * have to be copied even then.  Situations requiring a copy are when the
+     * buffer has a limit less than the capacity or when there is no
+     * accessible array to the buffer.
+     *
+     * @see org.apache.snickers.ber.digester.Rule#finish()
+     */
+    public void finish()
+    {
+        // pushes a ByteBuffer onto the stack
+        super.finish() ;
+
+        // pop the ByteBuffer the super method pushed
+        ByteBuffer buf = ( ByteBuffer ) getDigester().pop() ;
+        // peek at SearchRequest underneath processing obj whose octets we set
+        SearchRequestImpl req = ( SearchRequestImpl ) getDigester().peek( 1 );
+
+        byte[] octets = null ;
+        if ( buf.limit() == buf.capacity() && buf.hasArray() )
+        {
+            // use the backing store
+            octets = buf.array() ;
+        }
+        else
+        {
+            // copy because we don't have accessible array or data < array
+            octets = new byte[buf.remaining()];
+            buf.get( octets );
+        }
+
+        req.addAttribute( new String( octets ) );
+    }
+}

Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesStateChangeRule.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/search/RequestedAttributesStateChangeRule.java	Fri Jun 11 09:13:48 2004
@@ -0,0 +1,47 @@
+/*
+ *   Copyright 2004 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.snickers.ldap.search;
+
+
+import org.apache.snickers.ber.TypeClass;
+
+
+/**
+ * Document this class.
+ * 
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ *         Project</a>
+ * @version $Rev$
+ */
+public class RequestedAttributesStateChangeRule extends BaseSearchRequestRule
+{
+    public RequestedAttributesStateChangeRule()
+    {
+        super( 3 );
+    }
+
+
+    public void tag( int id, boolean isPrimitive, TypeClass typeClass )
+    {
+        super.tag( id, isPrimitive, typeClass );
+
+        if ( getProcessing().getState() != getProcessing().ATTRIBUTES_STATE )
+        {
+            setEnabled( false );
+        }
+    }
+}

Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/search/SearchRequestTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/search/SearchRequestTest.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/search/SearchRequestTest.java	Fri Jun 11 09:13:48 2004
@@ -14,22 +14,18 @@
  *   limitations under the License.
  *
  */
-package org.apache.snickers.ldap.search ;
+package org.apache.snickers.ldap.search;
 
 
-import java.util.HashSet ;
-import java.util.Iterator ;
-import java.util.Collection ;
-import javax.naming.directory.Attribute ;
-import javax.naming.directory.DirContext ;
-import javax.naming.directory.ModificationItem ;
+import java.util.Collection;
+import java.util.Iterator;
 
-import org.apache.ldap.common.message.* ;
+import org.apache.ldap.common.message.*;
 import org.apache.ldap.common.filter.ExprNode;
 import org.apache.ldap.common.filter.FilterParserImpl;
 
-import org.apache.snickers.ldap.testutils.TestUtils ;
-import org.apache.snickers.ldap.testutils.RuleTestCase ;
+import org.apache.snickers.ldap.testutils.TestUtils;
+import org.apache.snickers.ldap.testutils.RuleTestCase;
 
 
 /**
@@ -46,44 +42,50 @@
      */
     public void testSearchRequest() throws Exception
     {
-        SearchRequestImpl req = new SearchRequestImpl( 33 ) ;
-        req.setBase( "dc=example,dc=com" ) ;
-        req.setDerefAliases( DerefAliasesEnum.DEREFINSEARCHING ) ;
-        req.setScope( ScopeEnum.SINGLELEVEL ) ;
-        req.setSizeLimit( 2 ) ;
-        req.setTimeLimit( 3 ) ;
-        req.setTypesOnly( true ) ;
-
-        //req.addAttribute( "attr0" ) ;
-        //req.addAttribute( "attr1" ) ;
-        //req.addAttribute( "attr2" ) ;
+        SearchRequestImpl req = new SearchRequestImpl( 33 );
+        req.setBase( "dc=example,dc=com" );
+        req.setDerefAliases( DerefAliasesEnum.DEREFFINDINGBASEOBJ );
+        req.setScope( ScopeEnum.BASEOBJECT );
+        req.setSizeLimit( 2 );
+        req.setTimeLimit( 3 );
+        req.setTypesOnly( true );
+
+        req.addAttribute( "attr0" );
+        req.addAttribute( "attr1" );
+        req.addAttribute( "attr2" );
 
 
-        FilterParserImpl parser = new FilterParserImpl() ;
+        FilterParserImpl parser = new FilterParserImpl();
         ExprNode node = null ;
         node = parser.parse(
-                  "(ou=Human Resources)" ) ;
-                //"( & ( ou = Human Resources ) ( l = SunnyVale ) "
-                //+ " ( | ( uid = akarasulu ) ( ! ( uid = jbean ) ) ) )" ) ;
-        req.setFilter( node ) ;
+                "( & ( ou = Human Resources ) ( l = SunnyVale ) "
+                + " ( | ( uid = akarasulu ) ( ! ( uid = jbean ) ) ) )" );
+        req.setFilter( node );
 
-        System.out.println( "Generated SearchRequest for test:" ) ;
-        System.out.println( TestUtils.printTupleTree( req ) ) ;
+        System.out.println( "Generated SearchRequest for test:" );
+        System.out.println( TestUtils.printTupleTree( req ) );
 
         SearchRequest decoded = ( SearchRequest )
-                snickersDecode( snaccEncode( req ) ) ;
-        assertNotNull( decoded ) ;
-        assertEquals( req.getBase(), decoded.getBase() ) ;
-        assertEquals( req.getScope(), decoded.getScope() ) ;
-        assertEquals( req.getDerefAliases(), decoded.getDerefAliases() ) ;
-        assertEquals( req.getSizeLimit(), decoded.getSizeLimit() ) ;
-        assertEquals( req.getTimeLimit(), decoded.getTimeLimit() ) ;
-        assertEquals( req.getTypesOnly(), decoded.getTypesOnly() ) ;
+                snickersDecode( snaccEncode( req ) );
+        assertNotNull( decoded );
 
-        /*
+        // test that we have all the properties set
+        assertEquals( req.getBase(), decoded.getBase() );
+        assertEquals( req.getScope(), decoded.getScope() );
+        assertEquals( req.getTypesOnly(), decoded.getTypesOnly() );
+        assertEquals( req.getTimeLimit(), decoded.getTimeLimit() );
+        assertEquals( req.getSizeLimit(), decoded.getSizeLimit() );
+        assertEquals( req.getDerefAliases(), decoded.getDerefAliases() );
+
+        // test that we have all the attributes
+        Iterator list = req.getAttributes().iterator();
+        Collection attributes = decoded.getAttributes();
+        while( list.hasNext() )
+        {
+            assertTrue( attributes.contains( list.next() ) );
+        }
 
-        NOT COMPLETE YET!
-
-        */
+        // control test should fail
+        assertFalse( attributes.contains( "(*&#$&#$*@#" ) );
     }
 }