/**
* 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.ambari.scom;
import org.apache.ambari.server.configuration.Configuration;
import java.io.InputStream;
/**
* Provider for a input stream to the cluster definition file.
*/
public class ClusterDefinitionProvider {
/**
* The file name.
*/
private String fileName;
/**
* The cluster name.
*/
private String clusterName;
/**
* The hadoop version Id.
*/
private String versionId;
/**
* The singleton.
*/
private static ClusterDefinitionProvider singleton = new ClusterDefinitionProvider();
// ----- Constants ---------------------------------------------------------
protected static final String SCOM_CLUSTER_DEFINITION_FILENAME = "scom.cluster.definition.filename";
protected static final String DEFAULT_SCOM_CLUSTER_DEFINITION_FILENAME = "clusterproperties.txt";
protected static final String SCOM_CLUSTER_NAME = "scom.cluster.name";
protected static final String DEFAULT_CLUSTER_NAME = "ambari";
protected static final String SCOM_VERSION_ID = "scom.version.id";
protected static final String DEFAULT_VERSION_ID = "HDP-1.3.0";
// ----- Constructor -------------------------------------------------------
protected ClusterDefinitionProvider() {
}
// ----- ClusterDefinitionProvider -----------------------------------
/**
* Initialize with the given configuration.
*
* @param configuration the configuration
*/
public void init(Configuration configuration) {
fileName = configuration.getProperty(SCOM_CLUSTER_DEFINITION_FILENAME);
if (fileName == null) {
fileName = DEFAULT_SCOM_CLUSTER_DEFINITION_FILENAME;
}
clusterName = configuration.getProperty(SCOM_CLUSTER_NAME);
if (clusterName == null) {
clusterName = DEFAULT_CLUSTER_NAME;
}
versionId = configuration.getProperty(SCOM_VERSION_ID);
if (versionId == null) {
versionId = DEFAULT_VERSION_ID;
}
}
/**
* Get the singleton instance.
*
* @return the singleton instance
*/
public static ClusterDefinitionProvider instance() {
return singleton;
}
/**
* Get the cluster definition file name.
*
* @return the file name
*/
public String getFileName() {
return fileName;
}
/**
* Get the cluster name.
*
* @return the cluster name
*/
public String getClusterName() {
return clusterName;
}
/**
* Get the hadoop version Id.
*
* @return the version Id
*/
public String getVersionId() {
return versionId;
}
/**
* Set the associated filename.
*
* @param fileName the file name
*/
protected void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* Set the cluster name.
*
* @param clusterName the cluster name
*/
protected void setClusterName(String clusterName) {
this.clusterName = clusterName;
}
/**
* Set the version id.
*
* @param versionId the version id
*/
protected void setVersionId(String versionId) {
this.versionId = versionId;
}
/**
* Get an input stream to the cluster definition file.
*
* @return an input stream
*/
public InputStream getInputStream() {
InputStream is;
String name = this.fileName == null ? DEFAULT_SCOM_CLUSTER_DEFINITION_FILENAME : this.fileName;
try {
is = this.getClass().getClassLoader().getResourceAsStream(name);
if (is == null) {
throw new IllegalStateException("Can't find the resource " + name + " in the classpath.");
}
} catch (Exception e) {
String msg = "Caught exception reading " + name + ".";
throw new IllegalStateException(msg, e);
}
return is;
}
}