You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dj...@apache.org on 2007/10/01 09:38:15 UTC

svn commit: r580877 - /directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java

Author: djencks
Date: Mon Oct  1 00:38:13 2007
New Revision: 580877

URL: http://svn.apache.org/viewvc?rev=580877&view=rev
Log:
Work around apparent qdox bug trying to compare longs.

Modified:
    directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java

Modified: directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java?rev=580877&r1=580876&r2=580877&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java (original)
+++ directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmMasterTable.java Mon Oct  1 00:38:13 2007
@@ -6,16 +6,16 @@
  *  to you under the Apache License, Version 2.0 (the
  *  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
- *  
+ *
  *    http://www.apache.org/licenses/LICENSE-2.0
- *  
+ *
  *  Unless required by applicable law or agreed to in writing,
  *  software distributed under the License is distributed on an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
- *  under the License. 
- *  
+ *  under the License.
+ *
  */
 package org.apache.directory.server.core.partition.impl.btree.jdbm;
 
@@ -26,7 +26,6 @@
 import jdbm.RecordManager;
 import jdbm.helper.LongSerializer;
 import jdbm.helper.StringComparator;
-
 import org.apache.directory.server.core.partition.impl.btree.MasterTable;
 import org.apache.directory.server.schema.SerializableComparator;
 
@@ -40,35 +39,38 @@
 public class JdbmMasterTable extends JdbmTable implements MasterTable
 {
     private static final StringComparator STRCOMP = new StringComparator();
-    private static final SerializableComparator LONG_COMPARATOR = new SerializableComparator(
-        "1.3.6.1.4.1.18060.0.4.1.1.2" )
+
+    private static final SerializableComparator LONG_COMPARATOR = new SerializableComparator( "1.3.6.1.4.1.18060.0.4.1.1.2" )
     {
         private static final long serialVersionUID = 4048791282048841016L;
 
 
         public int compare( Object o1, Object o2 )
         {
-        	try
-        	{
-	        	long thisVal = (Long)o1;
-	        	long anotherVal = (Long)o2;
-	        	return ( thisVal < anotherVal ? -1 : ( thisVal == anotherVal ? 0 : 1 ) );
-        	}
-        	catch ( NullPointerException npe )
-        	{
-    	        if ( o1 == null )
-    	        {
-    	            throw new IllegalArgumentException( "Argument 'obj1' is null" );
-    	        }
-    	        else
-    	        {
-    	            throw new IllegalArgumentException( "Argument 'obj2' is null" );
-    	        }
-        	}
+            if ( o1 == null )
+            {
+                throw new IllegalArgumentException( "Argument 'obj1' is null" );
+            } else if ( o2 == null )
+            {
+                throw new IllegalArgumentException( "Argument 'obj2' is null" );
+            }
+            //NB qdox has a fit if you try to compare 2 longs with < or >, but accepts the following circuitous locution:
+            long thisVal = ( Long ) o1;
+            long anotherVal = ( Long ) o2;
+            if ( thisVal == anotherVal )
+            {
+                return 0;
+            }
+            long comp = thisVal - anotherVal;
+            if ( Math.abs( comp ) == comp )
+            {
+                return 1;
+            }
+            return -1;
         }
     };
-    private static final SerializableComparator STRING_COMPARATOR = new SerializableComparator(
-        "1.3.6.1.4.1.18060.0.4.1.1.3" )
+
+    private static final SerializableComparator STRING_COMPARATOR = new SerializableComparator( "1.3.6.1.4.1.18060.0.4.1.1.3" )
     {
         private static final long serialVersionUID = 3258689922792961845L;
 
@@ -78,8 +80,8 @@
             return STRCOMP.compare( o1, o2 );
         }
     };
-    /**  */
-    private JdbmTable adminTbl = null;
+
+    private final JdbmTable adminTbl;
 
 
     /**
@@ -88,7 +90,7 @@
      * @param recMan the jdbm record manager
      * @throws NamingException if there is an error opening the Db file.
      */
-    public JdbmMasterTable(RecordManager recMan) throws NamingException
+    public JdbmMasterTable( RecordManager recMan ) throws NamingException
     {
         super( DBF, recMan, LONG_COMPARATOR, LongSerializer.INSTANCE, new AttributesSerializer() );
         adminTbl = new JdbmTable( "admin", recMan, STRING_COMPARATOR, null, null );
@@ -115,12 +117,12 @@
 
 
     /**
-     * Puts the Attributes of an entry into this master table at an index 
-     * specified by id.  Used both to create new entries and update existing 
+     * Puts the Attributes of an entry into this master table at an index
+     * specified by id.  Used both to create new entries and update existing
      * ones.
      *
      * @param entry the Attributes of entry w/ operational attributes
-     * @param id the BigInteger id of the entry to put
+     * @param id    the BigInteger id of the entry to put
      * @return the Attributes of the entry put
      * @throws NamingException if there is a write error on the underlying Db.
      */
@@ -149,16 +151,17 @@
      *
      * @return the current value.
      * @throws NamingException if the admin table storing sequences cannot be
-     * read.
+     *                         read.
      */
     public Long getCurrentId() throws NamingException
     {
-        Long id = null;
+        Long id;
 
         synchronized ( adminTbl )
         {
             id = new Long( ( String ) adminTbl.get( SEQPROP_KEY ) );
 
+            //noinspection ConstantConditions
             if ( null == id )
             {
                 adminTbl.put( SEQPROP_KEY, "0" );
@@ -178,23 +181,23 @@
      *
      * @return the current value incremented by one.
      * @throws NamingException if the admin table storing sequences cannot be
-     * read and writen to.
+     *                         read and writen to.
      */
     public Long getNextId() throws NamingException
     {
-        Long lastVal = null;
-        Long nextVal = null;
+        Long lastVal;
+        Long nextVal;
 
         synchronized ( adminTbl )
         {
             lastVal = new Long( ( String ) adminTbl.get( SEQPROP_KEY ) );
 
+            //noinspection ConstantConditions
             if ( null == lastVal )
             {
                 adminTbl.put( SEQPROP_KEY, "1" );
                 return 1L;
-            }
-            else
+            } else
             {
                 nextVal = lastVal + 1L;
                 adminTbl.put( SEQPROP_KEY, nextVal.toString() );
@@ -225,7 +228,7 @@
      * Sets a persistant property stored in the admin table of this MasterTable.
      *
      * @param property the key of the property to set the value of
-     * @param value the value of the property
+     * @param value    the value of the property
      * @throws NamingException when the underlying admin table cannot be writen
      */
     public void setProperty( String property, String value ) throws NamingException
@@ -235,4 +238,5 @@
             adminTbl.put( property, value );
         }
     }
+
 }