/**
* 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.servlet;
import java.io.File;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
/**
* DirectSolrConnection provides an interface to Solr that is similar to
* the the HTTP interface, but does not require an HTTP connection.
*
* This class is designed to be as simple as possible and allow for more flexibility
* in how you interface to Solr.
*
* @version $Id: DirectSolrConnection.java 1128442 2011-05-27 20:15:59Z mikemccand $
* @since solr 1.2
*/
public class DirectSolrConnection
{
//
// final SolrCore core;
// final SolrRequestParsers parser;
//
// /**
// * Initialize using the static singleton SolrCore.getSolrCore().
// *
// * @deprecated use {@link #DirectSolrConnection(SolrCore)}
// */
// @Deprecated
// public DirectSolrConnection()
// {
// this( SolrCore.getSolrCore() );
// }
//
// /**
// * Initialize using an explicit SolrCore
// */
// public DirectSolrConnection( SolrCore c )
// {
// core = c;
// parser = new SolrRequestParsers( c.getSolrConfig() );
// }
//
// /**
// * This constructor is designed to make it easy for JNI embedded applications
// * to setup the entire solr environment with a simple interface. It takes three parameters:
// *
// * <code>instanceDir:</code> The solr instance directory. If null, it will check the standard
// * places first (JNDI,properties,"solr" directory)
// *
// * <code>dataDir:</code> where the index is stored.
// *
// * <code>loggingPath:</code> Path to a java.util.logging.config.file. If the path represents
// * an absolute path or is relative to the CWD, it will use that. Next it will try a path
// * relative to the instanceDir. If none of these files exist, it will error.
// */
// public DirectSolrConnection( String instanceDir, String dataDir, String loggingPath )
// {
// // If a loggingPath is specified, try using that (this needs to happen first)
// if( loggingPath != null ) {
// File loggingConfig = new File( loggingPath );
// if( !loggingConfig.exists() && instanceDir != null ) {
// loggingConfig = new File( new File(instanceDir), loggingPath );
// }
// if( loggingConfig.exists() ) {
// System.setProperty("java.util.logging.config.file", loggingConfig.getAbsolutePath() );
// }
// else {
// throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, "can not find logging file: "+loggingConfig );
// }
// }
//
// if( instanceDir == null ) {
// instanceDir = SolrResourceLoader.locateInstanceDir();
// }
//
// // Initialize
// try {
// CoreContainer cores = new CoreContainer(new SolrResourceLoader(instanceDir));
// SolrConfig solrConfig = new SolrConfig(instanceDir, SolrConfig.DEFAULT_CONF_FILE, null);
// CoreDescriptor dcore = new CoreDescriptor(cores, "", solrConfig.getResourceLoader().getInstanceDir());
// IndexSchema indexSchema = new IndexSchema(solrConfig, instanceDir+"/conf/schema.xml", null);
// core = new SolrCore( null, dataDir, solrConfig, indexSchema, dcore);
// cores.register("", core, false);
// parser = new SolrRequestParsers( solrConfig );
// }
// catch (Exception ee) {
// throw new RuntimeException(ee);
// }
// }
//
//
// /**
// * For example:
// *
// * String json = solr.request( "/select?qt=dismax&wt=json&q=...", null );
// * String xml = solr.request( "/update", "<add><doc><field ..." );
// */
// public String request( String pathAndParams, String body ) throws Exception
// {
// String path = null;
// SolrParams params = null;
// int idx = pathAndParams.indexOf( '?' );
// if( idx > 0 ) {
// path = pathAndParams.substring( 0, idx );
// params = SolrRequestParsers.parseQueryString( pathAndParams.substring(idx+1) );
// }
// else {
// path= pathAndParams;
// params = new MapSolrParams( new HashMap<String, String>() );
// }
//
// // Extract the handler from the path or params
// SolrRequestHandler handler = core.getRequestHandler( path );
// if( handler == null ) {
// if( "/select".equals( path ) || "/select/".equalsIgnoreCase( path) ) {
// String qt = params.get( CommonParams.QT );
// handler = core.getRequestHandler( qt );
// if( handler == null ) {
// throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "unknown handler: "+qt);
// }
// }
// }
//
// if( handler == null ) {
// throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "unknown handler: "+path );
// }
//
// return request(handler, params, body);
// }
//
// public String request(SolrRequestHandler handler, SolrParams params, String body ) throws Exception {
//
// if (params == null)
// params = new MapSolrParams( new HashMap<String, String>() );
//
// // Make a stream for the 'body' content
// List<ContentStream> streams = new ArrayList<ContentStream>( 1 );
// if( body != null && body.length() > 0 ) {
// streams.add( new ContentStreamBase.StringStream( body ) );
// }
//
// SolrQueryRequest req = null;
// try {
// req = parser.buildRequestFrom( core, params, streams );
// SolrQueryResponse rsp = new SolrQueryResponse();
// core.execute( handler, req, rsp );
// if( rsp.getException() != null ) {
// throw rsp.getException();
// }
//
// // Now write it out
// QueryResponseWriter responseWriter = core.getQueryResponseWriter(req);
// StringWriter out = new StringWriter();
// responseWriter.write(out, req, rsp);
// return out.toString();
// } finally {
// if (req != null) {
// req.close();
// }
// }
// }
//
// /**
// * Use this method to close the underlying SolrCore.
// *
// * @since solr 1.3
// */
// public void close() {
// core.close();
// }
}