mirror of https://github.com/apache/lucene.git
generics for NamedList: SOLR-107
git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@500050 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8cf4a87acb
commit
dcb98c1eca
|
@ -57,6 +57,9 @@ New Features
|
|||
6. SOLR-117: Limit a field faceting to constraints with a prefix specified
|
||||
by facet.prefix or f.<field>.facet.prefix. (yonik)
|
||||
|
||||
7. SOLR-107: JAVA API: Change NamedList to use Java5 generics
|
||||
and implement Iterable<Map.Entry> (Ryan McKinley via yonik)
|
||||
|
||||
Changes in runtime behavior
|
||||
1. Highlighting using DisMax will only pick up terms from the main
|
||||
user query, not boost or filter queries (klaas).
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.solr.util;
|
|||
import java.util.*;
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
/**
|
||||
* A simple container class for modeling an ordered list of name/value pairs.
|
||||
*
|
||||
|
@ -44,7 +45,7 @@ import java.io.Serializable;
|
|||
* @author yonik
|
||||
* @version $Id$
|
||||
*/
|
||||
public class NamedList implements Cloneable, Serializable {
|
||||
public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry<String,T>> {
|
||||
protected final List nvPairs;
|
||||
|
||||
/** Creates an empty instance */
|
||||
|
@ -81,14 +82,15 @@ public class NamedList implements Cloneable, Serializable {
|
|||
*
|
||||
* @return may be null
|
||||
*/
|
||||
public Object getVal(int idx) {
|
||||
return nvPairs.get((idx << 1) + 1);
|
||||
@SuppressWarnings("unchecked")
|
||||
public T getVal(int idx) {
|
||||
return (T)nvPairs.get((idx << 1) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a name/value pair to the end of the list.
|
||||
*/
|
||||
public void add(String name, Object val) {
|
||||
public void add(String name, T val) {
|
||||
nvPairs.add(name);
|
||||
nvPairs.add(val);
|
||||
}
|
||||
|
@ -102,9 +104,13 @@ public class NamedList implements Cloneable, Serializable {
|
|||
|
||||
/**
|
||||
* Modifies the value of the pair at the specified index.
|
||||
* @return the value that used to be at index
|
||||
*/
|
||||
public void setVal(int idx, Object val) {
|
||||
nvPairs.set((idx<<1)+1, val);
|
||||
public T setVal(int idx, T val) {
|
||||
int index = (idx<<1)+1;
|
||||
T old = (T)nvPairs.get( index );
|
||||
nvPairs.set(index, val);
|
||||
return old;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,7 +142,7 @@ public class NamedList implements Cloneable, Serializable {
|
|||
* @see #indexOf
|
||||
* @see #get(String,int)
|
||||
*/
|
||||
public Object get(String name) {
|
||||
public T get(String name) {
|
||||
return get(name,0);
|
||||
}
|
||||
|
||||
|
@ -147,7 +153,7 @@ public class NamedList implements Cloneable, Serializable {
|
|||
* @return null if not found or if the value stored was null.
|
||||
* @see #indexOf
|
||||
*/
|
||||
public Object get(String name, int start) {
|
||||
public T get(String name, int start) {
|
||||
int sz = size();
|
||||
for (int i=start; i<sz; i++) {
|
||||
String n = getName(i);
|
||||
|
@ -178,18 +184,15 @@ public class NamedList implements Cloneable, Serializable {
|
|||
/**
|
||||
* Iterates over the Map and sequentially adds it's key/value pairs
|
||||
*/
|
||||
public boolean addAll(Map args) {
|
||||
Set eset = args.entrySet();
|
||||
Iterator iter = eset.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)iter.next();
|
||||
add(entry.getKey().toString(), entry.getValue());
|
||||
public boolean addAll(Map<String,T> args) {
|
||||
for( Map.Entry<String, T> entry : args.entrySet() ) {
|
||||
add( entry.getKey(), entry.getValue() );
|
||||
}
|
||||
return args.size()>0;
|
||||
}
|
||||
|
||||
/** Appends the elements of the given NamedList to this one. */
|
||||
public boolean addAll(NamedList nl) {
|
||||
public boolean addAll(NamedList<T> nl) {
|
||||
nvPairs.addAll(nl.nvPairs);
|
||||
return nl.size()>0;
|
||||
}
|
||||
|
@ -203,4 +206,54 @@ public class NamedList implements Cloneable, Serializable {
|
|||
return new NamedList(newList);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Iterable interface
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Support the Iterable interface
|
||||
*/
|
||||
public Iterator<Map.Entry<String,T>> iterator() {
|
||||
|
||||
final NamedList list = this;
|
||||
|
||||
Iterator<Map.Entry<String,T>> iter = new Iterator<Map.Entry<String,T>>() {
|
||||
|
||||
int idx = 0;
|
||||
|
||||
public boolean hasNext() {
|
||||
return idx < list.size();
|
||||
}
|
||||
|
||||
public Map.Entry<String,T> next() {
|
||||
final int index = idx++;
|
||||
Map.Entry<String,T> nv = new Map.Entry<String,T>() {
|
||||
public String getKey() {
|
||||
return list.getName( index );
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public T getValue() {
|
||||
return (T)list.getVal( index );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return getKey()+"="+getValue();
|
||||
}
|
||||
|
||||
public T setValue(T value) {
|
||||
return (T) list.setVal(index, value);
|
||||
}
|
||||
};
|
||||
return nv;
|
||||
}
|
||||
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
};
|
||||
return iter;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue