Author: vgritsenko Date: Thu Dec 15 14:11:59 2005 New Revision: 357079 URL: http://svn.apache.org/viewcvs?rev=357079&view=rev Log: <action dev="VG" type="fix" fixes-bug="37383" due-to="Terry Rosenbaum"> Fix ClassCastException in MemValueIndexer. </action>
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/MemValueIndexer.java xml/xindice/trunk/status.xml Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/MemValueIndexer.java URL: http://svn.apache.org/viewcvs/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/MemValueIndexer.java?rev=357079&r1=357078&r2=357079&view=diff ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/MemValueIndexer.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/MemValueIndexer.java Thu Dec 15 14:11:59 2005 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2004 The Apache Software Foundation. + * Copyright 1999-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. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * CVS $Id$ + * $Id$ */ package org.apache.xindice.core.indexer; @@ -46,7 +46,7 @@ * useful for temporary indexing of persistent Collections. * * @author Terry Rosenbaum ([EMAIL PROTECTED]) - * @version CVS $Revision$, $Date$ + * @version $Revision$, $Date$ */ public class MemValueIndexer implements Indexer { @@ -87,6 +87,8 @@ private static final String CHAR_VAL = "char"; private static final String BOOLEAN_VAL = "boolean"; + private static final IndexMatch[] EMPTY_INDEX_MATCH_ARRAY = new IndexMatch[0]; + // // Instance variables // @@ -194,7 +196,8 @@ * @param theElementID The Element ID of the value * @param theAttributeID The Attribute ID of the value (if any, else -1) */ - public synchronized void remove(String theValue, Key theKey, int thePosition, int theLength, short theElementID, short theAttributeID) throws DBException { + public synchronized void remove(String theValue, Key theKey, int thePosition, int theLength, + short theElementID, short theAttributeID) throws DBException { Object aValue; if (itsValueType != STRING) { @@ -234,7 +237,8 @@ * @param theElementID The Element ID of the value * @param theAttributeID The Attribute ID of the value (if any, else -1) */ - public synchronized void add(String theValue, Key theKey, int thePosition, int theLength, short theElementID, short theAttributeID) throws DBException { + public synchronized void add(String theValue, Key theKey, int thePosition, int theLength, + short theElementID, short theAttributeID) throws DBException { Object aValue; if (itsValueType != STRING) { @@ -296,7 +300,7 @@ } } - TreeSet aLocatorSet = null; + TreeSet aLocatorSet; Object aLowEndpoint = aMatchValueArray[0]; Object aHighEndpoint = aMatchValueArray[aMatchValueArray.length - 1]; @@ -321,7 +325,7 @@ // see whether or not we even have the value to be excluded TreeSet anExcludedLocatorSet = (TreeSet) itsValues.get(aLowEndpoint); - aValueIterator = itsValues.values().iterator(); + aValueIterator = itsValues.entrySet().iterator(); int aResultIndex = 0; if (anExcludedLocatorSet == null) { // allocate return array to include all locators since none are excluded @@ -334,7 +338,8 @@ Iterator aLocatorIterator = ((TreeSet) ((Map.Entry) aValueIterator.next()).getValue()).iterator(); for (; aLocatorIterator.hasNext(); ++aResultIndex) { ValueLocator aLocator = (ValueLocator) aLocatorIterator.next(); - aResult[aResultIndex] = new IndexMatch(new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); + aResult[aResultIndex] = new IndexMatch( + new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); } } } else { @@ -352,7 +357,8 @@ Iterator aLocatorIterator = ((TreeSet) ((Map.Entry) aValueIterator.next()).getValue()).iterator(); for (; aLocatorIterator.hasNext(); ++aResultIndex) { ValueLocator aLocator = (ValueLocator) aLocatorIterator.next(); - aResult[aResultIndex] = new IndexMatch(new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); + aResult[aResultIndex] = new IndexMatch( + new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); } } } @@ -485,7 +491,7 @@ break; } - return aResult; + return aResult == null ? EMPTY_INDEX_MATCH_ARRAY : aResult; } /** @@ -599,8 +605,8 @@ * @param theMap Map containing Sets of ValueLocator objects as values * @return a new array of IndexMatch objects */ - private final IndexMatch[] getIndexMatchArray(Map theMap) { - IndexMatch[] aResult = null; + private IndexMatch[] getIndexMatchArray(Map theMap) { + IndexMatch[] aResult; // count results to size result array if (theMap != null) { @@ -624,7 +630,7 @@ * @param theSecondMap Map containing Sets of ValueLocator objects as values * @return a new array of IndexMatch objects */ - private final IndexMatch[] getIndexMatchArray(Map theFirstMap, Map theSecondMap) { + private IndexMatch[] getIndexMatchArray(Map theFirstMap, Map theSecondMap) { int aLocatorCount = 0; // count results to size result array @@ -653,7 +659,7 @@ * @param theExcludeFlag filtering is exclude if true, include if false * @return a new array of IndexMatch objects */ - private final IndexMatch[] getIndexMatchArray(Map theMap, Object[] theFilterList, boolean theExcludeFlag) { + private IndexMatch[] getIndexMatchArray(Map theMap, Object[] theFilterList, boolean theExcludeFlag) { if (theMap == null) { return new IndexMatch[0]; } @@ -662,7 +668,7 @@ Iterator aValueIterator; int aLocatorCount = 0; - aValueIterator = theMap.values().iterator(); + aValueIterator = theMap.entrySet().iterator(); // iterate over the values adding locators for each matched to result while (aValueIterator.hasNext()) { @@ -708,7 +714,8 @@ * @param theExcludeFlag filtering is exclude if true, include if false * @return a new array of IndexMatch objects */ - private final IndexMatch[] getIndexMatchArray(Map theFirstMap, Map theFilterThisMap, Map theThirdMap, Object[] theFilterList, boolean theExcludeFlag) { + private IndexMatch[] getIndexMatchArray(Map theFirstMap, Map theFilterThisMap, Map theThirdMap, + Object[] theFilterList, boolean theExcludeFlag) { if (theFilterThisMap == null) { return getIndexMatchArray(theFirstMap, theThirdMap); } @@ -723,7 +730,7 @@ // qualify the results for filter operation // adding those qualifying to aResultCollection and counting filtered results - aValueIterator = theFirstMap.values().iterator(); + aValueIterator = theFirstMap.entrySet().iterator(); // iterate over the values adding locators for each matched to result while (aValueIterator.hasNext()) { @@ -930,7 +937,7 @@ * @param theValue String from which to derive the value * @return an Object representing the value extracted from theValue */ - private final Object getTypedValue(String theValue) { + private Object getTypedValue(String theValue) { if (itsValueType != STRING && itsValueType != TRIMMED) { theValue = theValue.trim(); } else { @@ -992,7 +999,7 @@ * @param theValue Object to return next value of * @return an Object representing the next value above specified value or null if theValue is already at maximum for type */ - private final Object getNextValueOf(Object theValue) { + private Object getNextValueOf(Object theValue) { return getNextValueOf(theValue, itsValueType); } @@ -1005,7 +1012,7 @@ * @param theType type of Object to return * @return an Object representing the next value above specified value or null if theValue is already at maximum for type */ - private final Object getNextValueOf(Object theValue, int theType) { + private Object getNextValueOf(Object theValue, int theType) { if (theValue instanceof EmptyValue) { return "\0"; } @@ -1095,7 +1102,7 @@ int aCount = 0; if (theMap != null) { - Iterator aValueIterator = theMap.values().iterator(); + Iterator aValueIterator = theMap.entrySet().iterator(); // iterate over the values adding locators for each to result // no need to filter while iterating while (aValueIterator.hasNext()) { @@ -1120,7 +1127,7 @@ return theStartIndex; } - Iterator aValueIterator = theMap.values().iterator(); + Iterator aValueIterator = theMap.entrySet().iterator(); // iterate over the values adding locators for each to result // no need to filter while iterating while (aValueIterator.hasNext()) { @@ -1128,7 +1135,8 @@ Iterator aLocatorIterator = ((TreeSet) ((Map.Entry) aValueIterator.next()).getValue()).iterator(); for (; aLocatorIterator.hasNext(); ++theStartIndex) { ValueLocator aLocator = (ValueLocator) aLocatorIterator.next(); - theArray[theStartIndex] = new IndexMatch(new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); + theArray[theStartIndex] = new IndexMatch( + new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); } } @@ -1152,7 +1160,8 @@ Iterator aLocatorIterator = theSet.iterator(); for (; aLocatorIterator.hasNext(); ++theStartIndex) { ValueLocator aLocator = (ValueLocator) aLocatorIterator.next(); - theArray[theStartIndex] = new IndexMatch(new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); + theArray[theStartIndex] = new IndexMatch( + new Key(aLocator.getKey()), aLocator.getPosition(), aLocator.getLength(), aLocator.getElementID(), aLocator.getAttributeID()); } return theStartIndex; } @@ -1164,7 +1173,7 @@ * and compare as String values. Any EmptyValue converted * to String is an empty String. */ - private static class EmptyValue extends Object implements Comparable { + private static class EmptyValue implements Comparable { /** * Creates a new object. Modified: xml/xindice/trunk/status.xml URL: http://svn.apache.org/viewcvs/xml/xindice/trunk/status.xml?rev=357079&r1=357078&r2=357079&view=diff ============================================================================== --- xml/xindice/trunk/status.xml (original) +++ xml/xindice/trunk/status.xml Thu Dec 15 14:11:59 2005 @@ -74,6 +74,9 @@ <changes> <release version="1.1b5-dev" date="Dec 15 2005"> + <action dev="VG" type="fix" fixes-bug="37383" due-to="Terry Rosenbaum"> + Fix ClassCastException in MemValueIndexer. + </action> <action dev="VG" type="update"> Make an attempt to lock a database before opening it up. Prevents opening up same database by different processes,