Would it make sense for the ResponseParser to take define:
public abstract NamedList<Object> processResponse(InputStream body, Charset encoding);

instead of a string for the Encoding?

Alternatively, should it throw the UnsupportedEncodingException if it does take a String?

Thus, I would propose:
public abstract NamedList<Object> processResponse(InputStream body, String encoding) throws UnsupportedEncodingException; public abstract NamedList<Object> processResponse(InputStream body, Charset encoding);

Although my general feeling is to just say to support the Charset one, which is more strongly typed and doesn't require the exception to be generated by Solr.

-Grant

On Jan 25, 2008, at 12:18 AM, [EMAIL PROTECTED] wrote:

Author: yonik
Date: Thu Jan 24 21:18:16 2008
New Revision: 615112

URL: http://svn.apache.org/viewvc?rev=615112&view=rev
Log:
SOLR-457: SolrJ updates - allow client to pass HttpClient, change interfaces to classes, use InputStream for XML parser, make XML factory static

Added:
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXMLRequest.java - copied, changed from r615015, lucene/solr/trunk/client/java/ solrj/src/org/apache/solr/client/solrj/request/DirectXmlRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/LukeRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/MultiCoreRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/QueryRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/UpdateRequest.java
Removed:
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/RequestBase.java
Modified:
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/ResponseParser.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrResponse.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/embedded/EmbeddedSolrServer.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/CommonsHttpSolrServer.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/XMLResponseParser.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXmlRequest.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/SolrPing.java lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/response/SolrResponseBase.java

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/ResponseParser.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/ResponseParser.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/ResponseParser.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/ResponseParser.java Thu Jan 24 21:18:16 2008
@@ -18,6 +18,8 @@
package org.apache.solr.client.solrj;

import java.io.Reader;
+import java.io.InputStream;
+import java.io.InputStreamReader;

import org.apache.solr.common.util.NamedList;

@@ -26,8 +28,11 @@
 * @version $Id$
 * @since solr 1.3
 */
-public interface ResponseParser
+public abstract class ResponseParser
{
-  String getWriterType(); // for example: wt=XML, JSON, etc
-  NamedList<Object> processResponse( Reader body );
+ public abstract String getWriterType(); // for example: wt=XML, JSON, etc
+
+ public abstract NamedList<Object> processResponse(InputStream body, String encoding);
+
+  public abstract NamedList<Object> processResponse(Reader reader);
}

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/SolrRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/SolrRequest.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrRequest.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrRequest.java Thu Jan 24 21:18:16 2008
@@ -29,17 +29,53 @@
 * @version $Id$
 * @since solr 1.3
 */
-public interface SolrRequest extends Serializable
+public abstract class SolrRequest implements Serializable
{
  public enum METHOD {
    GET,
    POST
  };
-
-  public String getPath();
-  public String getCore();  // the name of requested core
-  public METHOD getMethod();
-  public SolrParams getParams();
- public Collection<ContentStream> getContentStreams() throws IOException; - public SolrResponse process( SolrServer server ) throws SolrServerException, IOException;
+
+  private METHOD method = METHOD.GET;
+  private String path = null;
+  private String core = null;
+
+  //---------------------------------------------------------
+  //---------------------------------------------------------
+
+  public SolrRequest( METHOD m, String path )
+  {
+    this.method = m;
+    this.path = path;
+  }
+
+  //---------------------------------------------------------
+  //---------------------------------------------------------
+
+  public METHOD getMethod() {
+    return method;
+  }
+  public void setMethod(METHOD method) {
+    this.method = method;
+  }
+
+  public String getPath() {
+    return path;
+  }
+  public void setPath(String path) {
+    this.path = path;
+  }
+
+  public String getCore() {
+    return core;
+  }
+
+  public void setCore(String core) {
+    this.core = core;
+  }
+
+
+  public abstract SolrParams getParams();
+ public abstract Collection<ContentStream> getContentStreams() throws IOException; + public abstract SolrResponse process( SolrServer server ) throws SolrServerException, IOException;
}

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/SolrResponse.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/SolrResponse.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrResponse.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/SolrResponse.java Thu Jan 24 21:18:16 2008
@@ -27,8 +27,8 @@
 * @version $Id$
 * @since solr 1.3
 */
-public interface SolrResponse extends Serializable
+public abstract class SolrResponse implements Serializable
{
-  long getElapsedTime();
-  NamedList<Object> getResponse();
+  public abstract long getElapsedTime();
+  public abstract NamedList<Object> getResponse();
}

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/embedded/EmbeddedSolrServer.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/embedded/EmbeddedSolrServer.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/embedded/EmbeddedSolrServer.java Thu Jan 24 21:18:16 2008
@@ -165,6 +165,7 @@
QueryResponseWriter responseWriter = core.getQueryResponseWriter(req);
      StringWriter out = new StringWriter();
      responseWriter.write(out, req, rsp);
+      // TODO: writers might be able to output binary someday

      req.close();
return _processor.processResponse( new StringReader( out.toString() ) );

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/impl/CommonsHttpSolrServer.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/CommonsHttpSolrServer.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/CommonsHttpSolrServer.java Thu Jan 24 21:18:16 2008
@@ -29,14 +29,7 @@
import java.util.zip.GZIPInputStream;
import java.util.zip.InflaterInputStream;

-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.NoHttpResponseException;
+import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
@@ -88,6 +81,15 @@
    this(new URL(solrServerUrl));
  }

+ /** Talk to the Solr server via the given HttpClient. The connection manager + * for the client should be a MultiThreadedHttpConnectionManager if this + * client is being reused across SolrServer instances, or of multiple threads
+   * will use this SolrServer.
+   */
+ public CommonsHttpSolrServer(String solrServerUrl, HttpClient httpClient) throws MalformedURLException {
+    this(new URL(solrServerUrl), httpClient);
+  }
+
  /**
   * @param baseURL The URL of the Solr server.  For
   * example, "<code>http://localhost:8983/solr/</code>"
@@ -96,17 +98,26 @@
   */
  public CommonsHttpSolrServer(URL baseURL)
  {
+    this(baseURL, null);
+  }
+
+
+  private CommonsHttpSolrServer(URL baseURL, HttpClient client) {
    this._baseURL = baseURL.toExternalForm();
    if( this._baseURL.endsWith( "/" ) ) {
this._baseURL = this._baseURL.substring( 0, this._baseURL.length()-1 );
    }
-
-    this._httpClient = createHttpClient();
-
-    // increase the default connections
-    this.setDefaultMaxConnectionsPerHost( 32 );  // 2
-    this.setMaxTotalConnections( 128 ); // 20
-
+
+ _httpClient = (client == null) ? new HttpClient(new MultiThreadedHttpConnectionManager()) : client;
+
+    if (client == null) {
+ // set some better defaults if we created a new connection manager and client
+
+      // increase the default connections
+      this.setDefaultMaxConnectionsPerHost( 32 );  // 2
+      this.setMaxTotalConnections( 128 ); // 20
+    }
+
    // by default use the XML one
    _processor = new XMLResponseParser();

@@ -115,14 +126,7 @@
_invariantParams.set( CommonParams.WT, _processor.getWriterType() );
    _invariantParams.set( CommonParams.VERSION, "2.2" );
  }
-
-  /**
-   * This can be overridden to add certificates etc
-   */
-  protected HttpClient createHttpClient()
-  {
- return new HttpClient( new MultiThreadedHttpConnectionManager() );
-  }
+

  //------------------------------------------------------------------------
  //------------------------------------------------------------------------
@@ -320,8 +324,7 @@
          }
        }
      }
-      Reader reader = new InputStreamReader( respBody, charset );
-      return _processor.processResponse( reader );
+      return _processor.processResponse(respBody, charset);
    }
    catch (HttpException e) {
      throw new SolrServerException( e );
@@ -362,11 +365,15 @@
    _processor = processor;
  }

-  public MultiThreadedHttpConnectionManager getConnectionManager() {
- return (MultiThreadedHttpConnectionManager )_httpClient.getHttpConnectionManager();
+  public HttpClient getHttpClient() {
+    return _httpClient;
+  }
+
+  private HttpConnectionManager getConnectionManager() {
+    return _httpClient.getHttpConnectionManager();
  }

- /** set connectionTimeout on the underlying MultiThreadedHttpConnectionManager */ + /** set connectionTimeout on the underlying HttpConnectionManager */
  public void setConnectionTimeout(int timeout) {
    getConnectionManager().getParams().setConnectionTimeout(timeout);
  }
@@ -376,17 +383,17 @@
    _httpClient.getParams().setConnectionManagerTimeout(timeout);
  }

- /** set soTimeout (read timeout) on the underlying MultiThreadedHttpConnectionManager. This is desirable for queries, but probably not for indexing. */ + /** set soTimeout (read timeout) on the underlying HttpConnectionManager. This is desirable for queries, but probably not for indexing. */
  public void setSoTimeout(int timeout) {
    getConnectionManager().getParams().setSoTimeout(timeout);
  }

- /** set maxConnectionsPerHost on the underlying MultiThreadedHttpConnectionManager */ + /** set maxConnectionsPerHost on the underlying HttpConnectionManager */
  public void setDefaultMaxConnectionsPerHost(int connections) {
getConnectionManager ().getParams().setDefaultMaxConnectionsPerHost(connections);
  }

- /** set maxTotalConnection on the underlying MultiThreadedHttpConnectionManager */ + /** set maxTotalConnection on the underlying HttpConnectionManager */
  public void setMaxTotalConnections(int connections) {
getConnectionManager ().getParams().setMaxTotalConnections(connections);
  }

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/impl/XMLResponseParser.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/XMLResponseParser.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/impl/XMLResponseParser.java Thu Jan 24 21:18:16 2008
@@ -18,6 +18,7 @@
package org.apache.solr.client.solrj.impl;

import java.io.Reader;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -40,14 +41,14 @@
 * @version $Id$
 * @since solr 1.3
 */
-public class XMLResponseParser implements ResponseParser
+public class XMLResponseParser extends ResponseParser
{
public static Logger log = Logger.getLogger(XMLResponseParser.class.getName());
-
-  XMLInputFactory factory;
-
-  public XMLResponseParser()
-  {
+
+ // reuse the factory among all parser instances so things like string caches
+  // won't be duplicated
+  static final XMLInputFactory factory;
+  static {
    factory = XMLInputFactory.newInstance();
    try {
// The java 1.6 bundled stax parser (sjsxp) does not currently have a thread-safe
@@ -64,25 +65,43 @@
log.fine( "Unable to set the 'reuse-instance' property for the input factory: "+factory );
    }
  }
+
+  public XMLResponseParser() {}

  public String getWriterType()
  {
    return "xml";
  }

+  public NamedList<Object> processResponse(Reader in) {
+    XMLStreamReader parser = null;
+    try {
+      parser = factory.createXMLStreamReader(in);
+    } catch (XMLStreamException e) {
+ throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, "parsing error", e);
+    }
+
+    return processResponse(parser);
+  }
+
+ public NamedList<Object> processResponse(InputStream in, String encoding)
+  {
+     XMLStreamReader parser = null;
+    try {
+      parser = factory.createXMLStreamReader(in, encoding);
+    } catch (XMLStreamException e) {
+ throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, "parsing error", e);
+    }
+
+    return processResponse(parser);
+  }
+
  /**
   * parse the text into a named list...
   */
-  public NamedList<Object> processResponse( Reader in )
+  private NamedList<Object> processResponse(XMLStreamReader parser)
  {
-    XMLStreamReader parser = null;
-    try {
-//      String txt = IOUtils.toString( in );
-//      in = new StringReader( txt );
-//      System.out.println( "TEXT:"+txt );
-
-      parser = factory.createXMLStreamReader(in);
-
+    try {
      NamedList<Object> response = null;
      for (int event = parser.next();
       event != XMLStreamConstants.END_DOCUMENT;

Copied: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/DirectXMLRequest.java (from r615015, lucene/ solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/ request/DirectXmlRequest.java)
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/DirectXMLRequest.java?p2=lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/DirectXMLRequest.java&p1=lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/DirectXmlRequest.java&r1=615015&r2=615112&rev=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXmlRequest.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXMLRequest.java Thu Jan 24 21:18:16 2008
@@ -22,6 +22,7 @@

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.params.SolrParams;
@@ -33,7 +34,7 @@
 * @version $Id$
 * @since solr 1.3
 */
-public class DirectXmlRequest extends RequestBase
+public class DirectXmlRequest extends SolrRequest
{
  final String xml;


Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/DirectXmlRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/DirectXmlRequest.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXmlRequest.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/DirectXmlRequest.java Thu Jan 24 21:18:16 2008
@@ -22,6 +22,7 @@

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.params.SolrParams;
@@ -33,7 +34,7 @@
 * @version $Id$
 * @since solr 1.3
 */
-public class DirectXmlRequest extends RequestBase
+public class DirectXmlRequest extends SolrRequest
{
  final String xml;


Added: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/LukeRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/LukeRequest.java?rev=615112&view=auto
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/LukeRequest.java (added) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/LukeRequest.java Thu Jan 24 21:18:16 2008
@@ -0,0 +1,103 @@
+/**
+ * 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.client.solrj.request;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.response.LukeResponse;
+import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.ContentStream;
+
+/**
+ *
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class LukeRequest extends SolrRequest
+{
+  private List<String> fields;
+  private int count = -1;
+  private boolean showSchema = false;
+
+  public LukeRequest()
+  {
+    super( METHOD.GET, "/admin/luke" );
+  }
+
+  public LukeRequest( String path )
+  {
+    super( METHOD.GET, path );
+  }
+
+ //--------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------
+
+  public void addField( String f )
+  {
+    if( fields == null ) {
+      fields = new ArrayList<String>();
+    }
+    fields.add( f );
+  }
+
+ //--------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------
+
+  public boolean isShowSchema() {
+    return showSchema;
+  }
+
+  public void setShowSchema(boolean showSchema) {
+    this.showSchema = showSchema;
+  }
+
+  public Collection<ContentStream> getContentStreams() {
+    return null;
+  }
+
+  public SolrParams getParams() {
+    ModifiableSolrParams params = new ModifiableSolrParams();
+    if( fields != null && fields.size() > 0 ) {
+ params.add( CommonParams.FL, fields.toArray( new String[fields.size()] ) );
+    }
+    if( count >= 0 ) {
+      params.add( "count", count+"" );
+    }
+    if (showSchema) {
+       params.add("show", "schema");
+    }
+    return params;
+  }
+
+ public LukeResponse process( SolrServer server ) throws SolrServerException, IOException
+  {
+    long startTime = System.currentTimeMillis();
+    LukeResponse res = new LukeResponse( server.request( this ) );
+    res.setElapsedTime( System.currentTimeMillis()-startTime );
+    return res;
+  }
+}
+

Added: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/MultiCoreRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/MultiCoreRequest.java?rev=615112&view=auto
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/MultiCoreRequest.java (added) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/MultiCoreRequest.java Thu Jan 24 21:18:16 2008
@@ -0,0 +1,130 @@
+/**
+ * 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.client.solrj.request;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.response.MultiCoreResponse;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.MultiCoreParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.params.MultiCoreParams.MultiCoreAction;
+import org.apache.solr.common.util.ContentStream;
+
+/**
+ *
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class MultiCoreRequest extends SolrRequest
+{
+  private MultiCoreParams.MultiCoreAction action = null;
+  private String core = null;
+
+  public MultiCoreRequest()
+  {
+    super( METHOD.GET, "/admin/multicore" );
+  }
+
+  public MultiCoreRequest( String path )
+  {
+    super( METHOD.GET, path );
+  }
+
+  public final void setCoreParam( String v )
+  {
+    this.core = v;
+  }
+
+  @Override
+  public final void setCore( String v )
+  {
+ throw new UnsupportedOperationException( "MultiCoreRequest does not use a core.");
+  }
+
+  @Override
+  public final String getCore()
+  {
+    return ""; // force it to invalid core
+  }
+
+ //---------------------------------------------------------------------------------------
+  //
+ //---------------------------------------------------------------------------------------
+
+  public void setAction( MultiCoreAction action )
+  {
+    this.action = action;
+  }
+
+ //---------------------------------------------------------------------------------------
+  //
+ //---------------------------------------------------------------------------------------
+
+  public SolrParams getParams()
+  {
+    if( action == null ) {
+      throw new RuntimeException( "no action specified!" );
+    }
+    ModifiableSolrParams params = new ModifiableSolrParams();
+    params.set( MultiCoreParams.ACTION, action.toString() );
+    params.set( MultiCoreParams.CORE, core );
+    return params;
+  }
+
+ //---------------------------------------------------------------------------------------
+  //
+ //---------------------------------------------------------------------------------------
+
+ public Collection<ContentStream> getContentStreams() throws IOException {
+    return null;
+  }
+
+ public MultiCoreResponse process(SolrServer server) throws SolrServerException, IOException
+  {
+    long startTime = System.currentTimeMillis();
+ MultiCoreResponse res = new MultiCoreResponse( server.request( this ) );
+    res.setElapsedTime( System.currentTimeMillis()-startTime );
+    return res;
+  }
+
+ //---------------------------------------------------------------------------------------
+  //
+ //---------------------------------------------------------------------------------------
+
+ public static MultiCoreResponse reloadCore( String name, SolrServer server ) throws SolrServerException, IOException
+  {
+    MultiCoreRequest req = new MultiCoreRequest();
+    req.setCoreParam( name );
+    req.setAction( MultiCoreAction.RELOAD );
+    return req.process( server );
+  }
+
+ public static MultiCoreResponse getStatus( String name, SolrServer server ) throws SolrServerException, IOException
+  {
+    MultiCoreRequest req = new MultiCoreRequest();
+    req.setCoreParam( name );
+    req.setAction( MultiCoreAction.STATUS );
+    return req.process( server );
+  }
+}
+

Added: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/QueryRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/QueryRequest.java?rev=615112&view=auto
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/QueryRequest.java (added) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/QueryRequest.java Thu Jan 24 21:18:16 2008
@@ -0,0 +1,91 @@
+/**
+ * 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.client.solrj.request;
+
+import java.util.Collection;
+
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.ContentStream;
+
+/**
+ *
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class QueryRequest extends SolrRequest
+{
+  private SolrParams query;
+
+  public QueryRequest()
+  {
+    super( METHOD.GET, null );
+  }
+
+  public QueryRequest( SolrParams q )
+  {
+    super( METHOD.GET, null );
+    query = q;
+  }
+
+  /**
+   * Use the params 'QT' parameter if it exists
+   */
+  @Override
+  public String getPath() {
+    String qt = query.get( CommonParams.QT );
+    if( qt == null ) {
+      qt = super.getPath();
+    }
+    if( qt != null && qt.startsWith( "/" ) ) {
+      return qt;
+    }
+    return "/select";
+  }
+
+ //--------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------
+
+  public Collection<ContentStream> getContentStreams() {
+    return null;
+  }
+
+  public SolrParams getParams() {
+    return query;
+  }
+
+ public QueryResponse process( SolrServer server ) throws SolrServerException
+  {
+    try
+    {
+      long startTime = System.currentTimeMillis();
+ QueryResponse res = new QueryResponse( server.request( this ) );
+      res.setElapsedTime( System.currentTimeMillis()-startTime );
+      return res;
+    }
+    catch (Exception e)
+    {
+      throw new SolrServerException("Error executing query", e);
+    }
+  }
+}
+

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/SolrPing.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/SolrPing.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/SolrPing.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/SolrPing.java Thu Jan 24 21:18:16 2008
@@ -22,9 +22,9 @@

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;

/**
@@ -32,7 +32,7 @@
 * @version $Id$
 * @since solr 1.3
 */
-public class SolrPing extends RequestBase
+public class SolrPing extends SolrRequest
{
  private ModifiableSolrParams params;


Added: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/request/UpdateRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/request/UpdateRequest.java?rev=615112&view=auto
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/UpdateRequest.java (added) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/request/UpdateRequest.java Thu Jan 24 21:18:16 2008
@@ -0,0 +1,281 @@
+/**
+ * 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.client.solrj.request;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.client.solrj.util.ClientUtils;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.XML;
+
+/**
+ *
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class UpdateRequest extends SolrRequest
+{
+  public enum ACTION {
+    COMMIT,
+    OPTIMIZE
+  };
+
+  private boolean waitFlush = true;
+  private boolean waitSearcher = true;
+  private boolean allowDups = false;
+  private boolean overwriteCommitted = true;
+  private boolean overwritePending = true;
+  private ACTION action = null;
+
+  private List<SolrInputDocument> documents = null;
+  private List<String> deleteById = null;
+  private List<String> deleteQuery = null;
+
+  public UpdateRequest()
+  {
+    super( METHOD.POST, "/update" );
+  }
+
+ //--------------------------------------------------------------------------- + //---------------------------------------------------------------------------
+
+  /**
+   * clear the pending documents and delete commands
+   */
+  public void clear()
+  {
+    if( documents != null ) {
+      documents.clear();
+    }
+    if( deleteById != null ) {
+      deleteById.clear();
+    }
+    if( deleteQuery != null ) {
+      deleteQuery.clear();
+    }
+  }
+
+ //--------------------------------------------------------------------------- + //---------------------------------------------------------------------------
+
+  public UpdateRequest add( final SolrInputDocument doc )
+  {
+    if( documents == null ) {
+      documents = new ArrayList<SolrInputDocument>( 2 );
+    }
+    documents.add( doc );
+    return this;
+  }
+
+ public UpdateRequest add( final Collection<SolrInputDocument> docs )
+  {
+    if( documents == null ) {
+      documents = new ArrayList<SolrInputDocument>( docs.size()+1 );
+    }
+    documents.addAll( docs );
+    return this;
+  }
+
+  public UpdateRequest deleteById( String id )
+  {
+    if( deleteById == null ) {
+      deleteById = new ArrayList<String>();
+    }
+    deleteById.add( id );
+    return this;
+  }
+
+  public UpdateRequest deleteByQuery( String q )
+  {
+    if( deleteQuery == null ) {
+      deleteQuery = new ArrayList<String>();
+    }
+    deleteQuery.add( q );
+    return this;
+  }
+
+ public UpdateRequest setAction(ACTION action, boolean waitFlush, boolean waitSearcher ) {
+    this.action = action;
+    this.waitFlush = waitFlush;
+    this.waitSearcher = waitSearcher;
+    return this;
+  }
+
+ //-------------------------------------------------------------------------- + //--------------------------------------------------------------------------
+
+ public Collection<ContentStream> getContentStreams() throws IOException { + return ClientUtils.toContentStreams( getXML(), ClientUtils.TEXT_XML );
+  }
+
+  public String getXML() throws IOException {
+    StringWriter writer = new StringWriter();
+    if( documents != null && documents.size() > 0 ) {
+      writer.write("<add ");
+      writer.write("allowDups=\"" + allowDups + "\" ");
+      // TODO: remove these when deprecations are removed
+ writer.write("overwriteCommitted=\"" + overwriteCommitted + "\" ");
+      writer.write("overwritePending=\"" + overwritePending + "\">");
+      for (SolrInputDocument doc : documents ) {
+        if( doc != null ) {
+          ClientUtils.writeXML( doc, writer );
+        }
+      }
+      writer.write("</add>");
+    }
+
+    // Add the delete commands
+    boolean deleteI = deleteById != null && deleteById.size() > 0;
+    boolean deleteQ = deleteQuery != null && deleteQuery.size() > 0;
+    if( deleteI || deleteQ ) {
+      writer.append( "<delete>" );
+      if( deleteI ) {
+        for( String id : deleteById ) {
+          writer.append( "<id>" );
+          XML.escapeCharData( id, writer );
+          writer.append( "</id>" );
+        }
+      }
+      if( deleteQ ) {
+        for( String q : deleteQuery ) {
+          writer.append( "<query>" );
+          XML.escapeCharData( q, writer );
+          writer.append( "</query>" );
+        }
+      }
+      writer.append( "</delete>" );
+    }
+
+    // If action is COMMIT or OPTIMIZE, it is sent with params
+    String xml = writer.toString();
+    //System.out.println( "SEND:"+xml );
+    return (xml.length() > 0) ? xml : null;
+  }
+
+ //-------------------------------------------------------------------------- + //--------------------------------------------------------------------------
+
+  public SolrParams getParams() {
+    if( action != null ) {
+      ModifiableSolrParams params = new ModifiableSolrParams();
+      if( action == ACTION.OPTIMIZE ) {
+        params.set( UpdateParams.OPTIMIZE, "true" );
+      }
+      else if( action == ACTION.COMMIT ) {
+        params.set( UpdateParams.COMMIT, "true" );
+      }
+      params.set( UpdateParams.WAIT_FLUSH, waitFlush+"" );
+      params.set( UpdateParams.WAIT_SEARCHER, waitSearcher+"" );
+      return params;
+    }
+    return null;
+  }
+
+ public UpdateResponse process( SolrServer server ) throws SolrServerException, IOException
+  {
+    long startTime = System.currentTimeMillis();
+ UpdateResponse res = new UpdateResponse( server.request( this ) );
+    res.setElapsedTime( System.currentTimeMillis()-startTime );
+    return res;
+  }
+
+ //--------------------------------------------------------------------------
+  //
+ //--------------------------------------------------------------------------
+
+  public void setOverwrite( boolean v )
+  {
+    allowDups = !v;
+    overwriteCommitted = v;
+    overwritePending = v;
+  }
+
+ //--------------------------------------------------------------------------
+  //
+ //--------------------------------------------------------------------------
+
+  public boolean isWaitFlush() {
+    return waitFlush;
+  }
+
+  public boolean isWaitSearcher() {
+    return waitSearcher;
+  }
+
+  public ACTION getAction() {
+    return action;
+  }
+
+  public boolean isAllowDups() {
+    return allowDups;
+  }
+
+  /**
+   * Use setOverwrite()
+   */
+  @Deprecated
+  public void setAllowDups(boolean allowDups) {
+    this.allowDups = allowDups;
+  }
+
+  @Deprecated
+  public boolean isOverwriteCommitted() {
+    return overwriteCommitted;
+  }
+
+  /**
+   * Use setOverwrite()
+   */
+  @Deprecated
+  public void setOverwriteCommitted(boolean overwriteCommitted) {
+    this.overwriteCommitted = overwriteCommitted;
+  }
+
+  @Deprecated
+  public boolean isOverwritePending() {
+    return overwritePending;
+  }
+
+  /**
+   * Use setOverwrite()
+   */
+  @Deprecated
+  public void setOverwritePending(boolean overwritePending) {
+    this.overwritePending = overwritePending;
+  }
+
+  public void setWaitFlush(boolean waitFlush) {
+    this.waitFlush = waitFlush;
+  }
+
+  public void setWaitSearcher(boolean waitSearcher) {
+    this.waitSearcher = waitSearcher;
+  }
+}

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ client/solrj/response/SolrResponseBase.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/response/SolrResponseBase.java?rev=615112&r1=615111&r2=615112&view=diff
= = = = = = = = ====================================================================== --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/response/SolrResponseBase.java (original) +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ solrj/response/SolrResponseBase.java Thu Jan 24 21:18:16 2008
@@ -25,7 +25,7 @@
 * @version $Id$
 * @since solr 1.3
 */
-public abstract class SolrResponseBase implements SolrResponse
+public abstract class SolrResponseBase extends SolrResponse
{
  private long elapsedTime = -1;
  private NamedList<Object> response = null;



--------------------------
Grant Ingersoll
http://lucene.grantingersoll.com
http://www.lucenebootcamp.com

Lucene Helpful Hints:
http://wiki.apache.org/lucene-java/BasicsOfPerformance
http://wiki.apache.org/lucene-java/LuceneFAQ




Reply via email to