You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gs...@apache.org on 2013/07/11 17:40:42 UTC

svn commit: r1502250 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/rest/schema/ solr/core/src/test/org/apache/solr/rest/schema/

Author: gsingers
Date: Thu Jul 11 15:40:42 2013
New Revision: 1502250

URL: http://svn.apache.org/r1502250
Log:
SOLR-5010: merge from trunk

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/CopyFieldCollectionResource.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/CopyFieldCollectionResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/CopyFieldCollectionResource.java?rev=1502250&r1=1502249&r2=1502250&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/CopyFieldCollectionResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/CopyFieldCollectionResource.java Thu Jul 11 15:40:42 2013
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -136,7 +137,19 @@ public class CopyFieldCollectionResource
                 log.error(message);
                 throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, message);
               }
-              List<String> destinations = (List<String>)map.get(IndexSchema.DESTINATION);
+              Object dest = map.get(IndexSchema.DESTINATION);
+              List<String> destinations = null;
+              if (dest != null) {
+                if (dest instanceof List){
+                  destinations = (List<String>)dest;
+                } else if (dest instanceof String){
+                  destinations = Collections.singletonList(dest.toString());
+                } else {
+                  String message = "Invalid '" + IndexSchema.DESTINATION + "' type.";
+                  log.error(message);
+                  throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, message);
+                }
+              }
               if (destinations == null) {
                 malformed.add(fieldName);
               } else {

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java?rev=1502250&r1=1502249&r2=1502250&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java Thu Jul 11 15:40:42 2013
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -155,7 +156,19 @@ public class FieldCollectionResource ext
                 throw new SolrException(ErrorCode.BAD_REQUEST, message);
               }
               // copyFields:"comma separated list of destination fields"
-              List<String> copyTo = (List<String>) map.get(IndexSchema.COPY_FIELDS);
+              Object copies = map.get(IndexSchema.COPY_FIELDS);
+              List<String> copyTo = null;
+              if (copies != null) {
+                if (copies instanceof List){
+                  copyTo = (List<String>) copies;
+                } else if (copies instanceof String){
+                  copyTo = Collections.singletonList(copies.toString());
+                } else {
+                  String message = "Invalid '" + IndexSchema.COPY_FIELDS + "' type.";
+                  log.error(message);
+                  throw new SolrException(ErrorCode.BAD_REQUEST, message);
+                }
+              }
               if (copyTo != null) {
                 map.remove(IndexSchema.COPY_FIELDS);
                 copyFields.put(fieldName, copyTo);

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java?rev=1502250&r1=1502249&r2=1502250&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java Thu Jul 11 15:40:42 2013
@@ -146,7 +146,19 @@ public class FieldResource extends BaseF
                 throw new SolrException(ErrorCode.BAD_REQUEST, message);
               } else {
                 ManagedIndexSchema oldSchema = (ManagedIndexSchema) getSchema();
-                List<String> copyFieldNames = (List<String>) map.get(IndexSchema.COPY_FIELDS);
+                Object copies = map.get(IndexSchema.COPY_FIELDS);
+                List<String> copyFieldNames = null;
+                if (copies != null) {
+                  if (copies instanceof List) {
+                    copyFieldNames = (List<String>) copies;
+                  } else if (copies instanceof String) {
+                    copyFieldNames = Collections.singletonList(copies.toString());
+                  } else {
+                    String message = "Invalid '" + IndexSchema.COPY_FIELDS + "' type.";
+                    log.error(message);
+                    throw new SolrException(ErrorCode.BAD_REQUEST, message);
+                  }
+                }
                 if (copyFieldNames != null) {
                   map.remove(IndexSchema.COPY_FIELDS);
                 }

Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java?rev=1502250&r1=1502249&r2=1502250&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java Thu Jul 11 15:40:42 2013
@@ -114,6 +114,9 @@ public class TestManagedSchemaFieldResou
     assertJPut("/schema/fields/fieldB",
         "{\"type\":\"text\",\"stored\":\"false\", \"copyFields\":[\"fieldA\"]}",
         "/responseHeader/status==0");
+    assertJPut("/schema/fields/fieldC",
+        "{\"type\":\"text\",\"stored\":\"false\", \"copyFields\":\"fieldA\"}",
+        "/responseHeader/status==0");
 
     assertQ("/schema/fields/fieldB?indent=on&wt=xml",
             "count(/response/lst[@name='field']) = 1",
@@ -121,12 +124,15 @@ public class TestManagedSchemaFieldResou
     assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldB",
         "count(/response/arr[@name='copyFields']/lst) = 1"
     );
+    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldC",
+        "count(/response/arr[@name='copyFields']/lst) = 1"
+    );
     //fine to pass in empty list, just won't do anything
     assertJPut("/schema/fields/fieldD",
         "{\"type\":\"text\",\"stored\":\"false\", \"copyFields\":[]}",
         "/responseHeader/status==0");
     //some bad usages
-    assertJPut("/schema/fields/fieldC",
+    assertJPut("/schema/fields/fieldF",
         "{\"type\":\"text\",\"stored\":\"false\", \"copyFields\":[\"some_nonexistent_field_ignore_exception\"]}",
         "/error/msg==\"copyField dest :\\'some_nonexistent_field_ignore_exception\\' is not an explicit field and doesn\\'t match a dynamicField.\"");
   }
@@ -185,7 +191,9 @@ public class TestManagedSchemaFieldResou
     assertJPost("/schema/fields",
               "[{\"name\":\"fieldD\",\"type\":\"text\",\"stored\":\"false\"},"
                + "{\"name\":\"fieldE\",\"type\":\"text\",\"stored\":\"false\"},"
-               + " {\"name\":\"fieldF\",\"type\":\"text\",\"stored\":\"false\", \"copyFields\":[\"fieldD\",\"fieldE\"]}]",
+               + " {\"name\":\"fieldF\",\"type\":\"text\",\"stored\":\"false\", \"copyFields\":[\"fieldD\",\"fieldE\"]},"
+               + " {\"name\":\"fieldG\",\"type\":\"text\",\"stored\":\"false\", \"copyFields\":\"fieldD\"}"//single
+               + "]",
                 "/responseHeader/status==0");
     assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldF",
         "count(/response/arr[@name='copyFields']/lst) = 2"
@@ -214,7 +222,7 @@ public class TestManagedSchemaFieldResou
                   + "{\"name\":\"fieldD\",\"type\":\"text\",\"stored\":\"false\"},"
                + " {\"name\":\"fieldE\",\"type\":\"text\",\"stored\":\"false\"}]",
                 "/responseHeader/status==0");
-    assertJPost("/schema/copyfields", "[{\"source\":\"fieldA\", \"dest\":[\"fieldB\"]},{\"source\":\"fieldD\", \"dest\":[\"fieldC\", \"fieldE\"]}]", "/responseHeader/status==0");
+    assertJPost("/schema/copyfields", "[{\"source\":\"fieldA\", \"dest\":\"fieldB\"},{\"source\":\"fieldD\", \"dest\":[\"fieldC\", \"fieldE\"]}]", "/responseHeader/status==0");
     assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldA",
         "count(/response/arr[@name='copyFields']/lst) = 1");
     assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldD",