You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/02/09 10:36:03 UTC

svn commit: r1068809 [36/36] - in /lucene/dev/branches/docvalues: ./ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/.idea/copyright/ dev-tools/idea/lucene/ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/queryparser/ dev-tools...

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java Wed Feb  9 09:35:27 2011
@@ -111,6 +111,7 @@ public abstract class AbstractSolrTestCa
   public static Logger log = LoggerFactory.getLogger(AbstractSolrTestCase.class);
 
   private String factoryProp;
+  @Override
   public void setUp() throws Exception {
     super.setUp();
     log.info("####SETUP_START " + getName());
@@ -170,6 +171,7 @@ public abstract class AbstractSolrTestCa
    * to delete dataDir, unless the system property "solr.test.leavedatadir"
    * is set.
    */
+  @Override
   public void tearDown() throws Exception {
     log.info("####TEARDOWN_START " + getName());
     if (factoryProp == null) {
@@ -403,6 +405,7 @@ public abstract class AbstractSolrTestCa
   /** Neccessary to make method signatures un-ambiguous */
   public static class Doc {
     public String xml;
+    @Override
     public String toString() { return xml; }
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/TestNumberUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/TestNumberUtils.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/TestNumberUtils.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/TestNumberUtils.java Wed Feb  9 09:35:27 2011
@@ -182,72 +182,88 @@ abstract class Converter {
 }
 
 class Int2Int extends Converter {
+  @Override
   public String toInternal(String val) {
     return Integer.toString(Integer.parseInt(val));
   }
+  @Override
   public String toExternal(String val) {
     return Integer.toString(Integer.parseInt(val));
   }
 }
 
 class SortInt extends Converter {
+  @Override
   public String toInternal(String val) {
     return NumberUtils.int2sortableStr(val);
   }
+  @Override
   public String toExternal(String val) {
     return NumberUtils.SortableStr2int(val);
   }
 }
 
 class SortLong extends Converter {
+  @Override
   public String toInternal(String val) {
     return NumberUtils.long2sortableStr(val);
   }
+  @Override
   public String toExternal(String val) {
     return NumberUtils.SortableStr2long(val);
   }
 }
 
 class Float2Float extends Converter {
+  @Override
   public String toInternal(String val) {
     return Float.toString(Float.parseFloat(val));
   }
+  @Override
   public String toExternal(String val) {
     return Float.toString(Float.parseFloat(val));
   }
 }
 
 class SortFloat extends Converter {
+  @Override
   public String toInternal(String val) {
     return NumberUtils.float2sortableStr(val);
   }
+  @Override
   public String toExternal(String val) {
     return NumberUtils.SortableStr2floatStr(val);
   }
 }
 
 class SortDouble extends Converter {
+  @Override
   public String toInternal(String val) {
     return NumberUtils.double2sortableStr(val);
   }
+  @Override
   public String toExternal(String val) {
     return NumberUtils.SortableStr2doubleStr(val);
   }
 }
 
 class Base100S extends Converter {
+  @Override
   public String toInternal(String val) {
     return BCDUtils.base10toBase100SortableInt(val);
   }
+  @Override
   public String toExternal(String val) {
     return BCDUtils.base100SortableIntToBase10(val);
   }
 }
 
 class Base10kS extends Converter {
+  @Override
   public String toInternal(String val) {
     return BCDUtils.base10toBase10kSortableInt(val);
   }
+  @Override
   public String toExternal(String val) {
     return BCDUtils.base10kSortableIntToBase10(val);
   }

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java Wed Feb  9 09:35:27 2011
@@ -1,3 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file 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.
+ */
+
 package org.apache.solr.velocity;
 
 import org.apache.solr.response.SolrQueryResponse;
@@ -9,7 +26,9 @@ import java.io.StringWriter;
 import java.io.IOException;
 
 public class VelocityResponseWriterTest extends AbstractSolrTestCase {
+  @Override
   public String getSchemaFile() { return "schema.xml"; }
+  @Override
   public String getSolrConfigFile() { return "solrconfig.xml"; }
 
 

Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/LogLevelSelection.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/LogLevelSelection.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/LogLevelSelection.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/LogLevelSelection.java Wed Feb  9 09:35:27 2011
@@ -36,6 +36,7 @@ import java.util.logging.Logger;
  * @since solr 1.3
  */
 public final class LogLevelSelection extends HttpServlet {
+  @Override
   public void init() throws ServletException {
   }
 
@@ -43,6 +44,7 @@ public final class LogLevelSelection ext
    * Processes an HTTP GET request and changes the logging level as
    * specified.
    */
+  @Override
   public void doGet(HttpServletRequest request,
                     HttpServletResponse response)
           throws IOException, ServletException {
@@ -147,6 +149,7 @@ public final class LogLevelSelection ext
   }
 
 
+  @Override
   public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
           throws IOException, ServletException {
@@ -259,6 +262,7 @@ public final class LogLevelSelection ext
       return name.compareTo(((LogWrapper) other).name);
     }
 
+    @Override
     public boolean equals(Object obj) {
       if (this == obj)
         return true;
@@ -275,6 +279,7 @@ public final class LogLevelSelection ext
       return true;
     }
     
+    @Override
     public int hashCode() {
       final int prime = 31;
       int result = 1;

Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java Wed Feb  9 09:35:27 2011
@@ -65,7 +65,7 @@ public class SolrDispatchFilter implemen
 
   public SolrDispatchFilter() {
     try {
-      adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new ByteArrayInputStream("<root/>".getBytes()),"") );
+      adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new ByteArrayInputStream("<root/>".getBytes("UTF-8")),"") );
     } catch (Exception e) {
       //unlikely
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
@@ -315,7 +315,9 @@ public class SolrDispatchFilter implemen
       sendError((HttpServletResponse) response, solrRsp.getException());
     } else {
       // Now write it out
-      response.setContentType(responseWriter.getContentType(solrReq, solrRsp));
+      final String ct = responseWriter.getContentType(solrReq, solrRsp);
+      // don't call setContentType on null
+      if (null != ct) response.setContentType(ct); 
       if (Method.HEAD != reqMethod) {
         if (responseWriter instanceof BinaryQueryResponseWriter) {
           BinaryQueryResponseWriter binWriter = (BinaryQueryResponseWriter) responseWriter;

Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.servlet.cache;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.Collections;
 import java.util.Map;
 import java.util.WeakHashMap;
@@ -75,11 +76,15 @@ public final class HttpCacheHeaderUtil {
       if (currentIndexVersion != indexVersionCache) {
         indexVersionCache=currentIndexVersion;
         
-        etagCache = "\""
-          + new String(Base64.encodeBase64((Long.toHexString
-                                            (Long.reverse(indexVersionCache))
-                                            + etagSeed).getBytes()))
-          + "\"";
+        try {
+          etagCache = "\""
+           + new String(Base64.encodeBase64((Long.toHexString
+                                             (Long.reverse(indexVersionCache))
+                                             + etagSeed).getBytes()), "US-ASCII")
+           + "\"";
+        } catch (UnsupportedEncodingException e) {
+          throw new RuntimeException(e); // may not happen
+        }
       }
       
       return etagCache;
@@ -95,7 +100,7 @@ public final class HttpCacheHeaderUtil {
   public static String calcEtag(final SolrQueryRequest solrReq) {
     final SolrCore core = solrReq.getCore();
     final long currentIndexVersion
-      = solrReq.getSearcher().getReader().getVersion();
+      = solrReq.getSearcher().getIndexReader().getVersion();
 
     EtagCacheVal etagCache = etagCoreCache.get(core);
     if (null == etagCache) {
@@ -152,7 +157,7 @@ public final class HttpCacheHeaderUtil {
       // assume default, change if needed (getOpenTime() should be fast)
       lastMod =
         LastModFrom.DIRLASTMOD == lastModFrom
-        ? IndexReader.lastModified(searcher.getReader().directory())
+        ? IndexReader.lastModified(searcher.getIndexReader().directory())
         : searcher.getOpenTime();
     } catch (IOException e) {
       // we're pretty freaking screwed if this happens

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp Wed Feb  9 09:35:27 2011
@@ -24,6 +24,7 @@
                  org.apache.lucene.analysis.CharReader,
                  org.apache.lucene.analysis.CharStream,
                  org.apache.lucene.analysis.tokenattributes.*,
+                 org.apache.lucene.util.AttributeReflector,
                  org.apache.solr.analysis.CharFilterFactory,
                  org.apache.solr.analysis.TokenFilterFactory,
                  org.apache.solr.analysis.TokenizerChain,
@@ -31,7 +32,8 @@
                  org.apache.solr.schema.FieldType,
                  org.apache.solr.schema.SchemaField,
                  org.apache.solr.common.util.XML,
-                 javax.servlet.jsp.JspWriter,java.io.IOException
+                 javax.servlet.jsp.JspWriter,java.io.IOException,
+                 org.apache.noggit.CharArr
                 "%>
 <%@ page import="java.io.Reader"%>
 <%@ page import="java.io.StringReader"%>
@@ -39,8 +41,6 @@
 <%@ page import="java.math.BigInteger" %>
 
 <%-- $Id$ --%>
-<%-- $Source: /cvs/main/searching/org.apache.solrolarServer/resources/admin/analysis.jsp,v $ --%>
-<%-- $Name:  $ --%>
 
 <%@include file="header.jsp" %>
 
@@ -71,19 +71,19 @@
 <table>
 <tr>
   <td>
-	<strong>Field
+  <strong>Field
           <select name="nt">
-	  <option <%= nt.equals("name") ? "selected=\"selected\"" : "" %> >name</option>
-	  <option <%= nt.equals("type") ? "selected=\"selected\"" : "" %>>type</option>
+    <option <%= nt.equals("name") ? "selected=\"selected\"" : "" %> >name</option>
+    <option <%= nt.equals("type") ? "selected=\"selected\"" : "" %>>type</option>
           </select></strong>
   </td>
   <td>
-	<input class="std" name="name" type="text" value="<% XML.escapeCharData(name, out); %>">
+  <input class="std" name="name" type="text" value="<% XML.escapeCharData(name, out); %>">
   </td>
 </tr>
 <tr>
   <td>
-	<strong>Field value (Index)</strong>
+  <strong>Field value (Index)</strong>
   <br/>
   verbose output
   <input name="verbose" type="checkbox"
@@ -94,19 +94,19 @@
      <%= highlight ? "checked=\"true\"" : "" %> >
   </td>
   <td>
-	<textarea class="std" rows="8" cols="70" name="val"><% XML.escapeCharData(val,out); %></textarea>
+  <textarea class="std" rows="8" cols="70" name="val"><% XML.escapeCharData(val,out); %></textarea>
   </td>
 </tr>
 <tr>
   <td>
-	<strong>Field value (Query)</strong>
+  <strong>Field value (Query)</strong>
   <br/>
   verbose output
   <input name="qverbose" type="checkbox"
      <%= qverbose ? "checked=\"true\"" : "" %> >
   </td>
   <td>
-	<textarea class="std" rows="1" cols="70" name="qval"><% XML.escapeCharData(qval,out); %></textarea>
+  <textarea class="std" rows="1" cols="70" name="qval"><% XML.escapeCharData(qval,out); %></textarea>
   </td>
 </tr>
 <tr>
@@ -115,7 +115,7 @@
   </td>
 
   <td>
-	<input class="stdbutton" type="submit" value="analyze">
+  <input class="stdbutton" type="submit" value="analyze">
   </td>
 
 </tr>
@@ -148,24 +148,28 @@
   }
 
   if (field!=null) {
-    HashSet<Tok> matches = null;
+    HashSet<BytesRef> matches = null;
     if (qval!="" && highlight) {
       Reader reader = new StringReader(qval);
       Analyzer analyzer =  field.getType().getQueryAnalyzer();
       TokenStream tstream = analyzer.reusableTokenStream(field.getName(),reader);
+      TermToBytesRefAttribute bytesAtt = tstream.getAttribute(TermToBytesRefAttribute.class);
       tstream.reset();
-      List<AttributeSource> tokens = getTokens(tstream);
-      matches = new HashSet<Tok>();
-      for (AttributeSource t : tokens) { matches.add( new Tok(t,0)); }
+      matches = new HashSet<BytesRef>();
+      while (tstream.incrementToken()) {
+        final BytesRef bytes = new BytesRef();
+        bytesAtt.toBytesRef(bytes);
+        matches.add(bytes);
+      }
     }
 
     if (val!="") {
       out.println("<h3>Index Analyzer</h3>");
-      doAnalyzer(out, field, val, false, verbose,matches);
+      doAnalyzer(out, field, val, false, verbose, matches);
     }
     if (qval!="") {
       out.println("<h3>Query Analyzer</h3>");
-      doAnalyzer(out, field, qval, true, qverbose,null);
+      doAnalyzer(out, field, qval, true, qverbose, null);
     }
   }
 
@@ -177,7 +181,7 @@
 
 
 <%!
-  private static void doAnalyzer(JspWriter out, SchemaField field, String val, boolean queryAnalyser, boolean verbose, Set<Tok> match) throws Exception {
+  private static void doAnalyzer(JspWriter out, SchemaField field, String val, boolean queryAnalyser, boolean verbose, Set<BytesRef> match) throws Exception {
 
     FieldType ft = field.getType();
      Analyzer analyzer = queryAnalyser ?
@@ -240,7 +244,7 @@
        tstream.reset();
        List<AttributeSource> tokens = getTokens(tstream);
        if (verbose) {
-         writeHeader(out, analyzer.getClass(), new HashMap<String,String>());
+         writeHeader(out, analyzer.getClass(), Collections.EMPTY_MAP);
        }
        writeTokens(out, tokens, ft, verbose, match);
      }
@@ -249,52 +253,59 @@
 
   static List<AttributeSource> getTokens(TokenStream tstream) throws IOException {
     List<AttributeSource> tokens = new ArrayList<AttributeSource>();
-   
-    while (true) {
-      if (!tstream.incrementToken())
-        break;
-      else {
-      	tokens.add(tstream.cloneAttributes());
-      }
+    tstream.reset();
+    while (tstream.incrementToken()) {
+      tokens.add(tstream.cloneAttributes());
     }
     return tokens;
   }
 
-
-  private static class Tok {
-    AttributeSource token;
-    int pos;
-    Tok(AttributeSource token, int pos) {
-      this.token=token;
-      this.pos=pos;
-    }
-
-    public boolean equals(Object o) {
-      return ((Tok)o).token.toString().equals(token.toString());
-    }
-    public int hashCode() {
-      return token.toString().hashCode();
-    }
-    public String toString() {
-      return token.toString();
+  private static class ReflectItem {
+    final Class<? extends Attribute> attClass;
+    final String key;
+    final Object value;
+    
+    ReflectItem(Class<? extends Attribute> attClass, String key, Object value) {
+      this.attClass = attClass;
+      this.key = key;
+      this.value = value;
     }
-    public String toPrintableString() {
-      TermToBytesRefAttribute att = token.addAttribute(TermToBytesRefAttribute.class);
-      if (att instanceof CharTermAttribute)
-        return att.toString();
-      else {
-        BytesRef bytes = new BytesRef();
-        att.toBytesRef(bytes);
-        return bytes.toString();
-      }
+  }
+  
+  private static class Tok {
+    final BytesRef bytes = new BytesRef();
+    final String rawText, text;
+    final int pos;
+    final List<ReflectItem> reflected = new ArrayList<ReflectItem>();
+    
+    Tok(AttributeSource token, int pos, FieldType ft) {
+      this.pos = pos;
+      token.getAttribute(TermToBytesRefAttribute.class).toBytesRef(bytes);
+      rawText = (token.hasAttribute(CharTermAttribute.class)) ?
+        token.getAttribute(CharTermAttribute.class).toString() : null;
+      final CharArr textBuf = new CharArr(bytes.length);
+      ft.indexedToReadable(bytes, textBuf);
+      text = textBuf.toString();
+      token.reflectWith(new AttributeReflector() {
+        public void reflect(Class<? extends Attribute> attClass, String key, Object value) {
+          // leave out position and raw term
+          if (TermToBytesRefAttribute.class.isAssignableFrom(attClass))
+            return;
+          if (CharTermAttribute.class.isAssignableFrom(attClass))
+            return;
+          if (PositionIncrementAttribute.class.isAssignableFrom(attClass))
+            return;
+          reflected.add(new ReflectItem(attClass, key, value));
+        }
+      });
     }
   }
 
-  private static interface ToStr {
-    public String toStr(Object o);
+  private static interface TokToStr {
+    public String toStr(Tok o);
   }
 
-  private static void printRow(JspWriter out, String header, List[] arrLst, ToStr converter, boolean multival, boolean verbose, Set<Tok> match) throws IOException {
+  private static void printRow(JspWriter out, String header, String headerTitle, List<Tok>[] arrLst, TokToStr converter, boolean multival, boolean verbose, Set<BytesRef> match) throws IOException {
     // find the maximum number of terms for any position
     int maxSz=1;
     if (multival) {
@@ -308,7 +319,13 @@
       out.println("<tr>");
       if (idx==0 && verbose) {
         if (header != null) {
-          out.print("<th NOWRAP rowspan=\""+maxSz+"\">");
+          out.print("<th NOWRAP rowspan=\""+maxSz+"\"");
+          if (headerTitle != null) {
+            out.print(" title=\"");
+            XML.escapeCharData(headerTitle,out);
+            out.print("\"");
+          }
+          out.print(">");
           XML.escapeCharData(header,out);
           out.println("</th>");
         }
@@ -317,7 +334,7 @@
       for (int posIndex=0; posIndex<arrLst.length; posIndex++) {
         List<Tok> lst = arrLst[posIndex];
         if (lst.size() <= idx) continue;
-        if (match!=null && match.contains(lst.get(idx))) {
+        if (match!=null && match.contains(lst.get(idx).bytes)) {
           out.print("<td class=\"highlight\"");
         } else {
           out.print("<td class=\"debugdata\"");
@@ -340,15 +357,6 @@
 
   }
 
-  static String isPayloadString( Payload p ) {
-  	String sp = new String( p.getData() );
-	for( int i=0; i < sp.length(); i++ ) {
-	if( !Character.isDefined( sp.charAt(i) ) || Character.isISOControl( sp.charAt(i) ) )
-	  return "";
-	}
-	return "(" + sp + ")";
-  }
-
   static void writeHeader(JspWriter out, Class clazz, Map<String,String> args) throws IOException {
     out.print("<h4>");
     out.print(clazz.getName());
@@ -359,137 +367,93 @@
 
 
   // readable, raw, pos, type, start/end
-  static void writeTokens(JspWriter out, List<AttributeSource> tokens, final FieldType ft, boolean verbose, Set<Tok> match) throws IOException {
+  static void writeTokens(JspWriter out, List<AttributeSource> tokens, final FieldType ft, boolean verbose, Set<BytesRef> match) throws IOException {
 
     // Use a map to tell what tokens are in what positions
     // because some tokenizers/filters may do funky stuff with
     // very large increments, or negative increments.
     HashMap<Integer,List<Tok>> map = new HashMap<Integer,List<Tok>>();
     boolean needRaw=false;
-    int pos=0;
+    int pos=0, reflectionCount = -1;
     for (AttributeSource t : tokens) {
-      if (!t.toString().equals(ft.indexedToReadable(t.toString()))) {
-        needRaw=true;
-      }
-
       pos += t.addAttribute(PositionIncrementAttribute.class).getPositionIncrement();
       List lst = map.get(pos);
       if (lst==null) {
         lst = new ArrayList(1);
         map.put(pos,lst);
       }
-      Tok tok = new Tok(t,pos);
+      Tok tok = new Tok(t,pos,ft);
+      // sanity check
+      if (reflectionCount < 0) {
+        reflectionCount = tok.reflected.size();
+      } else {
+        if (reflectionCount != tok.reflected.size())
+          throw new RuntimeException("Should not happen: Number of reflected entries differs for position=" + pos);
+      }
+      if (tok.rawText != null && !tok.text.equals(tok.rawText)) {
+        needRaw=true;
+      }
       lst.add(tok);
     }
 
     List<Tok>[] arr = (List<Tok>[])map.values().toArray(new ArrayList[map.size()]);
 
-    /* Jetty 6.1.3 miscompiles this generics version...
-    Arrays.sort(arr, new Comparator<List<Tok>>() {
-      public int compare(List<Tok> toks, List<Tok> toks1) {
-        return toks.get(0).pos - toks1.get(0).pos;
-      }
-    }
-    */
-
+    // Jetty 6.1.3 miscompiles a generics-enabled version..., without generics:
     Arrays.sort(arr, new Comparator() {
       public int compare(Object toks, Object toks1) {
         return ((List<Tok>)toks).get(0).pos - ((List<Tok>)toks1).get(0).pos;
       }
-    }
-
-
-    );
+    });
 
     out.println("<table width=\"auto\" class=\"analysis\" border=\"1\">");
 
     if (verbose) {
-      printRow(out,"term position", arr, new ToStr() {
-        public String toStr(Object o) {
-          return Integer.toString(((Tok)o).pos);
+      printRow(out, "position", "calculated from " + PositionIncrementAttribute.class.getName(), arr, new TokToStr() {
+        public String toStr(Tok t) {
+          return Integer.toString(t.pos);
         }
-      }
-              ,false
-              ,verbose
-              ,null);
-    }
-
-
-    printRow(out,"term text", arr, new ToStr() {
-      public String toStr(Object o) {
-        return ft.indexedToReadable( ((Tok)o).toPrintableString() );
-      }
+      },false,verbose,null);
     }
-            ,true
-            ,verbose
-            ,match
-   );
 
-    if (needRaw) {
-      printRow(out,"raw text", arr, new ToStr() {
-        public String toStr(Object o) {
-          // page is UTF-8, so anything goes.
-          return ((Tok)o).toPrintableString();
-        }
+    printRow(out, "term text", "indexedToReadable applied to " + TermToBytesRefAttribute.class.getName(), arr, new TokToStr() {
+      public String toStr(Tok t) {
+        return t.text;
       }
-              ,true
-              ,verbose
-              ,match
-      );
-    }
+    },true,verbose,match);
 
     if (verbose) {
-      printRow(out,"term type", arr, new ToStr() {
-        public String toStr(Object o) {
-          String tt =  ((Tok)o).token.addAttribute(TypeAttribute.class).type();
-          if (tt == null) {
-             return "null";
-          } else {
-             return tt;
+      if (needRaw) {
+        printRow(out, "raw text", CharTermAttribute.class.getName(), arr, new TokToStr() {
+          public String toStr(Tok t) {
+            // page is UTF-8, so anything goes.
+            return (t.rawText == null) ? "" : t.rawText;
           }
-        }
+        },true,verbose,match);
       }
-              ,true
-              ,verbose,
-              null
-      );
-    }
-
-    if (verbose) {
-      printRow(out,"source start,end", arr, new ToStr() {
-        public String toStr(Object o) {
-          AttributeSource t = ((Tok)o).token;
-          return Integer.toString(t.addAttribute(OffsetAttribute.class).startOffset()) + ',' + t.addAttribute(OffsetAttribute.class).endOffset() ;
+      
+      printRow(out, "raw bytes", TermToBytesRefAttribute.class.getName(), arr, new TokToStr() {
+        public String toStr(Tok t) {
+          return t.bytes.toString();
         }
-      }
-              ,true
-              ,verbose
-              ,null
-      );
-    }
+      },true,verbose,match);
 
-    if (verbose) {
-      printRow(out,"payload", arr, new ToStr() {
-        public String toStr(Object o) {
-          AttributeSource t = ((Tok)o).token;
-          Payload p = t.addAttribute(PayloadAttribute.class).getPayload();
-          if( null != p ) {
-            BigInteger bi = new BigInteger( p.getData() );
-            String ret = bi.toString( 16 );
-            if (ret.length() % 2 != 0) {
-              // Pad with 0
-              ret = "0"+ret;
+      for (int att=0; att < reflectionCount; att++) {
+        final ReflectItem item0 = arr[0].get(0).reflected.get(att);
+        final int i = att;
+        printRow(out, item0.key, item0.attClass.getName(), arr, new TokToStr() {
+          public String toStr(Tok t) {
+            final ReflectItem item = t.reflected.get(i);
+            if (item0.attClass != item.attClass || !item0.key.equals(item.key))
+              throw new RuntimeException("Should not happen: attribute types suddenly change at position=" + t.pos);
+            if (item.value instanceof Payload) {
+              final Payload p = (Payload) item.value;
+              return new BytesRef(p.getData()).toString();
+            } else {
+              return (item.value != null) ? item.value.toString() : "";
             }
-            ret += isPayloadString( p );
-            return ret;
           }
-          return "";			
-        }
+        },true,verbose, null);
       }
-              ,true
-              ,verbose
-              ,null
-      );
     }
     
     out.println("</table>");

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/index.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/index.jsp?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/index.jsp (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/index.jsp Wed Feb  9 09:35:27 2011
@@ -39,10 +39,10 @@
   </td>
   <td>
     <% if (null != core.getSchemaResource()) { %>
-    [<a href="file/?file=<%=core.getSchemaResource()%>">Schema</a>]
+    [<a href="file/?contentType=text/xml;charset=utf-8&file=<%=core.getSchemaResource()%>">Schema</a>]
     <% }
        if (null != core.getConfigResource()) { %>
-    [<a href="file/?file=<%=core.getConfigResource()%>">Config</a>]
+    [<a href="file/?contentType=text/xml;charset=utf-8&file=<%=core.getConfigResource()%>">Config</a>]
     <% } %>
     [<a href="analysis.jsp?highlight=on">Analysis</a>]
     [<a href="schema.jsp">Schema Browser</a>] <%if(replicationhandler){%>[<a href="replication/index.jsp">Replication</a>]<%}%>

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/replication/header.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/replication/header.jsp?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/replication/header.jsp (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/replication/header.jsp Wed Feb  9 09:35:27 2011
@@ -19,7 +19,7 @@
 <%@ page import="org.apache.solr.common.util.NamedList,
 				 org.apache.solr.common.util.SimpleOrderedMap,
 				 org.apache.solr.request.LocalSolrQueryRequest,
-				 org.apache.solr.request.SolrQueryResponse,
+				 org.apache.solr.response.SolrQueryResponse,
 				 org.apache.solr.request.SolrRequestHandler,
                                  java.util.Map"%>
 <%@ page import="org.apache.solr.handler.ReplicationHandler" %>