mirror of https://github.com/apache/lucene.git
SOLR-967: New type-safe constructor for NamedList
git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@746031 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b3b94be1ac
commit
f11377a06c
|
@ -312,8 +312,10 @@ Other Changes
|
||||||
|
|
||||||
18. SOLR-1022: Better "ignored" field in example schema.xml (Peter Wolanin via hossman)
|
18. SOLR-1022: Better "ignored" field in example schema.xml (Peter Wolanin via hossman)
|
||||||
|
|
||||||
Build
|
19. SOLR-967: New type-safe constructor for NamedList (Kay Kay via hossman)
|
||||||
|
|
||||||
|
|
||||||
|
Build
|
||||||
----------------------
|
----------------------
|
||||||
1. SOLR-776: Added in ability to sign artifacts via Ant for releases (gsingers)
|
1. SOLR-776: Added in ability to sign artifacts via Ant for releases (gsingers)
|
||||||
|
|
||||||
|
|
|
@ -57,15 +57,61 @@ public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry
|
||||||
nvPairs = new ArrayList();
|
nvPairs = new ArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a NamedList instance containing the "name,value" pairs contained in the
|
||||||
|
* Entry[].
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Modifying the contents of the Entry[] after calling this constructor may change
|
||||||
|
* the NamedList (in future versions of Solr), but this is not garunteed and should
|
||||||
|
* not be relied upon. To modify the NamedList, refer to {@link #add(String, Object)}
|
||||||
|
* or {@link #remove(String)}.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param nameValuePairs the name value pairs
|
||||||
|
*/
|
||||||
|
public NamedList(Map.Entry<String, ? extends T>[] nameValuePairs) {
|
||||||
|
nvPairs = nameValueMapToList(nameValuePairs);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance backed by an explicitly specified list of
|
* Creates an instance backed by an explicitly specified list of
|
||||||
* pairwise names/values.
|
* pairwise names/values.
|
||||||
*
|
*
|
||||||
* @param nameValuePairs underlying List which should be used to implement a NamedList; modifying this List will affect the NamedList.
|
* <p>
|
||||||
|
* When using this constructor, runtime typesafety is only garunteed if the all
|
||||||
|
* even numbered elements of the input list are of type "T".
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param nameValuePairs underlying List which should be used to implement a NamedList
|
||||||
|
* @deprecated Use {@link #NamedList(java.util.Map.Entry[])} for the NamedList instantiation
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public NamedList(List nameValuePairs) {
|
public NamedList(List nameValuePairs) {
|
||||||
nvPairs=nameValuePairs;
|
nvPairs=nameValuePairs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to serialize Map.Entry<String, ?> to a List in which the even
|
||||||
|
* indexed elements (0,2,4. ..etc) are Strings and odd elements (1,3,5,) are of
|
||||||
|
* the type "T".
|
||||||
|
*
|
||||||
|
* @param nameValuePairs
|
||||||
|
* @return Modified List as per the above description
|
||||||
|
* @deprecated This a temporary placeholder method until the guts of the class
|
||||||
|
* are actually replaced by List<String, ?>.
|
||||||
|
* @see https://issues.apache.org/jira/browse/SOLR-912
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
private List nameValueMapToList(Map.Entry<String, ? extends T>[] nameValuePairs) {
|
||||||
|
List result = new ArrayList();
|
||||||
|
for (Map.Entry<String, ?> ent : nameValuePairs) {
|
||||||
|
result.add(ent.getKey());
|
||||||
|
result.add(ent.getValue());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/** The total number of name/value pairs */
|
/** The total number of name/value pairs */
|
||||||
public int size() {
|
public int size() {
|
||||||
|
@ -211,6 +257,43 @@ public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Helper class implementing Map.Entry<String, T> to store the key-value
|
||||||
|
* relationship in NamedList (the keys of which are String-s)
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public static final class NamedListEntry<T> implements Map.Entry<String, T> {
|
||||||
|
|
||||||
|
public NamedListEntry() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public NamedListEntry(String _key, T _value) {
|
||||||
|
key = _key;
|
||||||
|
value = _value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T setValue(T _value) {
|
||||||
|
T oldValue = value;
|
||||||
|
value = _value;
|
||||||
|
return oldValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
private T value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates over the Map and sequentially adds it's key/value pairs
|
* Iterates over the Map and sequentially adds it's key/value pairs
|
||||||
|
|
|
@ -49,9 +49,14 @@ public class SimpleOrderedMap<T> extends NamedList<T> {
|
||||||
*
|
*
|
||||||
* @param nameValuePairs underlying List which should be used to implement a SimpleOrderedMap; modifying this List will affect the SimpleOrderedMap.
|
* @param nameValuePairs underlying List which should be used to implement a SimpleOrderedMap; modifying this List will affect the SimpleOrderedMap.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public SimpleOrderedMap(List nameValuePairs) {
|
public SimpleOrderedMap(List nameValuePairs) {
|
||||||
super(nameValuePairs);
|
super(nameValuePairs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SimpleOrderedMap(Map.Entry<String, T>[] nameValuePairs) {
|
||||||
|
super(nameValuePairs);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SimpleOrderedMap<T> clone() {
|
public SimpleOrderedMap<T> clone() {
|
||||||
|
|
|
@ -108,7 +108,7 @@ public class DebugComponent extends SearchComponent
|
||||||
NamedList info = null;
|
NamedList info = null;
|
||||||
NamedList explain = new SimpleOrderedMap();
|
NamedList explain = new SimpleOrderedMap();
|
||||||
|
|
||||||
Object[] arr = new Object[rb.resultIds.size() * 2];
|
Map.Entry<String, Object>[] arr = new NamedList.NamedListEntry[rb.resultIds.size()];
|
||||||
|
|
||||||
for (ShardRequest sreq : rb.finished) {
|
for (ShardRequest sreq : rb.finished) {
|
||||||
if ((sreq.purpose & ShardRequest.PURPOSE_GET_DEBUG) == 0) continue;
|
if ((sreq.purpose & ShardRequest.PURPOSE_GET_DEBUG) == 0) continue;
|
||||||
|
@ -123,13 +123,12 @@ public class DebugComponent extends SearchComponent
|
||||||
// TODO: lookup won't work for non-string ids... String vs Float
|
// TODO: lookup won't work for non-string ids... String vs Float
|
||||||
ShardDoc sdoc = rb.resultIds.get(id);
|
ShardDoc sdoc = rb.resultIds.get(id);
|
||||||
int idx = sdoc.positionInResponse;
|
int idx = sdoc.positionInResponse;
|
||||||
arr[idx<<1] = id;
|
arr[idx] = new NamedList.NamedListEntry<Object>( id, sexplain.getVal(i));
|
||||||
arr[(idx<<1)+1] = sexplain.getVal(i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
explain = HighlightComponent.removeNulls(new SimpleOrderedMap(Arrays.asList(arr)));
|
explain = HighlightComponent.removeNulls(new SimpleOrderedMap(arr));
|
||||||
|
|
||||||
if (info == null) {
|
if (info == null) {
|
||||||
info = new SimpleOrderedMap();
|
info = new SimpleOrderedMap();
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.apache.solr.request.SolrQueryRequest;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO!
|
* TODO!
|
||||||
|
@ -115,7 +116,7 @@ public class HighlightComponent extends SearchComponent
|
||||||
if (rb.doHighlights && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
|
if (rb.doHighlights && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
|
||||||
NamedList hlResult = new SimpleOrderedMap();
|
NamedList hlResult = new SimpleOrderedMap();
|
||||||
|
|
||||||
Object[] arr = new Object[rb.resultIds.size() * 2];
|
Map.Entry<String, Object>[] arr = new NamedList.NamedListEntry[rb.resultIds.size()];
|
||||||
|
|
||||||
// TODO: make a generic routine to do automatic merging of id keyed data
|
// TODO: make a generic routine to do automatic merging of id keyed data
|
||||||
for (ShardRequest sreq : rb.finished) {
|
for (ShardRequest sreq : rb.finished) {
|
||||||
|
@ -126,14 +127,13 @@ public class HighlightComponent extends SearchComponent
|
||||||
String id = hl.getName(i);
|
String id = hl.getName(i);
|
||||||
ShardDoc sdoc = rb.resultIds.get(id);
|
ShardDoc sdoc = rb.resultIds.get(id);
|
||||||
int idx = sdoc.positionInResponse;
|
int idx = sdoc.positionInResponse;
|
||||||
arr[idx<<1] = id;
|
arr[idx] = new NamedList.NamedListEntry<Object>(id, hl.getVal(i));
|
||||||
arr[(idx<<1)+1] = hl.getVal(i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove nulls in case not all docs were able to be retrieved
|
// remove nulls in case not all docs were able to be retrieved
|
||||||
rb.rsp.add("highlighting", removeNulls(new SimpleOrderedMap(Arrays.asList(arr))));
|
rb.rsp.add("highlighting", removeNulls(new SimpleOrderedMap(arr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
package org.apache.solr.util;
|
package org.apache.solr.util;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is scheduled for deletion. Please update your code to the moved package.
|
* This class is scheduled for deletion. Please update your code to the moved package.
|
||||||
|
@ -30,7 +31,12 @@ public class NamedList<T> extends org.apache.solr.common.util.NamedList<T> {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public NamedList(List nameValuePairs) {
|
public NamedList(List nameValuePairs) {
|
||||||
super(nameValuePairs);
|
super(nameValuePairs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NamedList(Map.Entry<String, T>[] nameValuePairs) {
|
||||||
|
super(nameValuePairs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package org.apache.solr.util;
|
package org.apache.solr.util;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is scheduled for deletion. Please update your code to the moved package.
|
* This class is scheduled for deletion. Please update your code to the moved package.
|
||||||
|
@ -30,7 +31,12 @@ public class SimpleOrderedMap<T> extends org.apache.solr.common.util.SimpleOrder
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public SimpleOrderedMap(List nameValuePairs) {
|
public SimpleOrderedMap(List nameValuePairs) {
|
||||||
super(nameValuePairs);
|
super(nameValuePairs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SimpleOrderedMap(Map.Entry<String, T> [] nameValuePairs) {
|
||||||
|
super(nameValuePairs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.apache.solr.request.SolrQueryResponse;
|
||||||
import org.apache.solr.schema.IndexSchema;
|
import org.apache.solr.schema.IndexSchema;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
import org.apache.solr.common.util.NamedList.NamedListEntry;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
@ -47,8 +48,10 @@ import java.io.IOException;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@ -554,8 +557,14 @@ public class TestHarness {
|
||||||
return new LocalSolrQueryRequest(TestHarness.this.getCore(),
|
return new LocalSolrQueryRequest(TestHarness.this.getCore(),
|
||||||
q[0], qtype, start, limit, args);
|
q[0], qtype, start, limit, args);
|
||||||
}
|
}
|
||||||
|
if (q.length%2 != 0) {
|
||||||
return new LocalSolrQueryRequest(TestHarness.this.getCore(),new NamedList(Arrays.asList(q)));
|
throw new RuntimeException("The length of the string array (query arguments) needs to be even");
|
||||||
|
}
|
||||||
|
Map.Entry<String, String> [] entries = new NamedListEntry[q.length / 2];
|
||||||
|
for (int i = 0; i < q.length; i += 2) {
|
||||||
|
entries[i/2] = new NamedListEntry<String>(q[i], q[i+1]);
|
||||||
|
}
|
||||||
|
return new LocalSolrQueryRequest(TestHarness.this.getCore(), new NamedList(entries));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue