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,