You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/08/21 18:54:00 UTC
svn commit: r234264 [11/11] - in
/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src:
./ java/ java/main/ java/main/org/ java/main/org/apache/
java/main/org/apache/asn1new/ java/main/org/apache/asn1new/ldap/
java/main/org/apache/...
Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/PresentFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/PresentFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/PresentFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/PresentFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2005 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.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapString;
+
+
+/**
+ * Object to store the filter. A filter is seen as a tree with a root.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class PresentFilter extends Filter
+{
+ //~ Instance fields ----------------------------------------------------------------------------
+
+ /** The attribute description. */
+ private LdapString attributeDescription;
+
+ //~ Constructors -------------------------------------------------------------------------------
+
+ /**
+ * The constructor.
+ */
+ public PresentFilter()
+ {
+ }
+
+ //~ Methods ------------------------------------------------------------------------------------
+
+ /**
+ * Get the attribute
+ *
+ * @return Returns the attributeDescription.
+ */
+ public LdapString getAttributeDescription()
+ {
+ return attributeDescription;
+ }
+
+ /**
+ * Set the attributeDescription
+ *
+ * @param attributeDescription The attributeDescription to set.
+ */
+ public void setAttributeDescription( LdapString attributeDescription )
+ {
+ this.attributeDescription = attributeDescription;
+ }
+
+ /**
+ * Compute the PresentFilter length
+ *
+ * PresentFilter :
+ *
+ * 0x87 L1 present
+ *
+ * Length(PresentFilter) = Length(0x87) + Length(super.computeLength()) + super.computeLength()
+ *
+ */
+ public int computeLength()
+ {
+ return 1 + Length.getNbBytes( attributeDescription.getLength() ) + attributeDescription.getLength();
+ }
+
+ /**
+ * Encode the PresentFilter message to a PDU.
+ *
+ * PresentFilter :
+ *
+ * 0x87 LL attributeDescription
+ *
+ * @param buffer The buffer where to put the PDU
+ * @return The PDU.
+ */
+ public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+ {
+ if (buffer == null)
+ {
+ throw new EncoderException("Cannot put a PDU in a null buffer !");
+ }
+
+ try
+ {
+ // The PresentFilter Tag
+ buffer.put( (byte)LdapConstants.PRESENT_FILTER_TAG );
+ buffer.put( Length.getBytes( attributeDescription.getLength() ) );
+ buffer.put( attributeDescription.getData() );
+ }
+ catch ( BufferOverflowException boe )
+ {
+ throw new EncoderException("The PDU buffer size is too small !");
+ }
+
+ super.encode( buffer );
+
+ return buffer;
+ }
+
+ /**
+ * Return a string compliant with RFC 2254 representing a Present filter
+ *
+ * @return The Present filter string
+ */
+ public String toString()
+ {
+
+ StringBuffer sb = new StringBuffer();
+
+ sb.append( attributeDescription.toString() ).append( "=*" );
+
+ return sb.toString();
+ }
+}
Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/SubstringFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/SubstringFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/SubstringFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/SubstringFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2005 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.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.UniversalTag;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapString;
+
+
+/**
+ * A Object that stores the substring filter. A substring filter follow this grammar :
+ * substring = attr "=" ([initial] any [final] |
+ * (initial [any] [final) |
+ * ([initial] [any] final)
+ * initial = value
+ * any = "*" *(value "*")
+ * final = value
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SubstringFilter extends Filter
+{
+ //~ Instance fields ----------------------------------------------------------------------------
+
+ /** The substring filter type (an attributeDescription) */
+ private LdapString type;
+
+ /** This member is used to control the length of the three parts of the substring filter **/
+ private transient int substringsLength;
+
+ /** The initial filter */
+ private LdapString initialSubstrings;
+
+ /** The any filter. It's a list of LdapString */
+ private ArrayList anySubstrings;
+
+ /** The final filter */
+ private LdapString finalSubstrings;
+
+ private transient int substringsFilterLength;
+
+ private transient int substringsFilterSequenceLength;
+
+ //~ Methods ------------------------------------------------------------------------------------
+
+ /**
+ * The constructor. We will create the 'any' subsring arraylist with only one element.
+ */
+ public SubstringFilter()
+ {
+ anySubstrings = new ArrayList(1);
+ }
+
+ /**
+ * Get the internal substrings
+ *
+ * @return Returns the anySubstrings.
+ */
+ public ArrayList getAnySubstrings()
+ {
+ return anySubstrings;
+ }
+
+ /**
+ * Add a internal substring
+ *
+ * @param anySubstrings The anySubstrings to set.
+ */
+ public void addAnySubstrings( LdapString anySubstrings )
+ {
+ this.anySubstrings.add(anySubstrings);
+ }
+
+ /**
+ * Get the final substring
+ *
+ * @return Returns the finalSubstrings.
+ */
+ public LdapString getFinalSubstrings()
+ {
+ return finalSubstrings;
+ }
+
+ /**
+ * Set the final substring
+ *
+ * @param finalSubstrings The finalSubstrings to set.
+ */
+ public void setFinalSubstrings( LdapString finalSubstrings )
+ {
+ this.finalSubstrings = finalSubstrings;
+ }
+
+ /**
+ * Get the initial substring
+ *
+ * @return Returns the initialSubstrings.
+ */
+ public LdapString getInitialSubstrings()
+ {
+ return initialSubstrings;
+ }
+
+ /**
+ * Set the initial substring
+ *
+ * @param initialSubstrings The initialSubstrings to set.
+ */
+ public void setInitialSubstrings( LdapString initialSubstrings )
+ {
+ this.initialSubstrings = initialSubstrings;
+ }
+
+ /**
+ * Get the attribute
+ *
+ * @return Returns the type.
+ */
+ public LdapString getType()
+ {
+ return type;
+ }
+
+ /**
+ * Set the attribute to match
+ *
+ * @param type The type to set.
+ */
+ public void setType( LdapString type )
+ {
+ this.type = type;
+ }
+
+ /**
+ * @return Returns the substringsLength.
+ */
+ public int getSubstringsLength()
+ {
+ return substringsLength;
+ }
+
+ /**
+ * @param substringsLength The substringsLength to set.
+ */
+ public void setSubstringsLength(int substringsLength)
+ {
+ this.substringsLength = substringsLength;
+ }
+
+ /**
+ * Compute the SubstringFilter length
+ *
+ * SubstringFilter :
+ *
+ * 0xA4 L1
+ * |
+ * +--> 0x04 L2 type
+ * +--> 0x30 L3
+ * |
+ * [+--> 0x80 L4 initial]
+ * [+--> 0x81 L5-1 any]
+ * [+--> 0x81 L5-2 any]
+ * [+--> ...
+ * [+--> 0x81 L5-i any]
+ * [+--> ...
+ * [+--> 0x81 L5-n any]
+ * [+--> 0x82 L6 final]
+ *
+ */
+ public int computeLength()
+ {
+ // The type
+ substringsFilterLength = 1 + Length.getNbBytes( type.getLength() ) + type.getLength();
+ substringsFilterSequenceLength = 0;
+
+ if ( initialSubstrings != null )
+ {
+ substringsFilterSequenceLength += 1 + Length.getNbBytes( initialSubstrings.getLength() ) + initialSubstrings.getLength();
+ }
+
+ if ( anySubstrings != null)
+ {
+ Iterator anyIterator = anySubstrings.iterator();
+
+ while ( anyIterator.hasNext() )
+ {
+ LdapString any = (LdapString)anyIterator.next();
+ substringsFilterSequenceLength += 1 + Length.getNbBytes( any.getLength() ) + any.getLength();
+ }
+ }
+
+ if ( finalSubstrings != null )
+ {
+ substringsFilterSequenceLength += 1 + Length.getNbBytes( finalSubstrings.getLength() ) + finalSubstrings.getLength();
+ }
+
+ substringsFilterLength += 1 + Length.getNbBytes( substringsFilterSequenceLength ) + substringsFilterSequenceLength;
+
+ return 1 + Length.getNbBytes( substringsFilterLength ) + substringsFilterLength;
+ }
+
+ /**
+ * Encode the Substrings Filter to a PDU.
+ *
+ * Substrings Filter :
+ *
+ * 0xA4 LL
+ * 0x30 LL substringsFilter
+ * 0x04 LL type
+ * 0x30 LL substrings sequence
+ * | 0x80 LL initial
+ * | / [0x81 LL any]*
+ * |/ [0x82 LL final]
+ * +--[0x81 LL any]+
+ * \ [0x82 LL final]
+ * \
+ * 0x82 LL final
+ *
+ * @param buffer The buffer where to put the PDU
+ * @return The PDU.
+ */
+ public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+ {
+ if (buffer == null)
+ {
+ throw new EncoderException("Cannot put a PDU in a null buffer !");
+ }
+
+ try
+ {
+ // The SubstringFilter Tag
+ buffer.put( (byte)LdapConstants.SUBSTRINGS_FILTER_TAG );
+ buffer.put( Length.getBytes( substringsFilterLength ) );
+
+ // The type
+ Value.encode( buffer, type );
+
+ // The SubstringSequenceFilter Tag
+ buffer.put( UniversalTag.SEQUENCE_TAG );
+ buffer.put( Length.getBytes( substringsFilterSequenceLength ) );
+
+
+ if ( ( initialSubstrings == null ) &&
+ ( ( anySubstrings == null ) || ( anySubstrings.size() == 0 ) ) &&
+ ( finalSubstrings == null ) )
+ {
+ throw new EncoderException("Cannot have a null initial, any and final substring");
+ }
+
+ // The initial substring
+ if ( initialSubstrings != null )
+ {
+ buffer.put( (byte)LdapConstants.SEARCH_SUBSTRINGS_INITIAL_TAG );
+ buffer.put( Length.getBytes( initialSubstrings.getLength() ) );
+ buffer.put( initialSubstrings.getData() );
+ }
+
+ // The any substrings
+ if ( anySubstrings != null)
+ {
+ Iterator anyIterator = anySubstrings.iterator();
+
+ while ( anyIterator.hasNext() )
+ {
+ LdapString any = (LdapString)anyIterator.next();
+ buffer.put( (byte)LdapConstants.SEARCH_SUBSTRINGS_ANY_TAG );
+ buffer.put( Length.getBytes( any.getLength() ) );
+ buffer.put( any.getData() );
+ }
+ }
+
+ // The final substring
+ if ( finalSubstrings != null )
+ {
+ buffer.put( (byte)LdapConstants.SEARCH_SUBSTRINGS_FINAL_TAG );
+ buffer.put( Length.getBytes( finalSubstrings.getLength() ) );
+ buffer.put( finalSubstrings.getData() );
+ }
+ }
+ catch ( BufferOverflowException boe )
+ {
+ throw new EncoderException("The PDU buffer size is too small !");
+ }
+
+ return buffer;
+ }
+
+ /**
+ * Return a string compliant with RFC 2254 representing a Substring filter
+ *
+ * @return The substring filter string
+ */
+ public String toString()
+ {
+
+ StringBuffer sb = new StringBuffer();
+
+ if (initialSubstrings != null)
+ {
+ sb.append( initialSubstrings.toString() );
+ }
+
+ sb.append('*');
+
+ if ( anySubstrings != null )
+ {
+ Iterator anyIterator = anySubstrings.iterator();
+
+ while (anyIterator.hasNext())
+ {
+ sb.append( (LdapString)anyIterator.next() ).append('*');
+ }
+ }
+
+ if (finalSubstrings != null)
+ {
+ sb.append( finalSubstrings.toString() );
+ }
+
+ return sb.toString();
+ }
+}