You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2016/11/10 21:15:44 UTC
[14/36] lucene-solr:jira/solr-8593: SOLR-9717: Refactor '/export' to
not hardcode the JSON output and to use an API
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ef074a61/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/MapWriter.java b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
new file mode 100644
index 0000000..d5dad2a
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
@@ -0,0 +1,81 @@
+/*
+ * 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.common;
+
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Use this class if the Map size is not known
+ */
+public interface MapWriter extends MapSerializable {
+
+ @Override
+ default Map toMap(Map<String, Object> map) {
+ try {
+ writeMap(new EntryWriter() {
+ @Override
+ public EntryWriter put(String k, Object v) throws IOException {
+ map.put(k, v);
+ return this;
+ }
+
+ });
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return map;
+ }
+
+ void writeMap(EntryWriter ew) throws IOException;
+
+ interface EntryWriter {
+ /**Writes a key value into the map
+ * @param k The key
+ * @param v The value can be any supported object
+ */
+ EntryWriter put(String k, Object v) throws IOException;
+
+ default EntryWriter put(String k, int v) throws IOException {
+ put(k, (Integer) v);
+ return this;
+ }
+
+
+ default EntryWriter put(String k, long v) throws IOException {
+ put(k, (Long) v);
+ return this;
+ }
+
+
+ default EntryWriter put(String k, float v) throws IOException {
+ put(k, (Float) v);
+ return this;
+ }
+
+ default EntryWriter put(String k, double v) throws IOException{
+ put(k, (Double) v);
+ return this;
+ }
+ default EntryWriter put(String k, boolean v) throws IOException{
+ put(k, (Boolean) v);
+ return this;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ef074a61/solr/solrj/src/java/org/apache/solr/common/PushWriter.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/PushWriter.java b/solr/solrj/src/java/org/apache/solr/common/PushWriter.java
new file mode 100644
index 0000000..ddfac3c
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/common/PushWriter.java
@@ -0,0 +1,42 @@
+/*
+ * 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.common;
+
+
+import java.io.Closeable;
+import java.io.IOException;
+
+/**This is an interface to stream data out using a push API
+ *
+ */
+public interface PushWriter extends Closeable {
+
+ /**Write a Map. The map is opened in the beginning of the method
+ * and closed at the end. All map entries MUST be written before this
+ * method returns
+ */
+ void writeMap(MapWriter mw) throws IOException;
+
+ /**Write an array. The array is opened at the beginning of this method
+ * and closed at the end. All array entries must be returned before this
+ * method returns
+ *
+ */
+ void writeIterator(IteratorWriter iw) throws IOException;
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ef074a61/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
index 1f4b33b..261d2ec 100644
--- a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
+++ b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.util;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Path;
@@ -30,12 +31,22 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.NamedList.NamedListEntry;
-import org.apache.solr.core.*;
+import org.apache.solr.core.CloudConfig;
+import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.CoreDescriptor;
+import org.apache.solr.core.CorePropertiesLocator;
+import org.apache.solr.core.CoresLocator;
+import org.apache.solr.core.NodeConfig;
+import org.apache.solr.core.SolrConfig;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.core.SolrXmlConfig;
import org.apache.solr.handler.UpdateRequestHandler;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.request.SolrRequestInfo;
+import org.apache.solr.response.BinaryQueryResponseWriter;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
@@ -311,10 +322,18 @@ public class TestHarness extends BaseTestHarness {
if (rsp.getException() != null) {
throw rsp.getException();
}
- StringWriter sw = new StringWriter(32000);
QueryResponseWriter responseWriter = core.getQueryResponseWriter(req);
- responseWriter.write(sw,req,rsp);
- return sw.toString();
+ if (responseWriter instanceof BinaryQueryResponseWriter) {
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(32000);
+ BinaryQueryResponseWriter writer = (BinaryQueryResponseWriter) responseWriter;
+ writer.write(byteArrayOutputStream, req, rsp);
+ return new String(byteArrayOutputStream.toByteArray(), "UTF-8");
+ } else {
+ StringWriter sw = new StringWriter(32000);
+ responseWriter.write(sw,req,rsp);
+ return sw.toString();
+ }
+
} finally {
req.close();
SolrRequestInfo.clearRequestInfo();