Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 53058 invoked from network); 1 May 2008 00:07:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 1 May 2008 00:07:24 -0000 Received: (qmail 11657 invoked by uid 500); 1 May 2008 00:07:26 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 11601 invoked by uid 500); 1 May 2008 00:07:26 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 11589 invoked by uid 99); 1 May 2008 00:07:26 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Apr 2008 17:07:26 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 May 2008 00:06:35 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id E18982388A05; Wed, 30 Apr 2008 17:06:54 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r652410 [3/14] - in /directory: apacheds/branches/bigbang/ apacheds/branches/bigbang/apacheds-jdbm/ apacheds/branches/bigbang/apacheds-jdbm/src/ apacheds/branches/bigbang/apacheds-jdbm/src/etc/ apacheds/branches/bigbang/apacheds-jdbm/src/ex... Date: Thu, 01 May 2008 00:06:46 -0000 To: commits@directory.apache.org From: elecharny@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080501000654.E18982388A05@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Conversion.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Conversion.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Conversion.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Conversion.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,223 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + + +/** + * Miscelaneous conversion utility methods. + * + * @author Alex Boisvert + * @version $Id: Conversion.java,v 1.3 2002/05/31 06:33:20 boisvert Exp $ + */ +public class Conversion +{ + + /** + * Convert a string into a byte array. + */ + public static byte[] convertToByteArray( String s ) + { + try { + // see the following page for character encoding + // http://java.sun.com/products/jdk/1.1/docs/guide/intl/encoding.doc.html + return s.getBytes( "UTF8" ); + } catch ( java.io.UnsupportedEncodingException uee ) { + uee.printStackTrace(); + throw new Error( "Platform doesn't support UTF8 encoding" ); + } + } + + + /** + * Convert a byte into a byte array. + */ + public static byte[] convertToByteArray( byte n ) + { + n = (byte)( n ^ ( (byte) 0x80 ) ); // flip MSB because "byte" is signed + return new byte[] { n }; + } + + + /** + * Convert a short into a byte array. + */ + public static byte[] convertToByteArray( short n ) + { + n = (short) ( n ^ ( (short) 0x8000 ) ); // flip MSB because "short" is signed + byte[] key = new byte[ 2 ]; + pack2( key, 0, n ); + return key; + } + + + /** + * Convert an int into a byte array. + */ + public static byte[] convertToByteArray( int n ) + { + n = (n ^ 0x80000000); // flip MSB because "int" is signed + byte[] key = new byte[4]; + pack4(key, 0, n); + return key; + } + + + /** + * Convert a long into a byte array. + */ + public static byte[] convertToByteArray( long n ) + { + n = (n ^ 0x8000000000000000L); // flip MSB because "long" is signed + byte[] key = new byte[8]; + pack8( key, 0, n ); + return key; + } + + + /** + * Convert a byte array (encoded as UTF-8) into a String + */ + public static String convertToString( byte[] buf ) + { + try { + // see the following page for character encoding + // http://java.sun.com/products/jdk/1.1/docs/guide/intl/encoding.doc.html + return new String( buf, "UTF8" ); + } catch ( java.io.UnsupportedEncodingException uee ) { + uee.printStackTrace(); + throw new Error( "Platform doesn't support UTF8 encoding" ); + } + } + + + /** + * Convert a byte array into an integer (signed 32-bit) value. + */ + public static int convertToInt( byte[] buf ) + { + int value = unpack4( buf, 0 ); + value = ( value ^ 0x80000000 ); // flip MSB because "int" is signed + return value; + } + + + /** + * Convert a byte array into a long (signed 64-bit) value. + */ + public static long convertToLong( byte[] buf ) + { + long value = ( (long) unpack4( buf, 0 ) << 32 ) + + ( unpack4( buf, 4 ) & 0xFFFFFFFFL ); + value = ( value ^ 0x8000000000000000L ); // flip MSB because "long" is signed + return value; + } + + + + + static int unpack4( byte[] buf, int offset ) + { + int value = ( buf[ offset ] << 24 ) + | ( ( buf[ offset+1 ] << 16 ) & 0x00FF0000 ) + | ( ( buf[ offset+2 ] << 8 ) & 0x0000FF00 ) + | ( ( buf[ offset+3 ] << 0 ) & 0x000000FF ); + + return value; + } + + + static final void pack2( byte[] data, int offs, int val ) + { + data[offs++] = (byte) ( val >> 8 ); + data[offs++] = (byte) val; + } + + + static final void pack4( byte[] data, int offs, int val ) + { + data[offs++] = (byte) ( val >> 24 ); + data[offs++] = (byte) ( val >> 16 ); + data[offs++] = (byte) ( val >> 8 ); + data[offs++] = (byte) val; + } + + + static final void pack8( byte[] data, int offs, long val ) + { + pack4( data, 0, (int) ( val >> 32 ) ); + pack4( data, 4, (int) val ); + } + + + /** + * Test static methods + */ + public static void main( String[] args ) + { + byte[] buf; + + buf = convertToByteArray( (int) 5 ); + System.out.println( "int value of 5 is: " + convertToInt( buf ) ); + + buf = convertToByteArray( (int) -1 ); + System.out.println( "int value of -1 is: " + convertToInt( buf ) ); + + buf = convertToByteArray( (int) 22111000 ); + System.out.println( "int value of 22111000 is: " + convertToInt( buf ) ); + + + buf = convertToByteArray( (long) 5L ); + System.out.println( "long value of 5 is: " + convertToLong( buf ) ); + + buf = convertToByteArray( (long) -1L ); + System.out.println( "long value of -1 is: " + convertToLong( buf ) ); + + buf = convertToByteArray( (long) 1112223334445556667L ); + System.out.println( "long value of 1112223334445556667 is: " + convertToLong( buf ) ); + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/DefaultSerializer.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/DefaultSerializer.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/DefaultSerializer.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/DefaultSerializer.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,103 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.IOException; + +/** + * Default java serializer. + * + * @author Alex Boisvert + * @version $Id: DefaultSerializer.java,v 1.2 2003/09/21 15:47:00 boisvert Exp $ + */ +public class DefaultSerializer + implements Serializer +{ + + + public static final DefaultSerializer INSTANCE = new DefaultSerializer(); + + + /** + * Construct a DefaultSerializer. + */ + public DefaultSerializer() + { + // no op + } + + + /** + * Serialize the content of an object into a byte array. + * + * @param obj Object to serialize + * @return a byte array representing the object's state + */ + public byte[] serialize( Object obj ) + throws IOException + { + return Serialization.serialize( obj ); + } + + + /** + * Deserialize the content of an object from a byte array. + * + * @param serialized Byte array representation of the object + * @return deserialized object + */ + public Object deserialize( byte[] serialized ) + throws IOException + { + try { + return Serialization.deserialize( serialized ); + } catch ( ClassNotFoundException except ) { + throw new WrappedRuntimeException( except ); + } + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/FastIterator.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/FastIterator.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/FastIterator.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/FastIterator.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,68 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2000 (C) Cees de Groot. All Rights Reserved. + * Contributions are Copyright (C) 2000 by their associated contributors. + * + * $Id: FastIterator.java,v 1.2 2003/10/21 15:43:58 boisvert Exp $ + */ + +package jdbm.helper; + + +/** + * Fast and simple iterator. + * + * @version $Revision: 1.2 $ + * @author Alex Boisvert + */ +public abstract class FastIterator +{ + + /** + * Returns the next element in the interation. + * + * @return the next element in the iteration, or null if no more element. + */ + public abstract Object next() + throws IterationException; + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerComparator.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerComparator.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerComparator.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerComparator.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,105 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.Serializable; +import java.util.Comparator; + +/** + * Comparator for Integer objects. + * + * @author Christof Dallermassl + * @version $Id: IntegerComparator.java,v 1.2 2002/05/31 06:33:20 boisvert Exp $ + */ +public final class IntegerComparator + implements Comparator, Serializable +{ + + /** + * Version id for serialization. + */ + final static long serialVersionUID = 1L; + + + /** + * Compare two objects. + * + * @param obj1 First object + * @param obj2 Second object + * @return a positive integer if obj1 > obj2, 0 if obj1 == obj2, + * and a negative integer if obj1 < obj2 + */ + public int compare( Object obj1, Object obj2 ) + { + if ( obj1 == obj2 ) { + return 0; + } + + if ( obj1 == null ) { + throw new IllegalArgumentException( "Argument 'obj1' is null" ); + } + + if ( obj2 == null ) { + throw new IllegalArgumentException( "Argument 'obj2' is null" ); + } + + // complicated to avoid usage of Integer.compareTo, as this + // method is Java 1.2 only! + int int1 = ( (Integer) obj1 ).intValue(); + int int2 = ( (Integer) obj2 ).intValue(); + if ( int1 == int2 ) { + return 0; + } + + if ( int1 < int2 ) { + return -1; + } else { + return 1; + } + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerSerializer.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerSerializer.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerSerializer.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IntegerSerializer.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,101 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.IOException; + +/** + * Optimized serializer for integers. + * + * @author Alex Boisvert + * @version $Id: IntegerSerializer.java,v 1.2 2003/09/21 15:47:00 boisvert Exp $ + */ +public class IntegerSerializer + implements Serializer +{ + + + public static final IntegerSerializer INSTANCE = new IntegerSerializer(); + + + /** + * Construct an IntegerSerializer. + */ + public IntegerSerializer() + { + // no op + } + + + /** + * Serialize the content of an object into a byte array. + * + * @param obj Object to serialize + * @return a byte array representing the object's state + */ + public byte[] serialize( Object obj ) + throws IOException + { + Integer number = (Integer) obj; + return Conversion.convertToByteArray( number.intValue() ); + } + + + /** + * Deserialize the content of an object from a byte array. + * + * @param serialized Byte array representation of the object + * @return deserialized object + */ + public Object deserialize( byte[] serialized ) + throws IOException + { + int number = Conversion.convertToInt( serialized ); + return new Integer( number ); + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IterationException.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IterationException.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IterationException.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/IterationException.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,97 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2000 (C) Cees de Groot. All Rights Reserved. + * Contributions are Copyright (C) 2000 by their associated contributors. + * + * $Id: IterationException.java,v 1.2 2003/09/21 15:47:00 boisvert Exp $ + */ + +package jdbm.helper; + + +/** + * Iteration exception. + * + * @author Alex Boisvert + * @version $Revision: 1.2 $ + */ +public class IterationException + extends WrappedRuntimeException +{ + + /** + * Construct a new iteration exception wrapping an underlying exception + * and providing a message. + * + * @param message The exception message + * @param except The underlying exception + */ + public IterationException( String message, Exception except ) + { + super( message, except ); + } + + + /** + * Construct a new iteration exception with a message. + * + * @param message The exception message + */ + public IterationException( String message ) + { + super( message, null ); + } + + + /** + * Construct a new iteration exception wrapping an underlying exception. + * + * @param except The underlying exception + */ + public IterationException( Exception except ) + { + super( except ); + } + +} + + Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongComparator.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongComparator.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongComparator.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongComparator.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,98 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.Serializable; +import java.util.Comparator; + +/** + * Comparator for java.lang.Long objects. + * + * @author Alex Boisvert + * @version $Id: LongComparator.java,v 1.4 2002/05/31 06:33:20 boisvert Exp $ + */ +public final class LongComparator + implements Comparator, Serializable +{ + + /** + * Version id for serialization. + */ + final static long serialVersionUID = 1L; + + + /** + * Compare two objects. + * + * @param obj1 First object + * @param obj2 Second object + * @return a positive integer if obj1 > obj2, 0 if obj1 == obj2, + * and a negative integer if obj1 < obj2 + */ + public int compare( Object obj1, Object obj2 ) + { + if ( obj1 == null ) { + throw new IllegalArgumentException( "Argument 'obj1' is null" ); + } + + if ( obj2 == null ) { + throw new IllegalArgumentException( "Argument 'obj2' is null" ); + } + + long l1 = ( (Long) obj1 ).longValue(); + long l2 = ( (Long) obj2 ).longValue(); + + if ( l1 > l2 ) { + return 1; + } else if ( l1 == l2 ) { + return 0; + } else { + return -1; + } + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongSerializer.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongSerializer.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongSerializer.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/LongSerializer.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,101 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.IOException; + +/** + * Optimized serializer for long integers. + * + * @author Alex Boisvert + * @version $Id: LongSerializer.java,v 1.2 2003/09/21 15:47:00 boisvert Exp $ + */ +public class LongSerializer + implements Serializer +{ + + + public static final LongSerializer INSTANCE = new LongSerializer(); + + + /** + * Construct a LongSerializer. + */ + public LongSerializer() + { + // no op + } + + + /** + * Serialize the content of an object into a byte array. + * + * @param obj Object to serialize + * @return a byte array representing the object's state + */ + public byte[] serialize( Object obj ) + throws IOException + { + Long number = (Long) obj; + return Conversion.convertToByteArray( number.longValue() ); + } + + + /** + * Deserialize the content of an object from a byte array. + * + * @param serialized Byte array representation of the object + * @return deserialized object + */ + public Object deserialize( byte[] serialized ) + throws IOException + { + long number = Conversion.convertToLong( serialized ); + return new Long( number ); + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/MRU.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/MRU.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/MRU.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/MRU.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,334 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2000 (C) Cees de Groot. All Rights Reserved. + * Contributions are Copyright (C) 2000 by their associated contributors. + * + * $Id: MRU.java,v 1.8 2005/06/25 23:12:31 doomdark Exp $ + */ + +package jdbm.helper; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + + +/** + * MRU - Most Recently Used cache policy. + * + * Methods are *not* synchronized, so no concurrent access is allowed. + * + * @author Alex Boisvert + * @version $Id: MRU.java,v 1.8 2005/06/25 23:12:31 doomdark Exp $ + */ +public class MRU implements CachePolicy { + + /** Cached object hashtable */ + Hashtable _hash = new Hashtable(); + + /** + * Maximum number of objects in the cache. + */ + int _max; + + /** + * Beginning of linked-list of cache elements. First entry is element + * which has been used least recently. + */ + CacheEntry _first; + + /** + * End of linked-list of cache elements. Last entry is element + * which has been used most recently. + */ + CacheEntry _last; + + + /** + * Cache eviction listeners + */ + Vector listeners = new Vector(); + + + /** + * Construct an MRU with a given maximum number of objects. + */ + public MRU(int max) { + if (max <= 0) { + throw new IllegalArgumentException("MRU cache must contain at least one entry"); + } + _max = max; + } + + + /** + * Place an object in the cache. + */ + public void put(Object key, Object value) throws CacheEvictionException { + CacheEntry entry = (CacheEntry)_hash.get(key); + if (entry != null) { + entry.setValue(value); + touchEntry(entry); + } else { + + if (_hash.size() == _max) { + // purge and recycle entry + entry = purgeEntry(); + entry.setKey(key); + entry.setValue(value); + } else { + entry = new CacheEntry(key, value); + } + addEntry(entry); + _hash.put(entry.getKey(), entry); + } + } + + + /** + * Obtain an object in the cache + */ + public Object get(Object key) { + CacheEntry entry = (CacheEntry)_hash.get(key); + if (entry != null) { + touchEntry(entry); + return entry.getValue(); + } else { + return null; + } + } + + + /** + * Remove an object from the cache + */ + public void remove(Object key) { + CacheEntry entry = (CacheEntry)_hash.get(key); + if (entry != null) { + removeEntry(entry); + _hash.remove(entry.getKey()); + } + } + + + /** + * Remove all objects from the cache + */ + public void removeAll() { + _hash = new Hashtable(); + _first = null; + _last = null; + } + + + /** + * Enumerate elements' values in the cache + */ + public Enumeration elements() { + return new MRUEnumeration(_hash.elements()); + } + + /** + * Add a listener to this cache policy + * + * @param listener Listener to add to this policy + */ + public void addListener(CachePolicyListener listener) { + if (listener == null) { + throw new IllegalArgumentException("Cannot add null listener."); + } + if ( ! listeners.contains(listener)) { + listeners.addElement(listener); + } + } + + /** + * Remove a listener from this cache policy + * + * @param listener Listener to remove from this policy + */ + public void removeListener(CachePolicyListener listener) { + listeners.removeElement(listener); + } + + /** + * Add a CacheEntry. Entry goes at the end of the list. + */ + protected void addEntry(CacheEntry entry) { + if (_first == null) { + _first = entry; + _last = entry; + } else { + _last.setNext(entry); + entry.setPrevious(_last); + _last = entry; + } + } + + + /** + * Remove a CacheEntry from linked list + */ + protected void removeEntry(CacheEntry entry) { + if (entry == _first) { + _first = entry.getNext(); + } + if (_last == entry) { + _last = entry.getPrevious(); + } + CacheEntry previous = entry.getPrevious(); + CacheEntry next = entry.getNext(); + if (previous != null) { + previous.setNext(next); + } + if (next != null) { + next.setPrevious(previous); + } + entry.setPrevious(null); + entry.setNext(null); + } + + /** + * Place entry at the end of linked list -- Most Recently Used + */ + protected void touchEntry(CacheEntry entry) { + if (_last == entry) { + return; + } + removeEntry(entry); + addEntry(entry); + } + + /** + * Purge least recently used object from the cache + * + * @return recyclable CacheEntry + */ + protected CacheEntry purgeEntry() throws CacheEvictionException { + CacheEntry entry = _first; + + // Notify policy listeners first. if any of them throw an + // eviction exception, then the internal data structure + // remains untouched. + CachePolicyListener listener; + for (int i=0; iAlex Boisvert + * @version $Id: ObjectBAComparator.java,v 1.1 2002/05/31 06:33:20 boisvert Exp $ + */ +public final class ObjectBAComparator + implements Comparator, Serializable +{ + + /** + * Version id for serialization. + */ + final static long serialVersionUID = 1L; + + + /** + * Wrapped comparator. + */ + private Comparator _comparator; + + + /** + * Construct an ObjectByteArrayComparator which wraps an Object Comparator. + * + * @param comparator Object comparator. + */ + public ObjectBAComparator( Comparator comparator ) + { + if ( comparator == null ) { + throw new IllegalArgumentException( "Argument 'comparator' is null" ); + } + + _comparator = comparator; + } + + + /** + * Compare two objects. + * + * @param obj1 First object + * @param obj2 Second object + * @return 1 if obj1 > obj2, 0 if obj1 == obj2, -1 if obj1 < obj2 + */ + public int compare( Object obj1, Object obj2 ) + { + if ( obj1 == null ) { + throw new IllegalArgumentException( "Argument 'obj1' is null" ); + } + + if ( obj2 == null ) { + throw new IllegalArgumentException( "Argument 'obj2' is null" ); + } + + try { + obj1 = Serialization.deserialize( (byte[]) obj1 ); + obj2 = Serialization.deserialize( (byte[]) obj2 ); + + return _comparator.compare( obj1, obj2 ); + } catch ( IOException except ) { + throw new WrappedRuntimeException( except ); + } catch ( ClassNotFoundException except ) { + throw new WrappedRuntimeException( except ); + } + } + + + /** + * Compare two byte arrays. + */ + public static int compareByteArray( byte[] thisKey, byte[] otherKey ) + { + int len = Math.min( thisKey.length, otherKey.length ); + + // compare the byte arrays + for ( int i=0; i= 0 ) { + if ( otherKey[i] >= 0 ) { + // both positive + if ( thisKey[i] < otherKey[i] ) { + return -1; + } else if ( thisKey[i] > otherKey[i] ) { + return 1; + } + } else { + // otherKey is negative => greater (because MSB is 1) + return -1; + } + } else { + if ( otherKey[i] >= 0 ) { + // thisKey is negative => greater (because MSB is 1) + return 1; + } else { + // both negative + if ( thisKey[i] < otherKey[i] ) { + return -1; + } else if ( thisKey[i] > otherKey[i] ) { + return 1; + } + } + } + } + if ( thisKey.length == otherKey.length) { + return 0; + } + if ( thisKey.length < otherKey.length ) { + return -1; + } + return 1; + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serialization.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serialization.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serialization.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serialization.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,96 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +/** + * Serialization-related utility methods. + * + * @author Alex Boisvert + * @version $Id: Serialization.java,v 1.1 2002/05/31 06:33:20 boisvert Exp $ + */ +public final class Serialization +{ + + /** + * Serialize the object into a byte array. + */ + public static byte[] serialize( Object obj ) + throws IOException + { + ByteArrayOutputStream baos; + ObjectOutputStream oos; + + baos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream( baos ); + oos.writeObject( obj ); + oos.close(); + + return baos.toByteArray(); + } + + + /** + * Deserialize an object from a byte array + */ + public static Object deserialize( byte[] buf ) + throws ClassNotFoundException, IOException + { + ByteArrayInputStream bais; + ObjectInputStream ois; + + bais = new ByteArrayInputStream( buf ); + ois = new ObjectInputStream( bais ); + return ois.readObject(); + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serializer.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serializer.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serializer.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Serializer.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,82 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.IOException; +import java.io.Serializable; + +/** + * Interface used to provide a serialization mechanism other than a class' normal + * serialization. + * + * @author Alex Boisvert + * @version $Id: Serializer.java,v 1.1 2003/03/21 02:48:42 boisvert Exp $ + */ +public interface Serializer + extends Serializable +{ + + /** + * Serialize the content of an object into a byte array. + * + * @param obj Object to serialize + * @return a byte array representing the object's state + */ + public byte[] serialize( Object obj ) + throws IOException; + + + /** + * Deserialize the content of an object from a byte array. + * + * @param serialized Byte array representation of the object + * @return deserialized object + */ + public Object deserialize( byte[] serialized ) + throws IOException; + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/SoftCache.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/SoftCache.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/SoftCache.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/SoftCache.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,294 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2000 (C) Cees de Groot. All Rights Reserved. + * Contributions are Copyright (C) 2000 by their associated contributors. + * + * $Id + */ +package jdbm.helper; + +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.lang.ref.Reference; +import java.util.Enumeration; +import java.util.Map; +import java.util.HashMap; + +/** + * Wraps a deterministic cache policy with a Level-2 cache based on + * J2SE's {@link SoftReference soft references}. Soft references allow + * this cache to keep references to objects until the memory they occupy + * is required elsewhere. + *

+ * Since the {@link CachePolicy} interface requires an event be fired + * when an object is evicted, and the event contains the actual object, + * this class cannot be a stand-alone implementation of + * CachePolicy. This limitation arises because Java References + * does not support notification before references are cleared; nor do + * they support reaching soft referents. Therefore, this wrapper cache + * aggressively notifies evictions: events are fired when the objects are + * evicted from the internal cache. Consequently, the soft cache may return + * a non-null object when get( ) is called, even if that + * object was said to have been evicted. + *

+ * The current implementation uses a hash structure for its internal key + * to value mappings. + *

+ * Note: this component's publicly exposed methods are not threadsafe; + * potentially concurrent code should synchronize on the cache instance. + * + * @author Dilum Ranatunga + * @version $Id: SoftCache.java,v 1.1 2003/11/01 13:29:27 dranatunga Exp $ + */ +public class SoftCache implements CachePolicy { + private static final int INITIAL_CAPACITY = 128; + private static final float DEFAULT_LOAD_FACTOR = 1.5f; + + private final ReferenceQueue _clearQueue = new ReferenceQueue(); + private final CachePolicy _internal; + private final Map _cacheMap; + + /** + * Creates a soft-reference based L2 cache with a {@link MRU} cache as + * the internal (L1) cache. The soft reference cache uses the + * default load capacity of 1.5f, which is intended to sacrifice some + * performance for space. This compromise is reasonable, since all + * {@link #get(Object) get( )s} first try the L1 cache anyway. The + * internal MRU is given a capacity of 128 elements. + */ + public SoftCache() { + this(new MRU(INITIAL_CAPACITY)); + } + + /** + * Creates a soft-reference based L2 cache wrapping the specified + * L1 cache. + * + * @param internal non null internal cache. + * @throws NullPointerException if the internal cache is null. + */ + public SoftCache(CachePolicy internal) throws NullPointerException { + this(DEFAULT_LOAD_FACTOR, internal); + } + + /** + * Creates a soft-reference based L2 cache wrapping the specified + * L1 cache. This constructor is somewhat implementation-specific, + * so users are encouraged to use {@link #SoftCache(CachePolicy)} + * instead. + * + * @param loadFactor load factor that the soft cache's hash structure + * should use. + * @param internal non null internal cache. + * @throws IllegalArgumentException if the load factor is nonpositive. + * @throws NullPointerException if the internal cache is null. + */ + public SoftCache(float loadFactor, CachePolicy internal) throws IllegalArgumentException, NullPointerException { + if (internal == null) { + throw new NullPointerException("Internal cache cannot be null."); + } + _internal = internal; + _cacheMap = new HashMap(INITIAL_CAPACITY, loadFactor); + } + + /** + * Adds the specified value to the cache under the specified key. Note + * that the object is added to both this and the internal cache. + * @param key the (non-null) key to store the object under + * @param value the (non-null) object to place in the cache + * @throws CacheEvictionException exception that the internal cache + * would have experienced while evicting an object it currently + * cached. + */ + public void put(Object key, Object value) throws CacheEvictionException { + if (key == null) { + throw new IllegalArgumentException("key cannot be null."); + } else if (value == null) { + throw new IllegalArgumentException("value cannot be null."); + } + _internal.put(key, value); + removeClearedEntries(); + _cacheMap.put(key, new Entry(key, value, _clearQueue)); + } + + /** + * Gets the object cached under the specified key. + *

+ * The cache is looked up in the following manner: + *

    + *
  1. The internal (L1) cache is checked. If the object is found, it is + * returned.
  2. + *
  3. This (L2) cache is checked. If the object is not found, then + * the caller is informed that the object is inaccessible.
  4. + *
  5. Since the object exists in L2, but not in L1, the object is + * readded to L1 using {@link CachePolicy#put(Object, Object)}.
  6. + *
  7. If the readding succeeds, the value is returned to caller.
  8. + *
  9. If a cache eviction exception is encountered instead, we + * remove the object from L2 and behave as if the object was + * inaccessible.
  10. + *
+ * @param key the key that the object was stored under. + * @return the object stored under the key specified; null if the + * object is not (nolonger) accessible via this cache. + */ + public Object get(Object key) { + // first try the internal cache. + Object value = _internal.get(key); + if (value != null) { + return value; + } + // poll and remove cleared references. + removeClearedEntries(); + Entry entry = (Entry)_cacheMap.get(key); + if (entry == null) { // object is not in cache. + return null; + } + value = entry.getValue(); + if (value == null) { // object was in cache, but it was cleared. + return null; + } + // we have the object. so we try to re-insert it into internal cache + try { + _internal.put(key, value); + } catch (CacheEvictionException e) { + // if the internal cache causes a fuss, we kick the object out. + _cacheMap.remove(key); + return null; + } + return value; + } + + /** + * Removes any object stored under the key specified. Note that the + * object is removed from both this (L2) and the internal (L1) + * cache. + * @param key the key whose object should be removed + */ + public void remove(Object key) { + _cacheMap.remove(key); + _internal.remove(key); + } + + /** + * Removes all objects in this (L2) and its internal (L1) cache. + */ + public void removeAll() { + _cacheMap.clear(); + _internal.removeAll(); + } + + /** + * Gets all the objects stored by the internal (L1) cache. + * @return an enumeration of objects in internal cache. + */ + public Enumeration elements() { + return _internal.elements(); + } + + /** + * Adds the specified listener to this cache. Note that the events + * fired by this correspond to the internal cache's events. + * @param listener the (non-null) listener to add to this policy + * @throws IllegalArgumentException if listener is null. + */ + public void addListener(CachePolicyListener listener) + throws IllegalArgumentException { + _internal.addListener(listener); + } + + /** + * Removes a listener that was added earlier. + * @param listener the listener to remove. + */ + public void removeListener(CachePolicyListener listener) { + _internal.removeListener(listener); + } + + /** + * Cleans the mapping structure of any obsolete entries. This is usually + * called before insertions and lookups on the mapping structure. The + * runtime of this is usually very small, but it can be as expensive as + * n * log(n) if a large number of soft references were recently cleared. + */ + private final void removeClearedEntries() { + for (Reference r = _clearQueue.poll(); r != null; r = _clearQueue.poll()) { + Object key = ((Entry)r).getKey(); + _cacheMap.remove(key); + } + } + + /** + * Value objects we keep in the internal map. This contains the key in + * addition to the value, because polling for cleared references + * returns these instances, and having access to their corresponding + * keys drastically improves the performance of removing the pair + * from the map (see {@link SoftCache#removeClearedEntries()}.) + */ + private static class Entry extends SoftReference { + private final Object _key; + + /** + * Constructor that uses value as the soft + * reference's referent. + */ + public Entry(Object key, Object value, ReferenceQueue queue) { + super(value, queue); + _key = key; + } + + /** + * Gets the key + * @return the key associated with this value. + */ + final Object getKey() { + return _key; + } + + /** + * Gets the value + * @return the value; null if it is no longer accessible + */ + final Object getValue() { + return this.get(); + } + } +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/StringComparator.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/StringComparator.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/StringComparator.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/StringComparator.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,89 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.Serializable; +import java.util.Comparator; + +/** + * Comparator for String objects. Delegates to String.compareTo(). + * + * @author Alex Boisvert + * @version $Id: StringComparator.java,v 1.5 2005/06/25 23:12:31 doomdark Exp $ + */ +public final class StringComparator + implements Comparator, Serializable +{ + + /** + * Version id for serialization. + */ + final static long serialVersionUID = 1L; + + + /** + * Compare two objects. + * + * @param obj1 First object + * @param obj2 Second object + * @return a positive integer if obj1 > obj2, 0 if obj1 == obj2, + * and a negative integer if obj1 < obj2 + */ + public int compare( Object obj1, Object obj2 ) + { + if ( obj1 == null ) { + throw new IllegalArgumentException( "Argument 'obj1' is null" ); + } + + if ( obj2 == null ) { + throw new IllegalArgumentException( "Argument 'obj2' is null" ); + } + + return ( (String) obj1 ).compareTo((String) obj2 ); + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Tuple.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Tuple.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Tuple.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/Tuple.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,121 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + + +/** + * Tuple consisting of a key-value pair. + * + * @author Alex Boisvert + * @version $Id: Tuple.java,v 1.2 2001/05/19 14:02:00 boisvert Exp $ + */ +public final class Tuple { + + /** + * Key + */ + private Object _key; + + + /** + * Value + */ + private Object _value; + + + /** + * Construct an empty Tuple. + */ + public Tuple() { + // empty + } + + + /** + * Construct a Tuple. + * + * @param key The key. + * @param value The value. + */ + public Tuple( Object key, Object value ) { + _key = key; + _value = value; + } + + + /** + * Get the key. + */ + public Object getKey() { + return _key; + } + + + /** + * Set the key. + */ + public void setKey( Object key ) { + _key = key; + } + + + /** + * Get the value. + */ + public Object getValue() { + return _value; + } + + + /** + * Set the value. + */ + public void setValue( Object value ) { + _value = value; + } + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/TupleBrowser.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/TupleBrowser.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/TupleBrowser.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/TupleBrowser.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,81 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.IOException; + +/** + * Browser to traverse a collection of tuples. The browser allows for + * forward and reverse order traversal. + * + * @author Alex Boisvert + * @version $Id: TupleBrowser.java,v 1.2 2001/05/19 14:02:00 boisvert Exp $ + */ +public abstract class TupleBrowser { + + /** + * Get the next tuple. + * + * @param tuple Tuple into which values are copied. + * @return True if values have been copied in tuple, or false if there is + * no next tuple. + */ + public abstract boolean getNext( Tuple tuple ) + throws IOException; + + + /** + * Get the previous tuple. + * + * @param tuple Tuple into which values are copied. + * @return True if values have been copied in tuple, or false if there is + * no previous tuple. + */ + public abstract boolean getPrevious( Tuple tuple ) + throws IOException; + +} Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/WrappedRuntimeException.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/WrappedRuntimeException.java?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/WrappedRuntimeException.java (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/WrappedRuntimeException.java Wed Apr 30 17:06:41 2008 @@ -0,0 +1,151 @@ +/** + * JDBM LICENSE v1.00 + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "JDBM" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Cees de Groot. For written permission, + * please contact cg@cdegroot.com. + * + * 4. Products derived from this Software may not be called "JDBM" + * nor may "JDBM" appear in their names without prior written + * permission of Cees de Groot. + * + * 5. Due credit should be given to the JDBM Project + * (http://jdbm.sourceforge.net/). + * + * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 2001 (C) Alex Boisvert. All Rights Reserved. + * Contributions are Copyright (C) 2001 by their associated contributors. + * + */ + +package jdbm.helper; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * A run-time exception that wraps another exception. The printed stack + * trace will be that of the wrapped exception. + * + * @author Alex Boisvert + * @version $Id: WrappedRuntimeException.java,v 1.1 2002/05/31 06:33:20 boisvert Exp $ + */ +public class WrappedRuntimeException + extends RuntimeException +{ + + + /** + * The underlying exception. + */ + private final Exception _except; + + + /** + * Constructs a new runtime exception based on a checked exception. + * + * @param message The error message + * @param except The checked exception + */ + public WrappedRuntimeException( String message, Exception except ) + { + super( message == null ? "No message available" : message ); + + if ( except instanceof WrappedRuntimeException && + ( (WrappedRuntimeException) except )._except != null ) + { + _except = ( (WrappedRuntimeException) except )._except; + } else { + _except = except; + } + } + + + /** + * Constructs a new runtime exception based on a checked exception. + * + * @param except The checked exception + */ + public WrappedRuntimeException( Exception except ) + { + super( except == null || except.getMessage() == null ? "No message available" : except.getMessage() ); + + if ( except instanceof WrappedRuntimeException && + ( (WrappedRuntimeException) except )._except != null ) + { + _except = ( (WrappedRuntimeException) except )._except; + } else { + _except = except; + } + } + + + /** + * Returns the exception wrapped by this runtime exception. + * + * @return The exception wrapped by this runtime exception + */ + public Exception getException() + { + return _except; + } + + + public void printStackTrace() + { + if ( _except == null ) { + super.printStackTrace(); + } else { + _except.printStackTrace(); + } + } + + + public void printStackTrace( PrintStream stream ) + { + if ( _except == null ) { + super.printStackTrace( stream ); + } else { + _except.printStackTrace( stream ); + } + } + + + public void printStackTrace( PrintWriter writer ) + { + if ( _except == null ) { + super.printStackTrace( writer ); + } else { + _except.printStackTrace( writer ); + } + } + +} + + Added: directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/package.html URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/package.html?rev=652410&view=auto ============================================================================== --- directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/package.html (added) +++ directory/apacheds/branches/bigbang/apacheds-jdbm/src/main/java/jdbm/helper/package.html Wed Apr 30 17:06:41 2008 @@ -0,0 +1,12 @@ + + + +

Miscelaneous utility classes and interfaces.

+ +
+
Version:
$Revision: 1.1 $ $Date: 2001/05/19 16:01:33 $
+
Author:
Alex Boisvert
+
+ + +