/**
* 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 java.util.List;
import java.util.Arrays;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.CoreAdminResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
import org.apache.solr.common.util.ContentStream;
/**
* This class is experimental and subject to change.
* @version $Id: CoreAdminRequest.java 606335 2007-12-21 22:23:39Z ryan $
* @since solr 1.3
*/
public class CoreAdminRequest extends SolrRequest
{
protected String core = null;
protected String other = null;
protected CoreAdminParams.CoreAdminAction action = null;
//a create core request
public static class Create extends CoreAdminRequest {
protected String instanceDir;
protected String configName = null;
protected String schemaName = null;
protected String dataDir = null;
public Create() {
action = CoreAdminAction.CREATE;
}
public void setInstanceDir(String instanceDir) { this.instanceDir = instanceDir; }
public void setSchemaName(String schema) { this.schemaName = schema; }
public void setConfigName(String config) { this.configName = config; }
public void setDataDir(String dataDir) { this.dataDir = dataDir; }
public String getInstanceDir() { return instanceDir; }
public String getSchemaName() { return schemaName; }
public String getConfigName() { return configName; }
public String getDataDir() { return dataDir; }
@Override
public SolrParams getParams() {
if( action == null ) {
throw new RuntimeException( "no action specified!" );
}
ModifiableSolrParams params = new ModifiableSolrParams();
params.set( CoreAdminParams.ACTION, action.toString() );
if( action.equals(CoreAdminAction.CREATE) ) {
params.set( CoreAdminParams.NAME, core );
} else {
params.set( CoreAdminParams.CORE, core );
}
params.set( CoreAdminParams.INSTANCE_DIR, instanceDir);
if (configName != null) {
params.set( CoreAdminParams.CONFIG, configName);
}
if (schemaName != null) {
params.set( CoreAdminParams.SCHEMA, schemaName);
}
if (dataDir != null) {
params.set( CoreAdminParams.DATA_DIR, dataDir);
}
return params;
}
}
//a persist core request
public static class Persist extends CoreAdminRequest {
protected String fileName = null;
public Persist() {
action = CoreAdminAction.PERSIST;
}
public void setFileName(String name) {
fileName = name;
}
public String getFileName() {
return fileName;
}
@Override
public SolrParams getParams() {
if( action == null ) {
throw new RuntimeException( "no action specified!" );
}
ModifiableSolrParams params = new ModifiableSolrParams();
params.set( CoreAdminParams.ACTION, action.toString() );
if (fileName != null) {
params.set( CoreAdminParams.FILE, fileName);
}
return params;
}
}
public static class MergeIndexes extends CoreAdminRequest {
protected List<String> indexDirs;
public MergeIndexes() {
action = CoreAdminAction.MERGEINDEXES;
}
public void setIndexDirs(List<String> indexDirs) {
this.indexDirs = indexDirs;
}
public List<String> getIndexDirs() {
return indexDirs;
}
@Override
public SolrParams getParams() {
if (action == null) {
throw new RuntimeException("no action specified!");
}
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(CoreAdminParams.ACTION, action.toString());
params.set(CoreAdminParams.CORE, core);
if (indexDirs != null) {
for (String indexDir : indexDirs) {
params.set(CoreAdminParams.INDEX_DIR, indexDir);
}
}
return params;
}
}
public CoreAdminRequest()
{
super( METHOD.GET, "/admin/cores" );
}
public CoreAdminRequest( String path )
{
super( METHOD.GET, path );
}
public final void setCoreName( String coreName )
{
this.core = coreName;
}
public final void setOtherCoreName( String otherCoreName )
{
this.other = otherCoreName;
}
//---------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------
public void setAction( CoreAdminAction action )
{
this.action = action;
}
//---------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------
@Override
public SolrParams getParams()
{
if( action == null ) {
throw new RuntimeException( "no action specified!" );
}
ModifiableSolrParams params = new ModifiableSolrParams();
params.set( CoreAdminParams.ACTION, action.toString() );
params.set( CoreAdminParams.CORE, core );
if (other != null) {
params.set(CoreAdminParams.OTHER, other);
}
return params;
}
//---------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------
@Override
public Collection<ContentStream> getContentStreams() throws IOException {
return null;
}
@Override
public CoreAdminResponse process(SolrServer server) throws SolrServerException, IOException
{
long startTime = System.currentTimeMillis();
CoreAdminResponse res = new CoreAdminResponse();
res.setResponse( server.request( this ) );
res.setElapsedTime( System.currentTimeMillis()-startTime );
return res;
}
//---------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------
public static CoreAdminResponse reloadCore( String name, SolrServer server ) throws SolrServerException, IOException
{
CoreAdminRequest req = new CoreAdminRequest();
req.setCoreName( name );
req.setAction( CoreAdminAction.RELOAD );
return req.process( server );
}
public static CoreAdminResponse unloadCore( String name, SolrServer server ) throws SolrServerException, IOException
{
CoreAdminRequest req = new CoreAdminRequest();
req.setCoreName( name );
req.setAction( CoreAdminAction.UNLOAD );
return req.process( server );
}
public static CoreAdminResponse renameCore(String coreName, String newName, SolrServer server ) throws SolrServerException, IOException
{
CoreAdminRequest req = new CoreAdminRequest();
req.setCoreName(coreName);
req.setOtherCoreName(newName);
req.setAction( CoreAdminAction.RENAME );
return req.process( server );
}
public static CoreAdminResponse aliasCore(String coreName, String newName, SolrServer server ) throws SolrServerException, IOException
{
CoreAdminRequest req = new CoreAdminRequest();
req.setCoreName(coreName);
req.setOtherCoreName(newName);
req.setAction( CoreAdminAction.ALIAS );
return req.process( server );
}
public static CoreAdminResponse getStatus( String name, SolrServer server ) throws SolrServerException, IOException
{
CoreAdminRequest req = new CoreAdminRequest();
req.setCoreName( name );
req.setAction( CoreAdminAction.STATUS );
return req.process( server );
}
public static CoreAdminResponse createCore( String name, String instanceDir, SolrServer server ) throws SolrServerException, IOException
{
return CoreAdminRequest.createCore(name, instanceDir, server, null, null);
}
public static CoreAdminResponse createCore( String name, String instanceDir, SolrServer server, String configFile, String schemaFile ) throws SolrServerException, IOException
{
CoreAdminRequest.Create req = new CoreAdminRequest.Create();
req.setCoreName( name );
req.setInstanceDir(instanceDir);
if(configFile != null){
req.setConfigName(configFile);
}
if(schemaFile != null){
req.setSchemaName(schemaFile);
}
return req.process( server );
}
public static CoreAdminResponse persist(String fileName, SolrServer server) throws SolrServerException, IOException
{
CoreAdminRequest.Persist req = new CoreAdminRequest.Persist();
req.setFileName(fileName);
return req.process(server);
}
public static CoreAdminResponse mergeIndexes(String name,
String[] indexDirs, SolrServer server) throws SolrServerException,
IOException {
CoreAdminRequest.MergeIndexes req = new CoreAdminRequest.MergeIndexes();
req.setCoreName(name);
req.setIndexDirs(Arrays.asList(indexDirs));
return req.process(server);
}
}