/** * 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); } } }