/**
* 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.core;
import java.util.Properties;
import java.io.File;
/**
* A Solr core descriptor
*
* @since solr 1.3
*/
public class CoreDescriptor {
protected String name;
protected String instanceDir;
protected String dataDir;
protected String configName;
protected String propertiesName;
protected String schemaName;
private final CoreContainer coreContainer;
private Properties coreProperties;
public CoreDescriptor(CoreContainer coreContainer, String name, String instanceDir) {
this.coreContainer = coreContainer;
this.name = name;
if (name == null) {
throw new RuntimeException("Core needs a name");
}
if (instanceDir == null) {
throw new NullPointerException("Missing required \'instanceDir\'");
}
instanceDir = SolrResourceLoader.normalizeDir(instanceDir);
this.instanceDir = instanceDir;
this.configName = getDefaultConfigName();
this.schemaName = getDefaultSchemaName();
}
public CoreDescriptor(CoreDescriptor descr) {
this.instanceDir = descr.instanceDir;
this.configName = descr.configName;
this.schemaName = descr.schemaName;
this.name = descr.name;
this.dataDir = descr.dataDir;
coreContainer = descr.coreContainer;
}
private Properties initImplicitProperties() {
Properties implicitProperties = new Properties(coreContainer.getContainerProperties());
implicitProperties.setProperty("solr.core.name", name);
implicitProperties.setProperty("solr.core.instanceDir", instanceDir);
implicitProperties.setProperty("solr.core.dataDir", getDataDir());
implicitProperties.setProperty("solr.core.configName", configName);
implicitProperties.setProperty("solr.core.schemaName", schemaName);
return implicitProperties;
}
/**@return the default config name. */
public String getDefaultConfigName() {
return "solrconfig.xml";
}
/**@return the default schema name. */
public String getDefaultSchemaName() {
return "schema.xml";
}
/**@return the default data directory. */
public String getDefaultDataDir() {
return "data" + File.separator;
}
public String getPropertiesName() {
return propertiesName;
}
public void setPropertiesName(String propertiesName) {
this.propertiesName = propertiesName;
}
public String getDataDir() {
String dataDir = this.dataDir;
if (dataDir == null) dataDir = getDefaultDataDir();
if (new File(dataDir).isAbsolute()) {
return dataDir;
} else {
if (new File(instanceDir).isAbsolute()) {
return SolrResourceLoader.normalizeDir(SolrResourceLoader.normalizeDir(instanceDir) + dataDir);
} else {
return SolrResourceLoader.normalizeDir(coreContainer.getSolrHome() +
SolrResourceLoader.normalizeDir(instanceDir) + dataDir);
}
}
}
public void setDataDir(String s) {
dataDir = s;
// normalize zero length to null.
if (dataDir != null && dataDir.length()==0) dataDir=null;
}
/**@return the core instance directory. */
public String getInstanceDir() {
return instanceDir;
}
/**Sets the core configuration resource name. */
public void setConfigName(String name) {
if (name == null || name.length() == 0)
throw new IllegalArgumentException("name can not be null or empty");
this.configName = name;
}
/**@return the core configuration resource name. */
public String getConfigName() {
return this.configName;
}
/**Sets the core schema resource name. */
public void setSchemaName(String name) {
if (name == null || name.length() == 0)
throw new IllegalArgumentException("name can not be null or empty");
this.schemaName = name;
}
/**@return the core schema resource name. */
public String getSchemaName() {
return this.schemaName;
}
/**@return the initial core name */
public String getName() {
return this.name;
}
public CoreContainer getCoreContainer() {
return coreContainer;
}
Properties getCoreProperties() {
return coreProperties;
}
/**
* Set this core's properties. Please note that some implicit values will be added to the
* Properties instance passed into this method. This means that the Properties instance
* set to this method will have different (less) key/value pairs than the Properties
* instance returned by #getCoreProperties method.
*
* @param coreProperties
*/
public void setCoreProperties(Properties coreProperties) {
if (this.coreProperties == null) {
Properties p = initImplicitProperties();
this.coreProperties = new Properties(p);
if(coreProperties != null)
this.coreProperties.putAll(coreProperties);
}
}
}