You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/10/29 21:00:49 UTC

svn commit: r1194973 - in /lucene/dev/branches/lucene2621/solr/core/src: test-files/solr/conf/solrconfig_codec.xml test/org/apache/solr/core/MockCodecProviderFactory.java

Author: rmuir
Date: Sat Oct 29 19:00:49 2011
New Revision: 1194973

URL: http://svn.apache.org/viewvc?rev=1194973&view=rev
Log:
LUCENE-3490: fix test

Modified:
    lucene/dev/branches/lucene2621/solr/core/src/test-files/solr/conf/solrconfig_codec.xml
    lucene/dev/branches/lucene2621/solr/core/src/test/org/apache/solr/core/MockCodecProviderFactory.java

Modified: lucene/dev/branches/lucene2621/solr/core/src/test-files/solr/conf/solrconfig_codec.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/solr/core/src/test-files/solr/conf/solrconfig_codec.xml?rev=1194973&r1=1194972&r2=1194973&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/solr/core/src/test-files/solr/conf/solrconfig_codec.xml (original)
+++ lucene/dev/branches/lucene2621/solr/core/src/test-files/solr/conf/solrconfig_codec.xml Sat Oct 29 19:00:49 2011
@@ -21,10 +21,10 @@
   
   <mainIndex>
     <codecProviderFactory class="org.apache.solr.core.MockCodecProviderFactory">
-      <str name="defaultCodec">Pulsing</str>
-      <lst name="codecs">
-        <str name="codec">org.apache.lucene.index.codecs.simpletext.SimpleTextCodec</str>
-        <str name="codec">org.apache.lucene.index.codecs.preflex.PreFlexCodec</str>
+      <str name="defaultPostingsFormat">Pulsing</str>
+      <lst name="postingsFormats">
+        <str name="format">org.apache.lucene.index.codecs.simpletext.SimpleTextPostingsFormat</str>
+        <str name="format">org.apache.lucene.index.codecs.memory.MemoryPostingsFormat</str>
       </lst>
     </codecProviderFactory>
   </mainIndex>

Modified: lucene/dev/branches/lucene2621/solr/core/src/test/org/apache/solr/core/MockCodecProviderFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/solr/core/src/test/org/apache/solr/core/MockCodecProviderFactory.java?rev=1194973&r1=1194972&r2=1194973&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/solr/core/src/test/org/apache/solr/core/MockCodecProviderFactory.java (original)
+++ lucene/dev/branches/lucene2621/solr/core/src/test/org/apache/solr/core/MockCodecProviderFactory.java Sat Oct 29 19:00:49 2011
@@ -17,47 +17,80 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.lucene.index.codecs.Codec;
+import org.apache.lucene.index.codecs.CoreCodecProvider;
 import org.apache.lucene.index.codecs.PostingsFormat;
 import org.apache.lucene.index.codecs.CodecProvider;
+import org.apache.lucene.index.codecs.lucene40.Lucene40Codec;
 import org.apache.lucene.index.codecs.lucene40.Lucene40PostingsFormat;
 import org.apache.lucene.index.codecs.pulsing.PulsingPostingsFormat;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.SchemaField;
 
 /**
  * CodecProviderFactory for testing, it inits a CP with Standard and Pulsing,
  * and also adds any codecs specified by classname in solrconfig.
  */
 public class MockCodecProviderFactory extends CodecProviderFactory {
-  private String defaultCodec;
-  private NamedList codecs;
+  private String defaultFormat;
+  private NamedList formats;
 
   @Override
   public void init(NamedList args) {
     super.init(args);
-    defaultCodec = (String) args.get("defaultCodec");
-    codecs = (NamedList) args.get("codecs");
+    defaultFormat = (String) args.get("defaultPostingsFormat");
+    formats = (NamedList) args.get("postingsFormats");
   }
 
   @Override
-  public CodecProvider create() {
-    CodecProvider cp = new CodecProvider();
-    cp.register(new Lucene40PostingsFormat());
-    cp.register(new PulsingPostingsFormat());
-    if (codecs != null) {
-      for (Object codec : codecs.getAll("name")) {
-        if (!cp.isCodecRegistered((String)codec)) {
+  public CodecProvider create(final IndexSchema schema) {
+    final Map<String,PostingsFormat> map = new HashMap<String,PostingsFormat>();
+    // add standard and pulsing
+    PostingsFormat p = new Lucene40PostingsFormat();
+    map.put(p.name, p);
+    p = new PulsingPostingsFormat();
+    map.put(p.name, p);
+    
+    if (formats != null) {
+      for (Object format : formats.getAll("name")) {
           try {
-            Class<? extends PostingsFormat> clazz = Class.forName((String)codec).asSubclass(PostingsFormat.class);
-            cp.register(clazz.newInstance());
+            Class<? extends PostingsFormat> clazz = Class.forName((String)format).asSubclass(PostingsFormat.class);
+            PostingsFormat fmt = clazz.newInstance();
+            map.put(fmt.name, fmt);
           } catch (Exception e) {
             throw new RuntimeException(e);
           }
-        }
       }
     }
-    if (defaultCodec != null) {
-      cp.setDefaultFieldCodec(defaultCodec);
-    }
-    return cp;
+    
+    final String defaultFormat = this.defaultFormat;
+    return new CoreCodecProvider() {
+      @Override
+      public Codec getDefaultCodec() {
+        return new Lucene40Codec() {
+          @Override
+          public String getPostingsFormatForField(String field) {
+            final SchemaField fieldOrNull = schema.getFieldOrNull(field);
+            if (fieldOrNull == null) {
+              throw new IllegalArgumentException("no such field " + field);
+            }
+            String postingsFormatName = fieldOrNull.getType().getPostingsFormat();
+            if (postingsFormatName != null) {
+              return postingsFormatName;
+            }
+            return defaultFormat;
+          }
+
+          @Override
+          public PostingsFormat getPostingsFormat(String formatName) {
+            return map.get(formatName);
+          }
+        };
+      }
+    };
   }
 }